@snokam/mcp-api 0.143.0 → 0.145.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,5017 @@
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/consultants": {
1292
+ "get": {
1293
+ "tags": [
1294
+ "Consultants"
1295
+ ],
1296
+ "summary": "List all known consultants (for manual selection)",
1297
+ "operationId": "ListConsultants",
1298
+ "parameters": [
1299
+ {
1300
+ "name": "query",
1301
+ "in": "query",
1302
+ "schema": {
1303
+ "type": "string"
1304
+ }
1305
+ }
1306
+ ],
1307
+ "responses": {
1308
+ "200": {
1309
+ "description": "Payload of Array of ConsultantSummary",
1310
+ "content": {
1311
+ "application/json": {
1312
+ "schema": {
1313
+ "type": "array",
1314
+ "items": {
1315
+ "$ref": "#/components/schemas/consultantSummary"
1316
+ }
1317
+ }
1318
+ }
1319
+ }
1320
+ }
1321
+ },
1322
+ "security": [
1323
+ {
1324
+ "Implicit": [
1325
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
1326
+ ]
1327
+ },
1328
+ {
1329
+ "ApiKey": []
1330
+ }
1331
+ ]
1332
+ }
1333
+ },
1334
+ "/v1.0/tenders/{id}/documents": {
1335
+ "get": {
1336
+ "tags": [
1337
+ "Documents"
1338
+ ],
1339
+ "summary": "List documents for a tender",
1340
+ "operationId": "ListTenderDocuments",
1341
+ "parameters": [
1342
+ {
1343
+ "name": "id",
1344
+ "in": "path",
1345
+ "required": true,
1346
+ "schema": {
1347
+ "type": "string"
1348
+ }
1349
+ }
1350
+ ],
1351
+ "responses": {
1352
+ "200": {
1353
+ "description": "Payload of Array of TenderDocument",
1354
+ "content": {
1355
+ "application/json": {
1356
+ "schema": {
1357
+ "type": "array",
1358
+ "items": {
1359
+ "$ref": "#/components/schemas/tenderDocument"
1360
+ }
1361
+ }
1362
+ }
1363
+ }
1364
+ },
1365
+ "404": {
1366
+ "description": "No description"
1367
+ }
1368
+ },
1369
+ "security": [
1370
+ {
1371
+ "Implicit": [
1372
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
1373
+ ]
1374
+ },
1375
+ {
1376
+ "ApiKey": []
1377
+ }
1378
+ ]
1379
+ },
1380
+ "post": {
1381
+ "tags": [
1382
+ "Documents"
1383
+ ],
1384
+ "summary": "Upload a new document to a tender",
1385
+ "operationId": "UploadTenderDocument",
1386
+ "parameters": [
1387
+ {
1388
+ "name": "id",
1389
+ "in": "path",
1390
+ "required": true,
1391
+ "schema": {
1392
+ "type": "string"
1393
+ }
1394
+ }
1395
+ ],
1396
+ "responses": {
1397
+ "200": {
1398
+ "description": "Payload of TenderDocument",
1399
+ "content": {
1400
+ "application/json": {
1401
+ "schema": {
1402
+ "$ref": "#/components/schemas/tenderDocument"
1403
+ }
1404
+ }
1405
+ }
1406
+ },
1407
+ "404": {
1408
+ "description": "No description"
1409
+ }
1410
+ },
1411
+ "security": [
1412
+ {
1413
+ "Implicit": [
1414
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
1415
+ ]
1416
+ },
1417
+ {
1418
+ "ApiKey": []
1419
+ }
1420
+ ]
1421
+ }
1422
+ },
1423
+ "/v1.0/tenders/{id}/documents/{docId}/download-url": {
1424
+ "get": {
1425
+ "tags": [
1426
+ "Documents"
1427
+ ],
1428
+ "summary": "Get a short-lived download URL for a document",
1429
+ "operationId": "GetDocumentDownloadUrl",
1430
+ "parameters": [
1431
+ {
1432
+ "name": "id",
1433
+ "in": "path",
1434
+ "required": true,
1435
+ "schema": {
1436
+ "type": "string"
1437
+ }
1438
+ },
1439
+ {
1440
+ "name": "docId",
1441
+ "in": "path",
1442
+ "required": true,
1443
+ "schema": {
1444
+ "type": "string"
1445
+ }
1446
+ }
1447
+ ],
1448
+ "responses": {
1449
+ "200": {
1450
+ "description": "Payload of Object",
1451
+ "content": {
1452
+ "application/json": {
1453
+ "schema": {
1454
+ "type": "object"
1455
+ }
1456
+ }
1457
+ }
1458
+ },
1459
+ "404": {
1460
+ "description": "No description"
1461
+ }
1462
+ },
1463
+ "security": [
1464
+ {
1465
+ "Implicit": [
1466
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
1467
+ ]
1468
+ },
1469
+ {
1470
+ "ApiKey": []
1471
+ }
1472
+ ]
1473
+ }
1474
+ },
1475
+ "/v1.0/tenders/{id}/documents/{docId}/download": {
1476
+ "get": {
1477
+ "tags": [
1478
+ "Documents"
1479
+ ],
1480
+ "summary": "Download a single document",
1481
+ "operationId": "DownloadDocument",
1482
+ "parameters": [
1483
+ {
1484
+ "name": "id",
1485
+ "in": "path",
1486
+ "required": true,
1487
+ "schema": {
1488
+ "type": "string"
1489
+ }
1490
+ },
1491
+ {
1492
+ "name": "docId",
1493
+ "in": "path",
1494
+ "required": true,
1495
+ "schema": {
1496
+ "type": "string"
1497
+ }
1498
+ }
1499
+ ],
1500
+ "responses": {
1501
+ "200": {
1502
+ "description": "Payload of Array of Byte",
1503
+ "content": {
1504
+ "application/octet-stream": {
1505
+ "schema": {
1506
+ "type": "string",
1507
+ "format": "binary"
1508
+ }
1509
+ }
1510
+ }
1511
+ },
1512
+ "404": {
1513
+ "description": "No description"
1514
+ }
1515
+ },
1516
+ "security": [
1517
+ {
1518
+ "Implicit": [
1519
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
1520
+ ]
1521
+ },
1522
+ {
1523
+ "ApiKey": []
1524
+ }
1525
+ ]
1526
+ }
1527
+ },
1528
+ "/v1.0/tenders/{id}/documents/download-all": {
1529
+ "get": {
1530
+ "tags": [
1531
+ "Documents"
1532
+ ],
1533
+ "summary": "Download all tender documents as a ZIP archive",
1534
+ "operationId": "DownloadAllDocuments",
1535
+ "parameters": [
1536
+ {
1537
+ "name": "id",
1538
+ "in": "path",
1539
+ "required": true,
1540
+ "schema": {
1541
+ "type": "string"
1542
+ }
1543
+ }
1544
+ ],
1545
+ "responses": {
1546
+ "200": {
1547
+ "description": "Payload of Array of Byte",
1548
+ "content": {
1549
+ "application/zip": {
1550
+ "schema": {
1551
+ "type": "string",
1552
+ "format": "binary"
1553
+ }
1554
+ }
1555
+ }
1556
+ },
1557
+ "404": {
1558
+ "description": "No description"
1559
+ }
1560
+ },
1561
+ "security": [
1562
+ {
1563
+ "Implicit": [
1564
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
1565
+ ]
1566
+ },
1567
+ {
1568
+ "ApiKey": []
1569
+ }
1570
+ ]
1571
+ }
1572
+ },
1573
+ "/v1.0/tenders/{id}/documents/{docId}/extract-questions": {
1574
+ "post": {
1575
+ "tags": [
1576
+ "Documents"
1577
+ ],
1578
+ "summary": "Start extraction of fillable questions from a document",
1579
+ "operationId": "StartQuestionExtraction",
1580
+ "parameters": [
1581
+ {
1582
+ "name": "id",
1583
+ "in": "path",
1584
+ "required": true,
1585
+ "schema": {
1586
+ "type": "string"
1587
+ }
1588
+ },
1589
+ {
1590
+ "name": "docId",
1591
+ "in": "path",
1592
+ "required": true,
1593
+ "schema": {
1594
+ "type": "string"
1595
+ }
1596
+ }
1597
+ ],
1598
+ "responses": {
1599
+ "202": {
1600
+ "description": "Payload of Object",
1601
+ "content": {
1602
+ "application/json": {
1603
+ "schema": {
1604
+ "type": "object"
1605
+ }
1606
+ }
1607
+ }
1608
+ },
1609
+ "404": {
1610
+ "description": "No description"
1611
+ }
1612
+ },
1613
+ "security": [
1614
+ {
1615
+ "Implicit": [
1616
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
1617
+ ]
1618
+ },
1619
+ {
1620
+ "ApiKey": []
1621
+ }
1622
+ ]
1623
+ }
1624
+ },
1625
+ "/v1.0/tenders/{id}/documents/{docId}/fill-questions": {
1626
+ "post": {
1627
+ "tags": [
1628
+ "Documents"
1629
+ ],
1630
+ "summary": "Start filling tender question answers per consultant",
1631
+ "operationId": "StartQuestionFill",
1632
+ "parameters": [
1633
+ {
1634
+ "name": "id",
1635
+ "in": "path",
1636
+ "required": true,
1637
+ "schema": {
1638
+ "type": "string"
1639
+ }
1640
+ },
1641
+ {
1642
+ "name": "docId",
1643
+ "in": "path",
1644
+ "required": true,
1645
+ "schema": {
1646
+ "type": "string"
1647
+ }
1648
+ }
1649
+ ],
1650
+ "requestBody": {
1651
+ "content": {
1652
+ "application/json": {
1653
+ "schema": {
1654
+ "$ref": "#/components/schemas/questionFillRequest"
1655
+ }
1656
+ }
1657
+ },
1658
+ "required": true
1659
+ },
1660
+ "responses": {
1661
+ "202": {
1662
+ "description": "Payload of Object",
1663
+ "content": {
1664
+ "application/json": {
1665
+ "schema": {
1666
+ "type": "object"
1667
+ }
1668
+ }
1669
+ }
1670
+ },
1671
+ "404": {
1672
+ "description": "No description"
1673
+ }
1674
+ },
1675
+ "security": [
1676
+ {
1677
+ "Implicit": [
1678
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
1679
+ ]
1680
+ },
1681
+ {
1682
+ "ApiKey": []
1683
+ }
1684
+ ]
1685
+ }
1686
+ },
1687
+ "/v1.0/tenders/{id}/documents/{docId}": {
1688
+ "patch": {
1689
+ "tags": [
1690
+ "Documents"
1691
+ ],
1692
+ "summary": "Patch tender document flags (e.g. set as competence matrix source)",
1693
+ "operationId": "PatchTenderDocument",
1694
+ "parameters": [
1695
+ {
1696
+ "name": "id",
1697
+ "in": "path",
1698
+ "required": true,
1699
+ "schema": {
1700
+ "type": "string"
1701
+ }
1702
+ },
1703
+ {
1704
+ "name": "docId",
1705
+ "in": "path",
1706
+ "required": true,
1707
+ "schema": {
1708
+ "type": "string"
1709
+ }
1710
+ }
1711
+ ],
1712
+ "requestBody": {
1713
+ "content": {
1714
+ "application/json": {
1715
+ "schema": {
1716
+ "$ref": "#/components/schemas/patchDocumentRequest"
1717
+ }
1718
+ }
1719
+ },
1720
+ "required": true
1721
+ },
1722
+ "responses": {
1723
+ "200": {
1724
+ "description": "Payload of PatchDocumentResponse",
1725
+ "content": {
1726
+ "application/json": {
1727
+ "schema": {
1728
+ "$ref": "#/components/schemas/patchDocumentResponse"
1729
+ }
1730
+ }
1731
+ }
1732
+ },
1733
+ "404": {
1734
+ "description": "No description"
1735
+ }
1736
+ },
1737
+ "security": [
1738
+ {
1739
+ "Implicit": [
1740
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
1741
+ ]
1742
+ },
1743
+ {
1744
+ "ApiKey": []
1745
+ }
1746
+ ]
1747
+ },
1748
+ "delete": {
1749
+ "tags": [
1750
+ "Documents"
1751
+ ],
1752
+ "summary": "Delete a tender document (and its blob + related answers)",
1753
+ "operationId": "DeleteTenderDocument",
1754
+ "parameters": [
1755
+ {
1756
+ "name": "id",
1757
+ "in": "path",
1758
+ "required": true,
1759
+ "schema": {
1760
+ "type": "string"
1761
+ }
1762
+ },
1763
+ {
1764
+ "name": "docId",
1765
+ "in": "path",
1766
+ "required": true,
1767
+ "schema": {
1768
+ "type": "string"
1769
+ }
1770
+ }
1771
+ ],
1772
+ "responses": {
1773
+ "204": {
1774
+ "description": "No description"
1775
+ },
1776
+ "404": {
1777
+ "description": "No description"
1778
+ }
1779
+ },
1780
+ "security": [
1781
+ {
1782
+ "Implicit": [
1783
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
1784
+ ]
1785
+ },
1786
+ {
1787
+ "ApiKey": []
1788
+ }
1789
+ ]
1790
+ }
1791
+ },
1792
+ "/v1.0/protected/health/{provider}": {
1793
+ "get": {
1794
+ "tags": [
1795
+ "Health"
1796
+ ],
1797
+ "summary": "Checks an integration's connectivity",
1798
+ "operationId": "SalesIntegrationHealth",
1799
+ "parameters": [
1800
+ {
1801
+ "name": "provider",
1802
+ "in": "path",
1803
+ "required": true,
1804
+ "schema": {
1805
+ "type": "string"
1806
+ }
1807
+ }
1808
+ ],
1809
+ "responses": {
1810
+ "200": {
1811
+ "description": "Health result",
1812
+ "content": {
1813
+ "application/json": {
1814
+ "schema": {
1815
+ "$ref": "#/components/schemas/integrationHealthResult"
1816
+ }
1817
+ }
1818
+ }
1819
+ }
1820
+ },
1821
+ "security": [
1822
+ {
1823
+ "Implicit": [
1824
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
1825
+ ]
1826
+ },
1827
+ {
1828
+ "ApiKey": []
1829
+ }
1830
+ ]
1831
+ }
1832
+ },
1833
+ "/v1.0/realtime/negotiate": {
1834
+ "post": {
1835
+ "tags": [
1836
+ "Realtime"
1837
+ ],
1838
+ "summary": "Issue a SignalR access token + URL for the sales-live hub",
1839
+ "operationId": "NegotiateSignalR",
1840
+ "requestBody": {
1841
+ "content": {
1842
+ "application/json": {
1843
+ "schema": {
1844
+ "$ref": "#/components/schemas/negotiateRequest"
1845
+ }
1846
+ }
1847
+ }
1848
+ },
1849
+ "responses": {
1850
+ "200": {
1851
+ "description": "Payload of NegotiateResponse",
1852
+ "content": {
1853
+ "application/json": {
1854
+ "schema": {
1855
+ "$ref": "#/components/schemas/negotiateResponse"
1856
+ }
1857
+ }
1858
+ }
1859
+ },
1860
+ "503": {
1861
+ "description": "SignalR is not configured on this instance; fall back to SSE"
1862
+ }
1863
+ },
1864
+ "security": [
1865
+ {
1866
+ "Implicit": [
1867
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
1868
+ ]
1869
+ },
1870
+ {
1871
+ "ApiKey": []
1872
+ }
1873
+ ]
1874
+ }
1875
+ },
1876
+ "/v1.0/stream": {
1877
+ "get": {
1878
+ "tags": [
1879
+ "Realtime"
1880
+ ],
1881
+ "summary": "Unified SSE stream: tender/job/crawl/consultant/audit events on one connection",
1882
+ "operationId": "StreamAll",
1883
+ "parameters": [
1884
+ {
1885
+ "name": "channels",
1886
+ "in": "query",
1887
+ "description": "Comma-separated namespaces to include (tender,job,crawl,consultant,audit). Default: all.",
1888
+ "schema": {
1889
+ "type": "string"
1890
+ }
1891
+ }
1892
+ ],
1893
+ "responses": {},
1894
+ "security": [
1895
+ {
1896
+ "Implicit": [
1897
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
1898
+ ]
1899
+ },
1900
+ {
1901
+ "ApiKey": []
1902
+ }
1903
+ ]
1904
+ }
1905
+ },
1906
+ "/v1.0/tenders/stream-redirect": {
1907
+ "get": {
1908
+ "tags": [
1909
+ "Realtime"
1910
+ ],
1911
+ "summary": "Deprecated: redirects to /v1.0/stream?channels=tender,job",
1912
+ "operationId": "DeprecatedTenderStream",
1913
+ "responses": {},
1914
+ "deprecated": true,
1915
+ "security": [
1916
+ {
1917
+ "Implicit": [
1918
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
1919
+ ]
1920
+ },
1921
+ {
1922
+ "ApiKey": []
1923
+ }
1924
+ ]
1925
+ }
1926
+ },
1927
+ "/v1.0/crawl/stream-redirect": {
1928
+ "get": {
1929
+ "tags": [
1930
+ "Realtime"
1931
+ ],
1932
+ "summary": "Deprecated: redirects to /v1.0/stream?channels=crawl,job",
1933
+ "operationId": "DeprecatedCrawlStream",
1934
+ "responses": {},
1935
+ "deprecated": true,
1936
+ "security": [
1937
+ {
1938
+ "Implicit": [
1939
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
1940
+ ]
1941
+ }
1942
+ ]
1943
+ }
1944
+ },
1945
+ "/v1.0/salesforce/opportunities/{sfId}/import": {
1946
+ "post": {
1947
+ "tags": [
1948
+ "Salesforce"
1949
+ ],
1950
+ "summary": "Create a Snøkam tender stub from an existing Salesforce Opportunity.",
1951
+ "operationId": "ImportSalesforceOpportunity",
1952
+ "parameters": [
1953
+ {
1954
+ "name": "sfId",
1955
+ "in": "path",
1956
+ "required": true,
1957
+ "schema": {
1958
+ "type": "string"
1959
+ },
1960
+ "x-ms-summary": "Salesforce Opportunity Id."
1961
+ }
1962
+ ],
1963
+ "responses": {
1964
+ "200": {
1965
+ "description": "Payload of TenderView",
1966
+ "content": {
1967
+ "application/json": {
1968
+ "schema": {
1969
+ "$ref": "#/components/schemas/tenderView"
1970
+ }
1971
+ }
1972
+ }
1973
+ },
1974
+ "404": {
1975
+ "description": "No description"
1976
+ },
1977
+ "409": {
1978
+ "description": "A tender is already linked to this Opportunity."
1979
+ }
1980
+ },
1981
+ "security": [
1982
+ {
1983
+ "Implicit": [
1984
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
1985
+ ]
1986
+ },
1987
+ {
1988
+ "ApiKey": []
1989
+ }
1990
+ ]
1991
+ }
1992
+ },
1993
+ "/v1.0/tenders/{id}/salesforce": {
1994
+ "post": {
1995
+ "tags": [
1996
+ "Salesforce"
1997
+ ],
1998
+ "summary": "Create a Salesforce Opportunity from a Snøkam tender and cache the link.",
1999
+ "operationId": "PromoteTenderToSalesforce",
2000
+ "parameters": [
2001
+ {
2002
+ "name": "id",
2003
+ "in": "path",
2004
+ "required": true,
2005
+ "schema": {
2006
+ "type": "string"
2007
+ }
2008
+ }
2009
+ ],
2010
+ "responses": {
2011
+ "200": {
2012
+ "description": "Payload of TenderView",
2013
+ "content": {
2014
+ "application/json": {
2015
+ "schema": {
2016
+ "$ref": "#/components/schemas/tenderView"
2017
+ }
2018
+ }
2019
+ }
2020
+ },
2021
+ "404": {
2022
+ "description": "No description"
2023
+ },
2024
+ "409": {
2025
+ "description": "Tender is already linked to a Salesforce Opportunity."
2026
+ }
2027
+ },
2028
+ "security": [
2029
+ {
2030
+ "Implicit": [
2031
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
2032
+ ]
2033
+ },
2034
+ {
2035
+ "ApiKey": []
2036
+ }
2037
+ ]
2038
+ }
2039
+ },
2040
+ "/v1.0/tenders/{id}/salesforce/refresh": {
2041
+ "post": {
2042
+ "tags": [
2043
+ "Salesforce"
2044
+ ],
2045
+ "summary": "Re-sync cached Salesforce Opportunity state (stage / closed / won) onto the engagement.",
2046
+ "operationId": "RefreshTenderSalesforceLink",
2047
+ "parameters": [
2048
+ {
2049
+ "name": "id",
2050
+ "in": "path",
2051
+ "required": true,
2052
+ "schema": {
2053
+ "type": "string"
2054
+ }
2055
+ }
2056
+ ],
2057
+ "responses": {
2058
+ "200": {
2059
+ "description": "Payload of TenderView",
2060
+ "content": {
2061
+ "application/json": {
2062
+ "schema": {
2063
+ "$ref": "#/components/schemas/tenderView"
2064
+ }
2065
+ }
2066
+ }
2067
+ },
2068
+ "404": {
2069
+ "description": "No description"
2070
+ }
2071
+ },
2072
+ "security": [
2073
+ {
2074
+ "Implicit": [
2075
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
2076
+ ]
2077
+ },
2078
+ {
2079
+ "ApiKey": []
2080
+ }
2081
+ ]
2082
+ }
2083
+ },
2084
+ "/v1.0/salesforce/opportunities": {
2085
+ "get": {
2086
+ "tags": [
2087
+ "Salesforce"
2088
+ ],
2089
+ "summary": "List Salesforce Opportunities (open by default).",
2090
+ "operationId": "ListSalesforceOpportunities",
2091
+ "parameters": [
2092
+ {
2093
+ "name": "includeClosed",
2094
+ "in": "query",
2095
+ "schema": {
2096
+ "type": "boolean"
2097
+ },
2098
+ "x-ms-summary": "Include closed opportunities (default false)."
2099
+ },
2100
+ {
2101
+ "name": "limit",
2102
+ "in": "query",
2103
+ "schema": {
2104
+ "type": "integer",
2105
+ "format": "int32"
2106
+ },
2107
+ "x-ms-summary": "Row cap, max 200 (default 100)."
2108
+ }
2109
+ ],
2110
+ "responses": {
2111
+ "200": {
2112
+ "description": "Payload of Array of SalesforceOpportunity",
2113
+ "content": {
2114
+ "application/json": {
2115
+ "schema": {
2116
+ "type": "array",
2117
+ "items": {
2118
+ "$ref": "#/components/schemas/salesforceOpportunity"
2119
+ }
2120
+ }
2121
+ }
2122
+ }
2123
+ }
2124
+ },
2125
+ "security": [
2126
+ {
2127
+ "Implicit": [
2128
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
2129
+ ]
2130
+ },
2131
+ {
2132
+ "ApiKey": []
2133
+ }
2134
+ ]
2135
+ }
2136
+ },
2137
+ "/v1.0/salesforce/opportunity-stages": {
2138
+ "get": {
2139
+ "tags": [
2140
+ "Salesforce"
2141
+ ],
2142
+ "summary": "List the SF org's Opportunity pipeline stages in configured order.",
2143
+ "operationId": "ListSalesforceOpportunityStages",
2144
+ "responses": {
2145
+ "200": {
2146
+ "description": "Payload of Array of SalesforceOpportunityStage",
2147
+ "content": {
2148
+ "application/json": {
2149
+ "schema": {
2150
+ "type": "array",
2151
+ "items": {
2152
+ "$ref": "#/components/schemas/salesforceOpportunityStage"
2153
+ }
2154
+ }
2155
+ }
2156
+ }
2157
+ }
2158
+ },
2159
+ "security": [
2160
+ {
2161
+ "Implicit": [
2162
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
2163
+ ]
2164
+ },
2165
+ {
2166
+ "ApiKey": []
2167
+ }
2168
+ ]
2169
+ }
2170
+ },
2171
+ "/v1.0/salesforce/refresh": {
2172
+ "post": {
2173
+ "tags": [
2174
+ "Salesforce"
2175
+ ],
2176
+ "summary": "Batch-refresh the cached Salesforce state on every linked engagement for the current business.",
2177
+ "operationId": "RefreshAllSalesforceLinks",
2178
+ "responses": {
2179
+ "200": {
2180
+ "description": "Payload of SalesforceRefreshResult",
2181
+ "content": {
2182
+ "application/json": {
2183
+ "schema": {
2184
+ "$ref": "#/components/schemas/salesforceRefreshResult"
2185
+ }
2186
+ }
2187
+ }
2188
+ }
2189
+ },
2190
+ "security": [
2191
+ {
2192
+ "Implicit": [
2193
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
2194
+ ]
2195
+ },
2196
+ {
2197
+ "ApiKey": []
2198
+ }
2199
+ ]
2200
+ }
2201
+ },
2202
+ "/v1.0/tenders/{id}/salesforce/stage": {
2203
+ "post": {
2204
+ "tags": [
2205
+ "Salesforce"
2206
+ ],
2207
+ "summary": "Move the linked SF Opportunity to a new stage and refresh the cache.",
2208
+ "operationId": "UpdateTenderSalesforceStage",
2209
+ "parameters": [
2210
+ {
2211
+ "name": "id",
2212
+ "in": "path",
2213
+ "required": true,
2214
+ "schema": {
2215
+ "type": "string"
2216
+ }
2217
+ }
2218
+ ],
2219
+ "requestBody": {
2220
+ "description": "The SF stage masterLabel/apiName to switch to.",
2221
+ "content": {
2222
+ "application/json": {
2223
+ "schema": {
2224
+ "$ref": "#/components/schemas/updateSalesforceStageRequest"
2225
+ }
2226
+ }
2227
+ },
2228
+ "required": true
2229
+ },
2230
+ "responses": {
2231
+ "200": {
2232
+ "description": "Payload of TenderView",
2233
+ "content": {
2234
+ "application/json": {
2235
+ "schema": {
2236
+ "$ref": "#/components/schemas/tenderView"
2237
+ }
2238
+ }
2239
+ }
2240
+ },
2241
+ "400": {
2242
+ "description": "Tender has no Salesforce link, or stageName is missing."
2243
+ },
2244
+ "404": {
2245
+ "description": "No description"
2246
+ }
2247
+ },
2248
+ "security": [
2249
+ {
2250
+ "Implicit": [
2251
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
2252
+ ]
2253
+ },
2254
+ {
2255
+ "ApiKey": []
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
+ "deleteFailedTendersResponse": {
3812
+ "type": "object",
3813
+ "properties": {
3814
+ "sourceName": {
3815
+ "type": "string"
3816
+ },
3817
+ "matched": {
3818
+ "type": "integer",
3819
+ "format": "int32"
3820
+ },
3821
+ "deleted": {
3822
+ "type": "integer",
3823
+ "format": "int32"
3824
+ }
3825
+ }
3826
+ },
3827
+ "discoverListingRequest": {
3828
+ "type": "object",
3829
+ "properties": {
3830
+ "homeUrl": {
3831
+ "type": "string"
3832
+ }
3833
+ }
3834
+ },
3835
+ "discoverListingResponse": {
3836
+ "type": "object",
3837
+ "properties": {
3838
+ "candidates": {
3839
+ "type": "array",
3840
+ "items": {
3841
+ "$ref": "#/components/schemas/listingCandidate"
3842
+ }
3843
+ }
3844
+ }
3845
+ },
3846
+ "externalSourceRef": {
3847
+ "type": "object",
3848
+ "properties": {
3849
+ "system": {
3850
+ "type": "string",
3851
+ "nullable": true
3852
+ },
3853
+ "externalId": {
3854
+ "type": "string",
3855
+ "nullable": true
3856
+ },
3857
+ "url": {
3858
+ "type": "string",
3859
+ "nullable": true
3860
+ },
3861
+ "discoveredAt": {
3862
+ "type": "string",
3863
+ "format": "date-time",
3864
+ "nullable": true
3865
+ }
3866
+ }
3867
+ },
3868
+ "extractedQuestion": {
3869
+ "type": "object",
3870
+ "properties": {
3871
+ "id": {
3872
+ "type": "string",
3873
+ "nullable": true
3874
+ },
3875
+ "text": {
3876
+ "type": "string",
3877
+ "nullable": true
3878
+ },
3879
+ "kind": {
3880
+ "type": "string",
3881
+ "nullable": true
3882
+ },
3883
+ "expectedAnswerShape": {
3884
+ "type": "string",
3885
+ "nullable": true
3886
+ },
3887
+ "section": {
3888
+ "type": "string",
3889
+ "nullable": true
3890
+ },
3891
+ "sourceExcerpt": {
3892
+ "type": "string",
3893
+ "nullable": true
3894
+ },
3895
+ "placeholder": {
3896
+ "type": "string",
3897
+ "nullable": true
3898
+ },
3899
+ "currentValue": {
3900
+ "type": "string",
3901
+ "nullable": true
3902
+ },
3903
+ "sourceStrategy": {
3904
+ "type": "string",
3905
+ "nullable": true
3906
+ },
3907
+ "suggestedDataSource": {
3908
+ "type": "string",
3909
+ "nullable": true
3910
+ },
3911
+ "location": {
3912
+ "$ref": "#/components/schemas/questionLocation"
3913
+ }
3914
+ }
3915
+ },
3916
+ "extractedQuestionSet": {
3917
+ "type": "object",
3918
+ "properties": {
3919
+ "isFillable": {
3920
+ "type": "boolean",
3921
+ "nullable": true
3922
+ },
3923
+ "questions": {
3924
+ "type": "array",
3925
+ "items": {
3926
+ "$ref": "#/components/schemas/extractedQuestion"
3927
+ },
3928
+ "nullable": true
3929
+ },
3930
+ "extractedAt": {
3931
+ "type": "string",
3932
+ "format": "date-time",
3933
+ "nullable": true
3934
+ }
3935
+ },
3936
+ "nullable": true
3937
+ },
3938
+ "funnelResponse": {
3939
+ "type": "object",
3940
+ "properties": {
3941
+ "windowDays": {
3942
+ "type": "integer",
3943
+ "format": "int32"
3944
+ },
3945
+ "countByStage": {
3946
+ "type": "object",
3947
+ "additionalProperties": {
3948
+ "type": "integer",
3949
+ "format": "int32"
3950
+ }
3951
+ },
3952
+ "conversionRates": {
3953
+ "type": "object",
3954
+ "additionalProperties": {
3955
+ "type": "number",
3956
+ "format": "double"
3957
+ }
3958
+ },
3959
+ "avgCycleDays": {
3960
+ "type": "object",
3961
+ "additionalProperties": {
3962
+ "type": "number",
3963
+ "format": "double"
3964
+ }
3965
+ },
3966
+ "wonCount": {
3967
+ "type": "integer",
3968
+ "format": "int32"
3969
+ },
3970
+ "lostCount": {
3971
+ "type": "integer",
3972
+ "format": "int32"
3973
+ },
3974
+ "winRatePct": {
3975
+ "type": "number",
3976
+ "format": "double",
3977
+ "nullable": true
3978
+ },
3979
+ "stageTransitionsInWindow": {
3980
+ "type": "object",
3981
+ "additionalProperties": {
3982
+ "type": "integer",
3983
+ "format": "int32"
3984
+ }
3985
+ }
3986
+ }
3987
+ },
3988
+ "ingestionAttachment": {
3989
+ "type": "object",
3990
+ "properties": {
3991
+ "name": {
3992
+ "type": "string",
3993
+ "nullable": true
3994
+ },
3995
+ "contentType": {
3996
+ "type": "string",
3997
+ "nullable": true
3998
+ },
3999
+ "blobPath": {
4000
+ "type": "string",
4001
+ "nullable": true
4002
+ },
4003
+ "sizeBytes": {
4004
+ "type": "integer",
4005
+ "format": "int64",
4006
+ "nullable": true
4007
+ }
4008
+ }
4009
+ },
4010
+ "ingestionRequest": {
4011
+ "type": "object",
4012
+ "properties": {
4013
+ "sourceType": {
4014
+ "type": "string",
4015
+ "nullable": true
4016
+ },
4017
+ "content": {
4018
+ "type": "string",
4019
+ "nullable": true
4020
+ },
4021
+ "title": {
4022
+ "type": "string",
4023
+ "nullable": true
4024
+ },
4025
+ "existingTenderId": {
4026
+ "type": "string",
4027
+ "nullable": true
4028
+ },
4029
+ "externalId": {
4030
+ "type": "string",
4031
+ "nullable": true
4032
+ },
4033
+ "attachments": {
4034
+ "type": "array",
4035
+ "items": {
4036
+ "$ref": "#/components/schemas/ingestionAttachment"
4037
+ },
4038
+ "nullable": true
4039
+ }
4040
+ }
4041
+ },
4042
+ "integrationHealthResult": {
4043
+ "type": "object",
4044
+ "properties": {
4045
+ "key": {
4046
+ "type": "string"
4047
+ },
4048
+ "status": {
4049
+ "type": "string"
4050
+ },
4051
+ "message": {
4052
+ "type": "string"
4053
+ }
4054
+ }
4055
+ },
4056
+ "listingCandidate": {
4057
+ "type": "object",
4058
+ "properties": {
4059
+ "url": {
4060
+ "type": "string"
4061
+ },
4062
+ "label": {
4063
+ "type": "string"
4064
+ },
4065
+ "confidence": {
4066
+ "type": "number",
4067
+ "format": "double"
4068
+ }
4069
+ }
4070
+ },
4071
+ "negotiateRequest": {
4072
+ "type": "object",
4073
+ "properties": {
4074
+ "groups": {
4075
+ "type": "array",
4076
+ "items": {
4077
+ "type": "string"
4078
+ }
4079
+ }
4080
+ }
4081
+ },
4082
+ "negotiateResponse": {
4083
+ "type": "object",
4084
+ "properties": {
4085
+ "url": {
4086
+ "type": "string"
4087
+ },
4088
+ "accessToken": {
4089
+ "type": "string"
4090
+ },
4091
+ "hubName": {
4092
+ "type": "string"
4093
+ },
4094
+ "groups": {
4095
+ "type": "array",
4096
+ "items": {
4097
+ "type": "string"
4098
+ }
4099
+ }
4100
+ }
4101
+ },
4102
+ "patchDocumentRequest": {
4103
+ "type": "object",
4104
+ "properties": {
4105
+ "isCompetenceMatrixSource": {
4106
+ "type": "boolean",
4107
+ "nullable": true
4108
+ }
4109
+ }
4110
+ },
4111
+ "patchDocumentResponse": {
4112
+ "type": "object",
4113
+ "properties": {
4114
+ "document": {
4115
+ "$ref": "#/components/schemas/tenderDocument"
4116
+ },
4117
+ "extractionJob": {
4118
+ "$ref": "#/components/schemas/agentJob"
4119
+ }
4120
+ }
4121
+ },
4122
+ "questionFillRequest": {
4123
+ "type": "object",
4124
+ "properties": {
4125
+ "consultantEmails": {
4126
+ "type": "array",
4127
+ "items": {
4128
+ "type": "string"
4129
+ },
4130
+ "nullable": true
4131
+ }
4132
+ }
4133
+ },
4134
+ "questionLocation": {
4135
+ "type": "object",
4136
+ "properties": {
4137
+ "xmlPart": {
4138
+ "type": "string",
4139
+ "nullable": true
4140
+ },
4141
+ "bodyIndex": {
4142
+ "type": "integer",
4143
+ "format": "int32",
4144
+ "nullable": true
4145
+ },
4146
+ "tableIndex": {
4147
+ "type": "integer",
4148
+ "format": "int32",
4149
+ "nullable": true
4150
+ },
4151
+ "rowIndex": {
4152
+ "type": "integer",
4153
+ "format": "int32",
4154
+ "nullable": true
4155
+ },
4156
+ "colIndex": {
4157
+ "type": "integer",
4158
+ "format": "int32",
4159
+ "nullable": true
4160
+ },
4161
+ "sdtId": {
4162
+ "type": "string",
4163
+ "nullable": true
4164
+ },
4165
+ "sheetName": {
4166
+ "type": "string",
4167
+ "nullable": true
4168
+ },
4169
+ "cellReference": {
4170
+ "type": "string",
4171
+ "nullable": true
4172
+ }
4173
+ },
4174
+ "nullable": true
4175
+ },
4176
+ "salesforceAttributes": {
4177
+ "type": "object",
4178
+ "properties": {
4179
+ "type": {
4180
+ "type": "string",
4181
+ "nullable": true
4182
+ },
4183
+ "url": {
4184
+ "type": "string",
4185
+ "nullable": true
4186
+ }
4187
+ },
4188
+ "nullable": true
4189
+ },
4190
+ "salesforceOpportunity": {
4191
+ "type": "object",
4192
+ "properties": {
4193
+ "attributes": {
4194
+ "$ref": "#/components/schemas/salesforceAttributes"
4195
+ },
4196
+ "Id": {
4197
+ "type": "string",
4198
+ "nullable": true
4199
+ },
4200
+ "Name": {
4201
+ "type": "string",
4202
+ "nullable": true
4203
+ },
4204
+ "StageName": {
4205
+ "type": "string",
4206
+ "nullable": true
4207
+ },
4208
+ "CloseDate": {
4209
+ "type": "string",
4210
+ "format": "date-time",
4211
+ "nullable": true
4212
+ },
4213
+ "IsClosed": {
4214
+ "type": "boolean",
4215
+ "nullable": true
4216
+ },
4217
+ "IsWon": {
4218
+ "type": "boolean",
4219
+ "nullable": true
4220
+ },
4221
+ "Amount": {
4222
+ "type": "number",
4223
+ "format": "double",
4224
+ "nullable": true
4225
+ },
4226
+ "Account": {
4227
+ "$ref": "#/components/schemas/salesforceReference"
4228
+ },
4229
+ "Owner": {
4230
+ "$ref": "#/components/schemas/salesforceReference"
4231
+ },
4232
+ "Snokam_Tender_Id__c": {
4233
+ "type": "string",
4234
+ "nullable": true
4235
+ }
4236
+ }
4237
+ },
4238
+ "salesforceOpportunityStage": {
4239
+ "type": "object",
4240
+ "properties": {
4241
+ "MasterLabel": {
4242
+ "type": "string",
4243
+ "nullable": true
4244
+ },
4245
+ "ApiName": {
4246
+ "type": "string",
4247
+ "nullable": true
4248
+ },
4249
+ "IsActive": {
4250
+ "type": "boolean",
4251
+ "nullable": true
4252
+ },
4253
+ "IsClosed": {
4254
+ "type": "boolean",
4255
+ "nullable": true
4256
+ },
4257
+ "IsWon": {
4258
+ "type": "boolean",
4259
+ "nullable": true
4260
+ },
4261
+ "SortOrder": {
4262
+ "type": "integer",
4263
+ "format": "int32",
4264
+ "nullable": true
4265
+ }
4266
+ }
4267
+ },
4268
+ "salesforceReference": {
4269
+ "type": "object",
4270
+ "properties": {
4271
+ "Name": {
4272
+ "type": "string",
4273
+ "nullable": true
4274
+ },
4275
+ "Id": {
4276
+ "type": "string",
4277
+ "nullable": true
4278
+ },
4279
+ "Email": {
4280
+ "type": "string",
4281
+ "nullable": true
4282
+ }
4283
+ },
4284
+ "nullable": true
4285
+ },
4286
+ "salesforceRefreshResult": {
4287
+ "type": "object",
4288
+ "properties": {
4289
+ "checked": {
4290
+ "type": "integer",
4291
+ "format": "int32"
4292
+ },
4293
+ "updated": {
4294
+ "type": "integer",
4295
+ "format": "int32"
4296
+ }
4297
+ }
4298
+ },
4299
+ "sendTenderSlackMessageRequest": {
4300
+ "type": "object",
4301
+ "properties": {
4302
+ "employeeName": {
4303
+ "type": "string",
4304
+ "nullable": true
4305
+ },
4306
+ "message": {
4307
+ "type": "string",
4308
+ "nullable": true
4309
+ }
4310
+ }
4311
+ },
4312
+ "sourceFile": {
4313
+ "type": "object",
4314
+ "properties": {
4315
+ "name": {
4316
+ "type": "string",
4317
+ "nullable": true
4318
+ },
4319
+ "url": {
4320
+ "type": "string",
4321
+ "nullable": true
4322
+ }
4323
+ }
4324
+ },
4325
+ "sourceSummary": {
4326
+ "type": "object",
4327
+ "properties": {
4328
+ "name": {
4329
+ "type": "string"
4330
+ },
4331
+ "seedUrl": {
4332
+ "type": "string"
4333
+ },
4334
+ "enabled": {
4335
+ "type": "boolean"
4336
+ },
4337
+ "hasPattern": {
4338
+ "type": "boolean"
4339
+ },
4340
+ "patternSampleCount": {
4341
+ "type": "integer",
4342
+ "format": "int32"
4343
+ },
4344
+ "patternBootstrappedAt": {
4345
+ "type": "string",
4346
+ "format": "date-time",
4347
+ "nullable": true
4348
+ }
4349
+ }
4350
+ },
4351
+ "tenderAudit": {
4352
+ "type": "object",
4353
+ "properties": {
4354
+ "createdAt": {
4355
+ "type": "string",
4356
+ "format": "date-time",
4357
+ "nullable": true
4358
+ },
4359
+ "updatedAt": {
4360
+ "type": "string",
4361
+ "format": "date-time",
4362
+ "nullable": true
4363
+ },
4364
+ "updatedBy": {
4365
+ "type": "string",
4366
+ "nullable": true
4367
+ }
4368
+ },
4369
+ "nullable": true
4370
+ },
4371
+ "tenderClassification": {
4372
+ "type": "object",
4373
+ "properties": {
4374
+ "technologies": {
4375
+ "type": "array",
4376
+ "items": {
4377
+ "type": "string"
4378
+ },
4379
+ "nullable": true
4380
+ },
4381
+ "competenceAreas": {
4382
+ "type": "array",
4383
+ "items": {
4384
+ "type": "string"
4385
+ },
4386
+ "nullable": true
4387
+ },
4388
+ "domains": {
4389
+ "type": "array",
4390
+ "items": {
4391
+ "type": "string"
4392
+ },
4393
+ "nullable": true
4394
+ },
4395
+ "languageRequirements": {
4396
+ "type": "array",
4397
+ "items": {
4398
+ "type": "string"
4399
+ },
4400
+ "nullable": true
4401
+ },
4402
+ "seniorityRequirements": {
4403
+ "type": "array",
4404
+ "items": {
4405
+ "type": "string"
4406
+ },
4407
+ "nullable": true
4408
+ },
4409
+ "securityRequirements": {
4410
+ "type": "array",
4411
+ "items": {
4412
+ "type": "string"
4413
+ },
4414
+ "nullable": true
4415
+ }
4416
+ },
4417
+ "nullable": true
4418
+ },
4419
+ "tenderCvProposal": {
4420
+ "type": "object",
4421
+ "properties": {
4422
+ "proposalId": {
4423
+ "type": "string",
4424
+ "nullable": true
4425
+ },
4426
+ "createdAt": {
4427
+ "type": "string",
4428
+ "format": "date-time",
4429
+ "nullable": true
4430
+ },
4431
+ "createdBy": {
4432
+ "type": "string",
4433
+ "nullable": true
4434
+ },
4435
+ "variants": {
4436
+ "type": "array",
4437
+ "items": {
4438
+ "$ref": "#/components/schemas/tenderCvVariant"
4439
+ },
4440
+ "nullable": true
4441
+ }
4442
+ }
4443
+ },
4444
+ "tenderCvVariant": {
4445
+ "type": "object",
4446
+ "properties": {
4447
+ "consultantEmail": {
4448
+ "type": "string",
4449
+ "nullable": true
4450
+ },
4451
+ "consultantName": {
4452
+ "type": "string",
4453
+ "nullable": true
4454
+ },
4455
+ "userId": {
4456
+ "type": "string",
4457
+ "nullable": true
4458
+ },
4459
+ "tailoredCvId": {
4460
+ "type": "string",
4461
+ "nullable": true
4462
+ },
4463
+ "attachmentId": {
4464
+ "type": "string",
4465
+ "nullable": true
4466
+ },
4467
+ "createdAt": {
4468
+ "type": "string",
4469
+ "format": "date-time",
4470
+ "nullable": true
4471
+ }
4472
+ }
4473
+ },
4474
+ "tenderDates": {
4475
+ "type": "object",
4476
+ "properties": {
4477
+ "foundAt": {
4478
+ "type": "string",
4479
+ "format": "date-time",
4480
+ "nullable": true
4481
+ },
4482
+ "publishedAt": {
4483
+ "type": "string",
4484
+ "format": "date-time",
4485
+ "nullable": true
4486
+ },
4487
+ "deadlineAt": {
4488
+ "type": "string",
4489
+ "format": "date-time",
4490
+ "nullable": true
4491
+ },
4492
+ "lastUpdatedAt": {
4493
+ "type": "string",
4494
+ "format": "date-time",
4495
+ "nullable": true
4496
+ }
4497
+ },
4498
+ "nullable": true
4499
+ },
4500
+ "tenderDocument": {
4501
+ "type": "object",
4502
+ "properties": {
4503
+ "id": {
4504
+ "type": "string",
4505
+ "nullable": true
4506
+ },
4507
+ "type": {
4508
+ "type": "string",
4509
+ "nullable": true
4510
+ },
4511
+ "title": {
4512
+ "type": "string",
4513
+ "nullable": true
4514
+ },
4515
+ "consultantId": {
4516
+ "type": "string",
4517
+ "nullable": true
4518
+ },
4519
+ "status": {
4520
+ "type": "string",
4521
+ "nullable": true
4522
+ },
4523
+ "reviewStatus": {
4524
+ "type": "string",
4525
+ "nullable": true
4526
+ },
4527
+ "sharepointUrl": {
4528
+ "type": "string",
4529
+ "nullable": true
4530
+ },
4531
+ "generatedAt": {
4532
+ "type": "string",
4533
+ "format": "date-time",
4534
+ "nullable": true
4535
+ },
4536
+ "lastReviewedAt": {
4537
+ "type": "string",
4538
+ "format": "date-time",
4539
+ "nullable": true
4540
+ },
4541
+ "blobPath": {
4542
+ "type": "string",
4543
+ "nullable": true
4544
+ },
4545
+ "blobUrl": {
4546
+ "type": "string",
4547
+ "nullable": true
4548
+ },
4549
+ "sourceUrl": {
4550
+ "type": "string",
4551
+ "nullable": true
4552
+ },
4553
+ "mimeType": {
4554
+ "type": "string",
4555
+ "nullable": true
4556
+ },
4557
+ "sizeBytes": {
4558
+ "type": "integer",
4559
+ "format": "int64",
4560
+ "nullable": true
4561
+ },
4562
+ "downloadedAt": {
4563
+ "type": "string",
4564
+ "format": "date-time",
4565
+ "nullable": true
4566
+ },
4567
+ "textContent": {
4568
+ "type": "string",
4569
+ "nullable": true
4570
+ },
4571
+ "isCompetenceMatrixSource": {
4572
+ "type": "boolean",
4573
+ "nullable": true
4574
+ },
4575
+ "classificationReasoning": {
4576
+ "type": "string",
4577
+ "nullable": true
4578
+ },
4579
+ "extractedQuestions": {
4580
+ "$ref": "#/components/schemas/extractedQuestionSet"
4581
+ },
4582
+ "questionAnswers": {
4583
+ "type": "array",
4584
+ "items": {
4585
+ "$ref": "#/components/schemas/consultantAnswers"
4586
+ },
4587
+ "nullable": true
4588
+ },
4589
+ "extractionStatus": {
4590
+ "type": "string",
4591
+ "nullable": true
4592
+ },
4593
+ "extractionError": {
4594
+ "type": "string",
4595
+ "nullable": true
4596
+ },
4597
+ "extractionStartedAt": {
4598
+ "type": "string",
4599
+ "format": "date-time",
4600
+ "nullable": true
4601
+ }
4602
+ }
4603
+ },
4604
+ "tenderInfo": {
4605
+ "type": "object",
4606
+ "properties": {
4607
+ "title": {
4608
+ "type": "string",
4609
+ "nullable": true
4610
+ },
4611
+ "customer": {
4612
+ "type": "string",
4613
+ "nullable": true
4614
+ },
4615
+ "country": {
4616
+ "type": "string",
4617
+ "nullable": true
4618
+ },
4619
+ "location": {
4620
+ "type": "string",
4621
+ "nullable": true
4622
+ },
4623
+ "workMode": {
4624
+ "type": "string",
4625
+ "nullable": true
4626
+ }
4627
+ },
4628
+ "nullable": true
4629
+ },
4630
+ "tenderParser": {
4631
+ "type": "object",
4632
+ "properties": {
4633
+ "lastRunAt": {
4634
+ "type": "string",
4635
+ "format": "date-time",
4636
+ "nullable": true
4637
+ },
4638
+ "status": {
4639
+ "type": "string",
4640
+ "nullable": true
4641
+ },
4642
+ "version": {
4643
+ "type": "string",
4644
+ "nullable": true
4645
+ },
4646
+ "confidence": {
4647
+ "type": "number",
4648
+ "format": "double",
4649
+ "nullable": true
4650
+ },
4651
+ "warnings": {
4652
+ "type": "array",
4653
+ "items": {
4654
+ "type": "string"
4655
+ },
4656
+ "nullable": true
4657
+ }
4658
+ },
4659
+ "nullable": true
4660
+ },
4661
+ "tenderSalesforce": {
4662
+ "type": "object",
4663
+ "properties": {
4664
+ "opportunityId": {
4665
+ "type": "string",
4666
+ "nullable": true
4667
+ },
4668
+ "stageName": {
4669
+ "type": "string",
4670
+ "nullable": true
4671
+ },
4672
+ "isClosed": {
4673
+ "type": "boolean",
4674
+ "nullable": true
4675
+ },
4676
+ "isWon": {
4677
+ "type": "boolean",
4678
+ "nullable": true
4679
+ },
4680
+ "url": {
4681
+ "type": "string",
4682
+ "nullable": true
4683
+ },
4684
+ "lastSyncedAt": {
4685
+ "type": "string",
4686
+ "format": "date-time",
4687
+ "nullable": true
4688
+ }
4689
+ },
4690
+ "nullable": true
4691
+ },
4692
+ "tenderSource": {
4693
+ "type": "object",
4694
+ "properties": {
4695
+ "externalTenderId": {
4696
+ "type": "string",
4697
+ "nullable": true
4698
+ },
4699
+ "sourceSystem": {
4700
+ "type": "string",
4701
+ "nullable": true
4702
+ },
4703
+ "sourceUrl": {
4704
+ "type": "string",
4705
+ "nullable": true
4706
+ },
4707
+ "sourceFiles": {
4708
+ "type": "array",
4709
+ "items": {
4710
+ "$ref": "#/components/schemas/sourceFile"
4711
+ },
4712
+ "nullable": true
4713
+ },
4714
+ "additionalSources": {
4715
+ "type": "array",
4716
+ "items": {
4717
+ "$ref": "#/components/schemas/externalSourceRef"
4718
+ },
4719
+ "nullable": true
4720
+ }
4721
+ },
4722
+ "nullable": true
4723
+ },
4724
+ "tenderStatsResponse": {
4725
+ "type": "object",
4726
+ "properties": {
4727
+ "byStatus": {
4728
+ "type": "object",
4729
+ "additionalProperties": {
4730
+ "type": "integer",
4731
+ "format": "int32"
4732
+ }
4733
+ },
4734
+ "byStage": {
4735
+ "type": "object",
4736
+ "additionalProperties": {
4737
+ "type": "integer",
4738
+ "format": "int32"
4739
+ }
4740
+ },
4741
+ "byHealth": {
4742
+ "type": "object",
4743
+ "additionalProperties": {
4744
+ "type": "integer",
4745
+ "format": "int32"
4746
+ }
4747
+ },
4748
+ "total": {
4749
+ "type": "integer",
4750
+ "format": "int32"
4751
+ },
4752
+ "windowDays": {
4753
+ "type": "integer",
4754
+ "format": "int32"
4755
+ },
4756
+ "tendersInWindow": {
4757
+ "type": "integer",
4758
+ "format": "int32"
4759
+ },
4760
+ "consultantsMatched": {
4761
+ "type": "integer",
4762
+ "format": "int32"
4763
+ },
4764
+ "avgTimeToMatchHours": {
4765
+ "type": "number",
4766
+ "format": "double",
4767
+ "nullable": true
4768
+ }
4769
+ }
4770
+ },
4771
+ "tenderStatus": {
4772
+ "type": "object",
4773
+ "properties": {
4774
+ "stage": {
4775
+ "type": "string",
4776
+ "nullable": true
4777
+ },
4778
+ "state": {
4779
+ "type": "string",
4780
+ "nullable": true
4781
+ },
4782
+ "health": {
4783
+ "type": "string",
4784
+ "nullable": true
4785
+ }
4786
+ },
4787
+ "nullable": true
4788
+ },
4789
+ "tenderTodo": {
4790
+ "type": "object",
4791
+ "properties": {
4792
+ "id": {
4793
+ "type": "string",
4794
+ "nullable": true
4795
+ },
4796
+ "title": {
4797
+ "type": "string",
4798
+ "nullable": true
4799
+ },
4800
+ "description": {
4801
+ "type": "string",
4802
+ "nullable": true
4803
+ },
4804
+ "source": {
4805
+ "type": "string",
4806
+ "nullable": true
4807
+ },
4808
+ "category": {
4809
+ "type": "string",
4810
+ "nullable": true
4811
+ },
4812
+ "priority": {
4813
+ "type": "string",
4814
+ "nullable": true
4815
+ },
4816
+ "status": {
4817
+ "type": "string",
4818
+ "nullable": true
4819
+ },
4820
+ "assignedTo": {
4821
+ "type": "string",
4822
+ "nullable": true
4823
+ },
4824
+ "dueAt": {
4825
+ "type": "string",
4826
+ "format": "date-time",
4827
+ "nullable": true
4828
+ },
4829
+ "completedAt": {
4830
+ "type": "string",
4831
+ "format": "date-time",
4832
+ "nullable": true
4833
+ }
4834
+ }
4835
+ },
4836
+ "tenderView": {
4837
+ "type": "object",
4838
+ "properties": {
4839
+ "id": {
4840
+ "type": "string",
4841
+ "nullable": true
4842
+ },
4843
+ "type": {
4844
+ "type": "string",
4845
+ "nullable": true
4846
+ },
4847
+ "slug": {
4848
+ "type": "string",
4849
+ "nullable": true
4850
+ },
4851
+ "source": {
4852
+ "$ref": "#/components/schemas/tenderSource"
4853
+ },
4854
+ "info": {
4855
+ "$ref": "#/components/schemas/tenderInfo"
4856
+ },
4857
+ "dates": {
4858
+ "$ref": "#/components/schemas/tenderDates"
4859
+ },
4860
+ "status": {
4861
+ "$ref": "#/components/schemas/tenderStatus"
4862
+ },
4863
+ "classification": {
4864
+ "$ref": "#/components/schemas/tenderClassification"
4865
+ },
4866
+ "parser": {
4867
+ "$ref": "#/components/schemas/tenderParser"
4868
+ },
4869
+ "todos": {
4870
+ "type": "array",
4871
+ "items": {
4872
+ "$ref": "#/components/schemas/tenderTodo"
4873
+ },
4874
+ "nullable": true
4875
+ },
4876
+ "documents": {
4877
+ "type": "array",
4878
+ "items": {
4879
+ "$ref": "#/components/schemas/tenderDocument"
4880
+ },
4881
+ "nullable": true
4882
+ },
4883
+ "businessIds": {
4884
+ "type": "array",
4885
+ "items": {
4886
+ "type": "string"
4887
+ },
4888
+ "nullable": true
4889
+ },
4890
+ "consultantMatches": {
4891
+ "type": "array",
4892
+ "items": {
4893
+ "$ref": "#/components/schemas/consultantMatch"
4894
+ },
4895
+ "nullable": true
4896
+ },
4897
+ "assignedConsultants": {
4898
+ "type": "array",
4899
+ "items": {
4900
+ "$ref": "#/components/schemas/assignedConsultant"
4901
+ },
4902
+ "nullable": true
4903
+ },
4904
+ "cvProposal": {
4905
+ "$ref": "#/components/schemas/tenderCvProposal"
4906
+ },
4907
+ "audit": {
4908
+ "$ref": "#/components/schemas/tenderAudit"
4909
+ },
4910
+ "description": {
4911
+ "type": "string",
4912
+ "nullable": true
4913
+ },
4914
+ "summary": {
4915
+ "type": "string",
4916
+ "nullable": true
4917
+ },
4918
+ "timeline": {
4919
+ "type": "array",
4920
+ "items": {
4921
+ "$ref": "#/components/schemas/timelineEvent"
4922
+ },
4923
+ "nullable": true
4924
+ },
4925
+ "blobContainer": {
4926
+ "type": "string",
4927
+ "nullable": true
4928
+ },
4929
+ "salesforce": {
4930
+ "$ref": "#/components/schemas/tenderSalesforce"
4931
+ }
4932
+ }
4933
+ },
4934
+ "timelineEvent": {
4935
+ "type": "object",
4936
+ "properties": {
4937
+ "id": {
4938
+ "type": "string",
4939
+ "nullable": true
4940
+ },
4941
+ "title": {
4942
+ "type": "string",
4943
+ "nullable": true
4944
+ },
4945
+ "description": {
4946
+ "type": "string",
4947
+ "nullable": true
4948
+ },
4949
+ "dueAt": {
4950
+ "type": "string",
4951
+ "format": "date-time",
4952
+ "nullable": true
4953
+ },
4954
+ "category": {
4955
+ "type": "string",
4956
+ "nullable": true
4957
+ },
4958
+ "mandatory": {
4959
+ "type": "boolean",
4960
+ "nullable": true
4961
+ },
4962
+ "status": {
4963
+ "type": "string",
4964
+ "nullable": true
4965
+ }
4966
+ }
4967
+ },
4968
+ "updateSalesforceStageRequest": {
4969
+ "type": "object",
4970
+ "properties": {
4971
+ "stageName": {
4972
+ "type": "string"
4973
+ }
4974
+ }
4975
+ },
4976
+ "zombieReapResult": {
4977
+ "type": "object",
4978
+ "properties": {
4979
+ "scanned": {
4980
+ "type": "integer",
4981
+ "format": "int32"
4982
+ },
4983
+ "reaped": {
4984
+ "type": "integer",
4985
+ "format": "int32"
4986
+ },
4987
+ "reapedJobIds": {
4988
+ "type": "array",
4989
+ "items": {
4990
+ "type": "string"
4991
+ }
4992
+ }
4993
+ }
4994
+ }
4995
+ },
4996
+ "securitySchemes": {
4997
+ "Implicit": {
4998
+ "type": "oauth2",
4999
+ "flows": {
5000
+ "implicit": {
5001
+ "authorizationUrl": "https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize",
5002
+ "tokenUrl": "https://login.microsoftonline.com/organizations/oauth2/v2.0/token",
5003
+ "refreshUrl": "https://login.microsoftonline.com/organizations/oauth2/v2.0/token",
5004
+ "scopes": {
5005
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default": "Default function scope"
5006
+ }
5007
+ }
5008
+ }
5009
+ },
5010
+ "ApiKey": {
5011
+ "type": "http",
5012
+ "scheme": "bearer",
5013
+ "bearerFormat": "JWT"
5014
+ }
5015
+ }
5016
+ }
5017
+ }