@snokam/mcp-api 0.106.1 → 0.106.2

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