@snokam/mcp-api 0.62.1 → 0.63.1

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