@snokam/mcp-api 2.61.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dist/auth.d.ts +0 -15
  2. package/dist/auth.js +17 -61
  3. package/dist/builtin-tools.d.ts +109 -0
  4. package/dist/builtin-tools.js +200 -0
  5. package/dist/execute-call.d.ts +5 -0
  6. package/dist/execute-call.js +45 -0
  7. package/dist/index.d.ts +0 -7
  8. package/dist/index.js +16 -311
  9. package/dist/openapi-loader.d.ts +1 -14
  10. package/dist/openapi-loader.js +27 -50
  11. package/dist/requirements.d.ts +10 -0
  12. package/dist/requirements.js +92 -0
  13. package/dist/state.d.ts +14 -0
  14. package/dist/state.js +66 -0
  15. package/dist/tool-schema.d.ts +2 -0
  16. package/dist/tool-schema.js +42 -0
  17. package/package.json +8 -3
  18. package/specs/production/accounting.json +2759 -2107
  19. package/specs/production/blog.json +783 -1504
  20. package/specs/production/broker.json +52 -24
  21. package/specs/production/chatgpt.json +285 -35
  22. package/specs/production/employees.json +2225 -1267
  23. package/specs/production/events.json +475 -755
  24. package/specs/production/notifications.json +329 -15
  25. package/specs/production/office.json +818 -836
  26. package/specs/production/recruitment.json +1889 -1116
  27. package/specs/production/sales.json +2392 -853
  28. package/specs/production/sanity.json +26027 -15014
  29. package/specs/production/sync.json +116 -20
  30. package/specs/production/webshop.json +37 -17
  31. package/specs/test/accounting.json +2869 -2159
  32. package/specs/test/blog.json +774 -1511
  33. package/specs/test/broker.json +54 -25
  34. package/specs/test/chatgpt.json +561 -198
  35. package/specs/test/employees.json +2490 -1479
  36. package/specs/test/events.json +481 -773
  37. package/specs/test/notifications.json +329 -15
  38. package/specs/test/office.json +818 -836
  39. package/specs/test/recruitment.json +1894 -1121
  40. package/specs/test/sales.json +2909 -1172
  41. package/specs/test/sanity.json +47384 -16348
  42. package/specs/test/sync.json +116 -20
  43. package/specs/test/webshop.json +37 -17
@@ -69,46 +69,11 @@
69
69
  "security": [
70
70
  {
71
71
  "Implicit": [
72
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
72
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
73
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
74
  },
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
75
  {
109
- "Implicit": [
110
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
111
- ]
76
+ "ApiKey": []
112
77
  }
113
78
  ]
114
79
  }
@@ -148,8 +113,11 @@
148
113
  "security": [
149
114
  {
150
115
  "Implicit": [
151
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
116
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
152
117
  ]
118
+ },
119
+ {
120
+ "ApiKey": []
153
121
  }
154
122
  ]
155
123
  }
@@ -186,21 +154,34 @@
186
154
  "security": [
187
155
  {
188
156
  "Implicit": [
189
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
157
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
190
158
  ]
159
+ },
160
+ {
161
+ "ApiKey": []
191
162
  }
192
163
  ]
193
164
  }
194
165
  },
195
- "/v1.0/scan/doffin": {
166
+ "/v1.0/tenders/ingest": {
196
167
  "post": {
197
168
  "tags": [
198
- "Scan"
169
+ "Tenders"
199
170
  ],
200
- "summary": "Trigger a Doffin scan immediately",
201
- "operationId": "TriggerDoffinScan",
171
+ "summary": "Start tender ingestion",
172
+ "operationId": "StartTenderIngestion",
173
+ "requestBody": {
174
+ "content": {
175
+ "application/json": {
176
+ "schema": {
177
+ "$ref": "#/components/schemas/ingestionRequest"
178
+ }
179
+ }
180
+ },
181
+ "required": true
182
+ },
202
183
  "responses": {
203
- "200": {
184
+ "202": {
204
185
  "description": "Payload of Object",
205
186
  "content": {
206
187
  "application/json": {
@@ -214,19 +195,32 @@
214
195
  "security": [
215
196
  {
216
197
  "Implicit": [
217
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
198
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
218
199
  ]
200
+ },
201
+ {
202
+ "ApiKey": []
219
203
  }
220
204
  ]
221
205
  }
222
206
  },
223
- "/v1.0/scan/email": {
207
+ "/v1.0/admin/reprocess-emails": {
224
208
  "post": {
225
209
  "tags": [
226
- "Scan"
210
+ "Admin"
211
+ ],
212
+ "summary": "Re-fetch all emails since N days ago and re-ingest them so raw content is stored as source_email blobs",
213
+ "operationId": "ReprocessEmails",
214
+ "parameters": [
215
+ {
216
+ "name": "daysSince",
217
+ "in": "query",
218
+ "description": "Number of days back to fetch emails (default: 90)",
219
+ "schema": {
220
+ "type": "string"
221
+ }
222
+ }
227
223
  ],
228
- "summary": "Trigger an email scan immediately",
229
- "operationId": "TriggerEmailScan",
230
224
  "responses": {
231
225
  "200": {
232
226
  "description": "Payload of Object",
@@ -242,19 +236,22 @@
242
236
  "security": [
243
237
  {
244
238
  "Implicit": [
245
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
239
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
246
240
  ]
241
+ },
242
+ {
243
+ "ApiKey": []
247
244
  }
248
245
  ]
249
246
  }
250
247
  },
251
- "/v1.0/scan/sites": {
248
+ "/v1.0/scan/doffin": {
252
249
  "post": {
253
250
  "tags": [
254
251
  "Scan"
255
252
  ],
256
- "summary": "Trigger an agentic site scan immediately over all configured sources",
257
- "operationId": "TriggerSiteScan",
253
+ "summary": "Trigger a Doffin scan immediately",
254
+ "operationId": "TriggerDoffinScan",
258
255
  "responses": {
259
256
  "200": {
260
257
  "description": "Payload of Object",
@@ -270,29 +267,53 @@
270
267
  "security": [
271
268
  {
272
269
  "Implicit": [
273
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
270
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
274
271
  ]
272
+ },
273
+ {
274
+ "ApiKey": []
275
275
  }
276
276
  ]
277
277
  }
278
278
  },
279
- "/v1.0/admin/reprocess-emails": {
279
+ "/v1.0/scan/email": {
280
280
  "post": {
281
281
  "tags": [
282
- "Admin"
282
+ "Scan"
283
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"
284
+ "summary": "Trigger an email scan immediately",
285
+ "operationId": "TriggerEmailScan",
286
+ "responses": {
287
+ "200": {
288
+ "description": "Payload of Object",
289
+ "content": {
290
+ "application/json": {
291
+ "schema": {
292
+ "type": "object"
293
+ }
294
+ }
293
295
  }
294
296
  }
297
+ },
298
+ "security": [
299
+ {
300
+ "Implicit": [
301
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
302
+ ]
303
+ },
304
+ {
305
+ "ApiKey": []
306
+ }
307
+ ]
308
+ }
309
+ },
310
+ "/v1.0/scan/sites": {
311
+ "post": {
312
+ "tags": [
313
+ "Scan"
295
314
  ],
315
+ "summary": "Trigger an agentic site scan immediately over all configured sources",
316
+ "operationId": "TriggerSiteScan",
296
317
  "responses": {
297
318
  "200": {
298
319
  "description": "Payload of Object",
@@ -304,7 +325,17 @@
304
325
  }
305
326
  }
306
327
  }
307
- }
328
+ },
329
+ "security": [
330
+ {
331
+ "Implicit": [
332
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
333
+ ]
334
+ },
335
+ {
336
+ "ApiKey": []
337
+ }
338
+ ]
308
339
  }
309
340
  },
310
341
  "/v1.0/crawl/jobs/reap-zombies": {
@@ -340,8 +371,11 @@
340
371
  "security": [
341
372
  {
342
373
  "Implicit": [
343
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
374
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
344
375
  ]
376
+ },
377
+ {
378
+ "ApiKey": []
345
379
  }
346
380
  ]
347
381
  }
@@ -390,8 +424,11 @@
390
424
  "security": [
391
425
  {
392
426
  "Implicit": [
393
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
427
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
394
428
  ]
429
+ },
430
+ {
431
+ "ApiKey": []
395
432
  }
396
433
  ]
397
434
  }
@@ -441,8 +478,11 @@
441
478
  "security": [
442
479
  {
443
480
  "Implicit": [
444
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
481
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
445
482
  ]
483
+ },
484
+ {
485
+ "ApiKey": []
446
486
  }
447
487
  ]
448
488
  }
@@ -480,8 +520,11 @@
480
520
  "security": [
481
521
  {
482
522
  "Implicit": [
483
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
523
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
484
524
  ]
525
+ },
526
+ {
527
+ "ApiKey": []
485
528
  }
486
529
  ]
487
530
  }
@@ -519,8 +562,11 @@
519
562
  "security": [
520
563
  {
521
564
  "Implicit": [
522
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
565
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
523
566
  ]
567
+ },
568
+ {
569
+ "ApiKey": []
524
570
  }
525
571
  ]
526
572
  }
@@ -547,29 +593,38 @@
547
593
  "security": [
548
594
  {
549
595
  "Implicit": [
550
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
596
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
551
597
  ]
598
+ },
599
+ {
600
+ "ApiKey": []
552
601
  }
553
602
  ]
554
603
  }
555
604
  },
556
- "/v1.0/crawl/sources": {
557
- "get": {
605
+ "/v1.0/backups": {
606
+ "post": {
558
607
  "tags": [
559
- "Crawl"
608
+ "Backups"
560
609
  ],
561
- "summary": "List configured crawl sources together with their learned patterns and last-activity timestamp",
562
- "operationId": "ListCrawlSources",
610
+ "summary": "Snapshot all Cosmos containers + (optionally) tender documents to the shared backups storage account.",
611
+ "operationId": "CreateSalesBackup",
612
+ "requestBody": {
613
+ "content": {
614
+ "application/json": {
615
+ "schema": {
616
+ "$ref": "#/components/schemas/createBackupRequest"
617
+ }
618
+ }
619
+ }
620
+ },
563
621
  "responses": {
564
622
  "200": {
565
- "description": "Payload of Array of CrawlSourceWithPattern",
623
+ "description": "Payload of BackupSummary",
566
624
  "content": {
567
625
  "application/json": {
568
626
  "schema": {
569
- "type": "array",
570
- "items": {
571
- "$ref": "#/components/schemas/crawlSourceWithPattern"
572
- }
627
+ "$ref": "#/components/schemas/backupSummary"
573
628
  }
574
629
  }
575
630
  }
@@ -578,184 +633,285 @@
578
633
  "security": [
579
634
  {
580
635
  "Implicit": [
581
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
636
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
582
637
  ]
638
+ },
639
+ {
640
+ "ApiKey": []
583
641
  }
584
642
  ]
585
643
  }
586
644
  },
587
- "/v1.0/crawl/sources/{name}": {
588
- "put": {
645
+ "/v1.0/crawl/sources/{name}/failed-tenders": {
646
+ "delete": {
589
647
  "tags": [
590
648
  "Crawl"
591
649
  ],
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
- }
650
+ "summary": "Delete all tenders for this source whose ingestion failed (parse-failed / zero confidence)",
651
+ "operationId": "DeleteFailedTenders",
652
+ "parameters": [
653
+ {
654
+ "name": "name",
655
+ "in": "path",
656
+ "required": true,
657
+ "schema": {
658
+ "type": "string"
600
659
  }
601
660
  }
602
- },
661
+ ],
603
662
  "responses": {
604
663
  "200": {
605
- "description": "Payload of CrawlSourceConfig",
664
+ "description": "Payload of DeleteFailedTendersResponse",
606
665
  "content": {
607
666
  "application/json": {
608
667
  "schema": {
609
- "$ref": "#/components/schemas/crawlSourceConfig"
668
+ "$ref": "#/components/schemas/deleteFailedTendersResponse"
610
669
  }
611
670
  }
612
671
  }
613
- },
614
- "400": {
615
- "description": "No description"
616
672
  }
617
673
  },
618
674
  "security": [
619
675
  {
620
676
  "Implicit": [
621
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
677
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
622
678
  ]
679
+ },
680
+ {
681
+ "ApiKey": []
623
682
  }
624
683
  ]
625
- },
626
- "delete": {
684
+ }
685
+ },
686
+ "/v1.0/crawl/jobs/{jobId}/retry": {
687
+ "post": {
627
688
  "tags": [
628
689
  "Crawl"
629
690
  ],
630
- "summary": "Delete a crawl source and its cached pattern",
631
- "operationId": "DeleteCrawlSource",
691
+ "summary": "Delete the tender (if any) and enqueue a fresh ingestion for the same URL/title/externalId",
692
+ "operationId": "RetryCrawlJob",
693
+ "parameters": [
694
+ {
695
+ "name": "jobId",
696
+ "in": "path",
697
+ "required": true,
698
+ "schema": {
699
+ "type": "string"
700
+ }
701
+ }
702
+ ],
632
703
  "responses": {
633
- "204": {
704
+ "200": {
705
+ "description": "Payload of AgentJob",
706
+ "content": {
707
+ "application/json": {
708
+ "schema": {
709
+ "$ref": "#/components/schemas/agentJob"
710
+ }
711
+ }
712
+ }
713
+ },
714
+ "400": {
715
+ "description": "No description"
716
+ },
717
+ "404": {
634
718
  "description": "No description"
635
719
  }
636
720
  },
637
721
  "security": [
638
722
  {
639
723
  "Implicit": [
640
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
724
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
641
725
  ]
726
+ },
727
+ {
728
+ "ApiKey": []
642
729
  }
643
730
  ]
644
731
  }
645
732
  },
646
- "/v1.0/crawl/sources/{name}/pattern": {
647
- "delete": {
733
+ "/v1.0/crawl/jobs/{jobId}/cancel": {
734
+ "post": {
648
735
  "tags": [
649
736
  "Crawl"
650
737
  ],
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": [
738
+ "summary": "Terminate the running orchestration and mark the job as failed (\"Cancelled by operator\")",
739
+ "operationId": "CancelCrawlJob",
740
+ "parameters": [
741
+ {
742
+ "name": "jobId",
743
+ "in": "path",
744
+ "required": true,
745
+ "schema": {
746
+ "type": "string"
747
+ }
748
+ }
749
+ ],
750
+ "responses": {
751
+ "200": {
752
+ "description": "Payload of AgentJob",
753
+ "content": {
754
+ "application/json": {
755
+ "schema": {
756
+ "$ref": "#/components/schemas/agentJob"
757
+ }
758
+ }
759
+ }
760
+ },
761
+ "404": {
762
+ "description": "No description"
763
+ },
764
+ "409": {
765
+ "description": "No description"
766
+ }
767
+ },
768
+ "security": [
659
769
  {
660
770
  "Implicit": [
661
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
771
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
662
772
  ]
773
+ },
774
+ {
775
+ "ApiKey": []
663
776
  }
664
777
  ]
665
778
  }
666
779
  },
667
- "/v1.0/crawl/discover-listing": {
780
+ "/v1.0/crawl/jobs/bulk-delete": {
668
781
  "post": {
669
782
  "tags": [
670
783
  "Crawl"
671
784
  ],
672
- "summary": "Given a site homepage or bare domain, locate the tender/project listing page on it",
673
- "operationId": "DiscoverCrawlListing",
785
+ "summary": "Delete a batch of jobs and their backing tenders",
786
+ "operationId": "BulkDeleteCrawlJobs",
674
787
  "requestBody": {
675
788
  "content": {
676
789
  "application/json": {
677
790
  "schema": {
678
- "$ref": "#/components/schemas/discoverListingRequest"
791
+ "$ref": "#/components/schemas/bulkDeleteJobsRequest"
679
792
  }
680
793
  }
681
794
  }
682
795
  },
683
796
  "responses": {
684
797
  "200": {
685
- "description": "Payload of DiscoverListingResponse",
798
+ "description": "Payload of BulkDeleteJobsResponse",
686
799
  "content": {
687
800
  "application/json": {
688
801
  "schema": {
689
- "$ref": "#/components/schemas/discoverListingResponse"
802
+ "$ref": "#/components/schemas/bulkDeleteJobsResponse"
690
803
  }
691
804
  }
692
805
  }
806
+ },
807
+ "400": {
808
+ "description": "No description"
693
809
  }
694
810
  },
695
811
  "security": [
696
812
  {
697
813
  "Implicit": [
698
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
814
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
699
815
  ]
816
+ },
817
+ {
818
+ "ApiKey": []
700
819
  }
701
820
  ]
702
821
  }
703
822
  },
704
- "/v1.0/crawl/sources/{name}/scan": {
705
- "post": {
823
+ "/v1.0/crawl/sources/{name}/jobs": {
824
+ "get": {
706
825
  "tags": [
707
826
  "Crawl"
708
827
  ],
709
- "summary": "Scan one source now and enqueue ingestion jobs for newly discovered notices",
710
- "operationId": "ScanCrawlSource",
828
+ "summary": "Recent ingestion jobs for this source, newest first",
829
+ "operationId": "ListCrawlJobs",
830
+ "parameters": [
831
+ {
832
+ "name": "name",
833
+ "in": "path",
834
+ "required": true,
835
+ "schema": {
836
+ "type": "string"
837
+ }
838
+ },
839
+ {
840
+ "name": "limit",
841
+ "in": "query",
842
+ "description": "Max jobs to return (default 50)",
843
+ "schema": {
844
+ "type": "string"
845
+ }
846
+ }
847
+ ],
711
848
  "responses": {
712
849
  "200": {
713
- "description": "Payload of CrawlScanResponse",
850
+ "description": "Payload of Array of AgentJob",
714
851
  "content": {
715
852
  "application/json": {
716
853
  "schema": {
717
- "$ref": "#/components/schemas/crawlScanResponse"
854
+ "type": "array",
855
+ "items": {
856
+ "$ref": "#/components/schemas/agentJob"
857
+ }
718
858
  }
719
859
  }
720
860
  }
721
- },
722
- "404": {
723
- "description": "No description"
724
861
  }
725
862
  },
726
863
  "security": [
727
864
  {
728
865
  "Implicit": [
729
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
866
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
730
867
  ]
868
+ },
869
+ {
870
+ "ApiKey": []
731
871
  }
732
872
  ]
733
873
  }
734
874
  },
735
- "/v1.0/crawl/sources/{name}/failed-tenders": {
736
- "delete": {
875
+ "/v1.0/crawl/sources/{name}/scan": {
876
+ "post": {
737
877
  "tags": [
738
878
  "Crawl"
739
879
  ],
740
- "summary": "Delete all tenders for this source whose ingestion failed (parse-failed / zero confidence)",
741
- "operationId": "DeleteFailedTenders",
880
+ "summary": "Scan one source now and enqueue ingestion jobs for newly discovered notices",
881
+ "operationId": "ScanCrawlSource",
882
+ "parameters": [
883
+ {
884
+ "name": "name",
885
+ "in": "path",
886
+ "required": true,
887
+ "schema": {
888
+ "type": "string"
889
+ }
890
+ }
891
+ ],
742
892
  "responses": {
743
893
  "200": {
744
- "description": "Payload of DeleteFailedTendersResponse",
894
+ "description": "Payload of CrawlScanResponse",
745
895
  "content": {
746
896
  "application/json": {
747
897
  "schema": {
748
- "$ref": "#/components/schemas/deleteFailedTendersResponse"
898
+ "$ref": "#/components/schemas/crawlScanResponse"
749
899
  }
750
900
  }
751
901
  }
902
+ },
903
+ "404": {
904
+ "description": "No description"
752
905
  }
753
906
  },
754
907
  "security": [
755
908
  {
756
909
  "Implicit": [
757
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
910
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
758
911
  ]
912
+ },
913
+ {
914
+ "ApiKey": []
759
915
  }
760
916
  ]
761
917
  }
@@ -782,8 +938,11 @@
782
938
  "security": [
783
939
  {
784
940
  "Implicit": [
785
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
941
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
786
942
  ]
943
+ },
944
+ {
945
+ "ApiKey": []
787
946
  }
788
947
  ]
789
948
  }
@@ -799,8 +958,11 @@
799
958
  "security": [
800
959
  {
801
960
  "Implicit": [
802
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
961
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
803
962
  ]
963
+ },
964
+ {
965
+ "ApiKey": []
804
966
  }
805
967
  ]
806
968
  }
@@ -885,103 +1047,82 @@
885
1047
  "security": [
886
1048
  {
887
1049
  "Implicit": [
888
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
1050
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
889
1051
  ]
1052
+ },
1053
+ {
1054
+ "ApiKey": []
890
1055
  }
891
1056
  ]
892
1057
  }
893
1058
  },
894
- "/v1.0/crawl/jobs/{jobId}/retry": {
895
- "post": {
1059
+ "/v1.0/crawl/sources": {
1060
+ "get": {
896
1061
  "tags": [
897
1062
  "Crawl"
898
1063
  ],
899
- "summary": "Delete the tender (if any) and enqueue a fresh ingestion for the same URL/title/externalId",
900
- "operationId": "RetryCrawlJob",
1064
+ "summary": "List configured crawl sources together with their learned patterns and last-activity timestamp",
1065
+ "operationId": "ListCrawlSources",
901
1066
  "responses": {
902
1067
  "200": {
903
- "description": "Payload of AgentJob",
1068
+ "description": "Payload of Array of CrawlSourceWithPattern",
904
1069
  "content": {
905
1070
  "application/json": {
906
1071
  "schema": {
907
- "$ref": "#/components/schemas/agentJob"
1072
+ "type": "array",
1073
+ "items": {
1074
+ "$ref": "#/components/schemas/crawlSourceWithPattern"
1075
+ }
908
1076
  }
909
1077
  }
910
1078
  }
911
- },
912
- "400": {
913
- "description": "No description"
914
- },
915
- "404": {
916
- "description": "No description"
917
1079
  }
918
1080
  },
919
1081
  "security": [
920
1082
  {
921
1083
  "Implicit": [
922
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
1084
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
923
1085
  ]
1086
+ },
1087
+ {
1088
+ "ApiKey": []
924
1089
  }
925
1090
  ]
926
1091
  }
927
1092
  },
928
- "/v1.0/crawl/jobs/{jobId}/cancel": {
929
- "post": {
1093
+ "/v1.0/crawl/sources/{name}": {
1094
+ "put": {
930
1095
  "tags": [
931
1096
  "Crawl"
932
1097
  ],
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": [
1098
+ "summary": "Create or update a crawl source",
1099
+ "operationId": "UpsertCrawlSource",
1100
+ "parameters": [
954
1101
  {
955
- "Implicit": [
956
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
957
- ]
1102
+ "name": "name",
1103
+ "in": "path",
1104
+ "required": true,
1105
+ "schema": {
1106
+ "type": "string"
1107
+ }
958
1108
  }
959
- ]
960
- }
961
- },
962
- "/v1.0/crawl/jobs/bulk-delete": {
963
- "post": {
964
- "tags": [
965
- "Crawl"
966
1109
  ],
967
- "summary": "Delete a batch of jobs and their backing tenders",
968
- "operationId": "BulkDeleteCrawlJobs",
969
1110
  "requestBody": {
970
1111
  "content": {
971
1112
  "application/json": {
972
1113
  "schema": {
973
- "$ref": "#/components/schemas/bulkDeleteJobsRequest"
1114
+ "$ref": "#/components/schemas/crawlSourceUpsertRequest"
974
1115
  }
975
1116
  }
976
1117
  }
977
1118
  },
978
1119
  "responses": {
979
1120
  "200": {
980
- "description": "Payload of BulkDeleteJobsResponse",
1121
+ "description": "Payload of CrawlSourceConfig",
981
1122
  "content": {
982
1123
  "application/json": {
983
1124
  "schema": {
984
- "$ref": "#/components/schemas/bulkDeleteJobsResponse"
1125
+ "$ref": "#/components/schemas/crawlSourceConfig"
985
1126
  }
986
1127
  }
987
1128
  }
@@ -993,136 +1134,128 @@
993
1134
  "security": [
994
1135
  {
995
1136
  "Implicit": [
996
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
1137
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
997
1138
  ]
1139
+ },
1140
+ {
1141
+ "ApiKey": []
998
1142
  }
999
1143
  ]
1000
- }
1001
- },
1002
- "/v1.0/crawl/sources/{name}/jobs": {
1003
- "get": {
1144
+ },
1145
+ "delete": {
1004
1146
  "tags": [
1005
1147
  "Crawl"
1006
1148
  ],
1007
- "summary": "Recent ingestion jobs for this source, newest first",
1008
- "operationId": "ListCrawlJobs",
1149
+ "summary": "Delete a crawl source and its cached pattern",
1150
+ "operationId": "DeleteCrawlSource",
1009
1151
  "parameters": [
1010
1152
  {
1011
- "name": "limit",
1012
- "in": "query",
1013
- "description": "Max jobs to return (default 50)",
1153
+ "name": "name",
1154
+ "in": "path",
1155
+ "required": true,
1014
1156
  "schema": {
1015
1157
  "type": "string"
1016
1158
  }
1017
1159
  }
1018
1160
  ],
1019
1161
  "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
- }
1162
+ "204": {
1163
+ "description": "No description"
1032
1164
  }
1033
1165
  },
1034
1166
  "security": [
1035
1167
  {
1036
1168
  "Implicit": [
1037
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
1169
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
1038
1170
  ]
1171
+ },
1172
+ {
1173
+ "ApiKey": []
1039
1174
  }
1040
1175
  ]
1041
1176
  }
1042
1177
  },
1043
- "/v1.0/crawl/sources/{name}/preview": {
1044
- "post": {
1178
+ "/v1.0/crawl/sources/{name}/pattern": {
1179
+ "delete": {
1045
1180
  "tags": [
1046
1181
  "Crawl"
1047
1182
  ],
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
- }
1183
+ "summary": "Drop the cached URL pattern for a source so the next scan re-bootstraps it",
1184
+ "operationId": "InvalidateCrawlPattern",
1185
+ "parameters": [
1186
+ {
1187
+ "name": "name",
1188
+ "in": "path",
1189
+ "required": true,
1190
+ "schema": {
1191
+ "type": "string"
1059
1192
  }
1060
- },
1061
- "404": {
1193
+ }
1194
+ ],
1195
+ "responses": {
1196
+ "204": {
1062
1197
  "description": "No description"
1063
1198
  }
1064
1199
  },
1065
1200
  "security": [
1066
1201
  {
1067
1202
  "Implicit": [
1068
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
1203
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
1069
1204
  ]
1205
+ },
1206
+ {
1207
+ "ApiKey": []
1070
1208
  }
1071
1209
  ]
1072
1210
  }
1073
1211
  },
1074
- "/v1.0/tenders/{id}/documents": {
1075
- "get": {
1076
- "tags": [
1077
- "Documents"
1212
+ "/v1.0/crawl/discover-listing": {
1213
+ "post": {
1214
+ "tags": [
1215
+ "Crawl"
1078
1216
  ],
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"
1217
+ "summary": "Given a site homepage or bare domain, locate the tender/project listing page on it",
1218
+ "operationId": "DiscoverCrawlListing",
1219
+ "requestBody": {
1220
+ "content": {
1221
+ "application/json": {
1222
+ "schema": {
1223
+ "$ref": "#/components/schemas/discoverListingRequest"
1224
+ }
1088
1225
  }
1089
1226
  }
1090
- ],
1227
+ },
1091
1228
  "responses": {
1092
1229
  "200": {
1093
- "description": "Payload of Array of TenderDocument",
1230
+ "description": "Payload of DiscoverListingResponse",
1094
1231
  "content": {
1095
1232
  "application/json": {
1096
1233
  "schema": {
1097
- "type": "array",
1098
- "items": {
1099
- "$ref": "#/components/schemas/tenderDocument"
1100
- }
1234
+ "$ref": "#/components/schemas/discoverListingResponse"
1101
1235
  }
1102
1236
  }
1103
1237
  }
1104
- },
1105
- "404": {
1106
- "description": "No description"
1107
1238
  }
1108
1239
  },
1109
1240
  "security": [
1110
1241
  {
1111
1242
  "Implicit": [
1112
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
1243
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
1113
1244
  ]
1114
1245
  }
1115
1246
  ]
1116
- },
1247
+ }
1248
+ },
1249
+ "/v1.0/crawl/sources/{name}/preview": {
1117
1250
  "post": {
1118
1251
  "tags": [
1119
- "Documents"
1252
+ "Crawl"
1120
1253
  ],
1121
- "summary": "Upload a new document to a tender",
1122
- "operationId": "UploadTenderDocument",
1254
+ "summary": "Run a one-off discovery crawl for a single source and return the notices it would enqueue (no ingestion)",
1255
+ "operationId": "PreviewCrawlSource",
1123
1256
  "parameters": [
1124
1257
  {
1125
- "name": "id",
1258
+ "name": "name",
1126
1259
  "in": "path",
1127
1260
  "required": true,
1128
1261
  "schema": {
@@ -1132,11 +1265,11 @@
1132
1265
  ],
1133
1266
  "responses": {
1134
1267
  "200": {
1135
- "description": "Payload of TenderDocument",
1268
+ "description": "Payload of CrawlPreviewResponse",
1136
1269
  "content": {
1137
1270
  "application/json": {
1138
1271
  "schema": {
1139
- "$ref": "#/components/schemas/tenderDocument"
1272
+ "$ref": "#/components/schemas/crawlPreviewResponse"
1140
1273
  }
1141
1274
  }
1142
1275
  }
@@ -1148,68 +1281,70 @@
1148
1281
  "security": [
1149
1282
  {
1150
1283
  "Implicit": [
1151
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
1284
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
1152
1285
  ]
1286
+ },
1287
+ {
1288
+ "ApiKey": []
1153
1289
  }
1154
1290
  ]
1155
1291
  }
1156
1292
  },
1157
- "/v1.0/tenders/{id}/documents/{docId}/download-url": {
1158
- "get": {
1293
+ "/v1.0/salesforce/opportunities/{sfId}/import": {
1294
+ "post": {
1159
1295
  "tags": [
1160
- "Documents"
1296
+ "Salesforce"
1161
1297
  ],
1162
- "summary": "Get a short-lived download URL for a document",
1163
- "operationId": "GetDocumentDownloadUrl",
1298
+ "summary": "Create a Snøkam tender stub from an existing Salesforce Opportunity.",
1299
+ "operationId": "ImportSalesforceOpportunity",
1164
1300
  "parameters": [
1165
1301
  {
1166
- "name": "id",
1167
- "in": "path",
1168
- "required": true,
1169
- "schema": {
1170
- "type": "string"
1171
- }
1172
- },
1173
- {
1174
- "name": "docId",
1302
+ "name": "sfId",
1175
1303
  "in": "path",
1176
1304
  "required": true,
1177
1305
  "schema": {
1178
1306
  "type": "string"
1179
- }
1307
+ },
1308
+ "x-ms-summary": "Salesforce Opportunity Id."
1180
1309
  }
1181
1310
  ],
1182
1311
  "responses": {
1183
1312
  "200": {
1184
- "description": "Payload of Object",
1313
+ "description": "Payload of TenderView",
1185
1314
  "content": {
1186
1315
  "application/json": {
1187
1316
  "schema": {
1188
- "type": "object"
1317
+ "$ref": "#/components/schemas/tenderView"
1189
1318
  }
1190
1319
  }
1191
1320
  }
1192
1321
  },
1193
1322
  "404": {
1194
1323
  "description": "No description"
1324
+ },
1325
+ "409": {
1326
+ "description": "A tender is already linked to this Opportunity."
1195
1327
  }
1196
1328
  },
1197
1329
  "security": [
1198
1330
  {
1199
1331
  "Implicit": [
1200
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
1332
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
1201
1333
  ]
1334
+ },
1335
+ {
1336
+ "ApiKey": []
1202
1337
  }
1203
1338
  ]
1204
1339
  }
1205
1340
  },
1206
- "/v1.0/tenders/{id}/documents/{docId}/download": {
1207
- "get": {
1341
+ "/v1.0/tenders/{id}/salesforce": {
1342
+ "post": {
1208
1343
  "tags": [
1209
- "Documents"
1344
+ "Salesforce"
1210
1345
  ],
1211
- "summary": "Download a single document",
1212
- "operationId": "DownloadDocument",
1346
+ "summary": "Create a Salesforce Opportunity from a Snøkam tender and cache the link.",
1347
+ "operationId": "PromoteTenderToSalesforce",
1213
1348
  "parameters": [
1214
1349
  {
1215
1350
  "name": "id",
@@ -1218,48 +1353,45 @@
1218
1353
  "schema": {
1219
1354
  "type": "string"
1220
1355
  }
1221
- },
1222
- {
1223
- "name": "docId",
1224
- "in": "path",
1225
- "required": true,
1226
- "schema": {
1227
- "type": "string"
1228
- }
1229
1356
  }
1230
1357
  ],
1231
1358
  "responses": {
1232
1359
  "200": {
1233
- "description": "Payload of Array of Byte",
1360
+ "description": "Payload of TenderView",
1234
1361
  "content": {
1235
- "application/octet-stream": {
1362
+ "application/json": {
1236
1363
  "schema": {
1237
- "type": "string",
1238
- "format": "binary"
1364
+ "$ref": "#/components/schemas/tenderView"
1239
1365
  }
1240
1366
  }
1241
1367
  }
1242
1368
  },
1243
1369
  "404": {
1244
1370
  "description": "No description"
1371
+ },
1372
+ "409": {
1373
+ "description": "Tender is already linked to a Salesforce Opportunity."
1245
1374
  }
1246
1375
  },
1247
1376
  "security": [
1248
1377
  {
1249
1378
  "Implicit": [
1250
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
1379
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
1251
1380
  ]
1381
+ },
1382
+ {
1383
+ "ApiKey": []
1252
1384
  }
1253
1385
  ]
1254
1386
  }
1255
1387
  },
1256
- "/v1.0/tenders/{id}/documents/download-all": {
1257
- "get": {
1388
+ "/v1.0/tenders/{id}/salesforce/refresh": {
1389
+ "post": {
1258
1390
  "tags": [
1259
- "Documents"
1391
+ "Salesforce"
1260
1392
  ],
1261
- "summary": "Download all tender documents as a ZIP archive",
1262
- "operationId": "DownloadAllDocuments",
1393
+ "summary": "Re-sync cached Salesforce Opportunity state (stage / closed / won) onto the engagement.",
1394
+ "operationId": "RefreshTenderSalesforceLink",
1263
1395
  "parameters": [
1264
1396
  {
1265
1397
  "name": "id",
@@ -1272,12 +1404,11 @@
1272
1404
  ],
1273
1405
  "responses": {
1274
1406
  "200": {
1275
- "description": "Payload of Array of Byte",
1407
+ "description": "Payload of TenderView",
1276
1408
  "content": {
1277
- "application/zip": {
1409
+ "application/json": {
1278
1410
  "schema": {
1279
- "type": "string",
1280
- "format": "binary"
1411
+ "$ref": "#/components/schemas/tenderView"
1281
1412
  }
1282
1413
  }
1283
1414
  }
@@ -1289,118 +1420,140 @@
1289
1420
  "security": [
1290
1421
  {
1291
1422
  "Implicit": [
1292
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
1423
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
1293
1424
  ]
1425
+ },
1426
+ {
1427
+ "ApiKey": []
1294
1428
  }
1295
1429
  ]
1296
1430
  }
1297
1431
  },
1298
- "/v1.0/tenders/{id}/documents/{docId}": {
1299
- "patch": {
1432
+ "/v1.0/salesforce/opportunities": {
1433
+ "get": {
1300
1434
  "tags": [
1301
- "Documents"
1435
+ "Salesforce"
1302
1436
  ],
1303
- "summary": "Patch tender document flags (e.g. set as competence matrix source)",
1304
- "operationId": "PatchTenderDocument",
1437
+ "summary": "List Salesforce Opportunities (open by default).",
1438
+ "operationId": "ListSalesforceOpportunities",
1305
1439
  "parameters": [
1306
1440
  {
1307
- "name": "id",
1308
- "in": "path",
1309
- "required": true,
1441
+ "name": "includeClosed",
1442
+ "in": "query",
1310
1443
  "schema": {
1311
- "type": "string"
1312
- }
1444
+ "type": "boolean"
1445
+ },
1446
+ "x-ms-summary": "Include closed opportunities (default false)."
1313
1447
  },
1314
1448
  {
1315
- "name": "docId",
1316
- "in": "path",
1317
- "required": true,
1449
+ "name": "limit",
1450
+ "in": "query",
1318
1451
  "schema": {
1319
- "type": "string"
1320
- }
1452
+ "type": "integer",
1453
+ "format": "int32"
1454
+ },
1455
+ "x-ms-summary": "Row cap, max 200 (default 100)."
1321
1456
  }
1322
1457
  ],
1323
- "requestBody": {
1324
- "content": {
1325
- "application/json": {
1326
- "schema": {
1327
- "$ref": "#/components/schemas/patchDocumentRequest"
1328
- }
1329
- }
1330
- },
1331
- "required": true
1332
- },
1333
1458
  "responses": {
1334
1459
  "200": {
1335
- "description": "Payload of PatchDocumentResponse",
1460
+ "description": "Payload of Array of CrmOpportunity",
1336
1461
  "content": {
1337
1462
  "application/json": {
1338
1463
  "schema": {
1339
- "$ref": "#/components/schemas/patchDocumentResponse"
1464
+ "type": "array",
1465
+ "items": {
1466
+ "$ref": "#/components/schemas/crmOpportunity"
1467
+ }
1340
1468
  }
1341
1469
  }
1342
1470
  }
1343
- },
1344
- "404": {
1345
- "description": "No description"
1346
1471
  }
1347
1472
  },
1348
1473
  "security": [
1349
1474
  {
1350
1475
  "Implicit": [
1351
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
1476
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
1352
1477
  ]
1478
+ },
1479
+ {
1480
+ "ApiKey": []
1353
1481
  }
1354
1482
  ]
1355
- },
1356
- "delete": {
1483
+ }
1484
+ },
1485
+ "/v1.0/salesforce/opportunity-stages": {
1486
+ "get": {
1357
1487
  "tags": [
1358
- "Documents"
1488
+ "Salesforce"
1359
1489
  ],
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"
1490
+ "summary": "List the SF org's Opportunity pipeline stages in configured order.",
1491
+ "operationId": "ListSalesforceOpportunityStages",
1492
+ "responses": {
1493
+ "200": {
1494
+ "description": "Payload of Array of CrmStage",
1495
+ "content": {
1496
+ "application/json": {
1497
+ "schema": {
1498
+ "type": "array",
1499
+ "items": {
1500
+ "$ref": "#/components/schemas/crmStage"
1501
+ }
1502
+ }
1503
+ }
1369
1504
  }
1505
+ }
1506
+ },
1507
+ "security": [
1508
+ {
1509
+ "Implicit": [
1510
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
1511
+ ]
1370
1512
  },
1371
1513
  {
1372
- "name": "docId",
1373
- "in": "path",
1374
- "required": true,
1375
- "schema": {
1376
- "type": "string"
1377
- }
1514
+ "ApiKey": []
1378
1515
  }
1516
+ ]
1517
+ }
1518
+ },
1519
+ "/v1.0/salesforce/refresh": {
1520
+ "post": {
1521
+ "tags": [
1522
+ "Salesforce"
1379
1523
  ],
1524
+ "summary": "Batch-refresh the cached Salesforce state on every linked engagement for the current business.",
1525
+ "operationId": "RefreshAllSalesforceLinks",
1380
1526
  "responses": {
1381
- "204": {
1382
- "description": "No description"
1383
- },
1384
- "404": {
1385
- "description": "No description"
1527
+ "200": {
1528
+ "description": "Payload of CrmRefreshResult",
1529
+ "content": {
1530
+ "application/json": {
1531
+ "schema": {
1532
+ "$ref": "#/components/schemas/crmRefreshResult"
1533
+ }
1534
+ }
1535
+ }
1386
1536
  }
1387
1537
  },
1388
1538
  "security": [
1389
1539
  {
1390
1540
  "Implicit": [
1391
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
1541
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
1392
1542
  ]
1543
+ },
1544
+ {
1545
+ "ApiKey": []
1393
1546
  }
1394
1547
  ]
1395
1548
  }
1396
1549
  },
1397
- "/v1.0/tenders/{id}/documents/{docId}/extract-questions": {
1550
+ "/v1.0/tenders/{id}/salesforce/stage": {
1398
1551
  "post": {
1399
1552
  "tags": [
1400
- "Documents"
1553
+ "Salesforce"
1401
1554
  ],
1402
- "summary": "Start extraction of fillable questions from a document",
1403
- "operationId": "StartQuestionExtraction",
1555
+ "summary": "Move the linked SF Opportunity to a new stage and refresh the cache.",
1556
+ "operationId": "UpdateTenderSalesforceStage",
1404
1557
  "parameters": [
1405
1558
  {
1406
1559
  "name": "id",
@@ -1409,17 +1562,611 @@
1409
1562
  "schema": {
1410
1563
  "type": "string"
1411
1564
  }
1412
- },
1413
- {
1414
- "name": "docId",
1415
- "in": "path",
1416
- "required": true,
1417
- "schema": {
1418
- "type": "string"
1419
- }
1420
1565
  }
1421
1566
  ],
1422
- "responses": {
1567
+ "requestBody": {
1568
+ "description": "The SF stage masterLabel/apiName to switch to.",
1569
+ "content": {
1570
+ "application/json": {
1571
+ "schema": {
1572
+ "$ref": "#/components/schemas/updateSalesforceStageRequest"
1573
+ }
1574
+ }
1575
+ },
1576
+ "required": true
1577
+ },
1578
+ "responses": {
1579
+ "200": {
1580
+ "description": "Payload of TenderView",
1581
+ "content": {
1582
+ "application/json": {
1583
+ "schema": {
1584
+ "$ref": "#/components/schemas/tenderView"
1585
+ }
1586
+ }
1587
+ }
1588
+ },
1589
+ "400": {
1590
+ "description": "Tender has no Salesforce link, or stageName is missing."
1591
+ },
1592
+ "404": {
1593
+ "description": "No description"
1594
+ }
1595
+ },
1596
+ "security": [
1597
+ {
1598
+ "Implicit": [
1599
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
1600
+ ]
1601
+ },
1602
+ {
1603
+ "ApiKey": []
1604
+ }
1605
+ ]
1606
+ }
1607
+ },
1608
+ "/v1.0/cv-variants/me": {
1609
+ "get": {
1610
+ "tags": [
1611
+ "CvVariants"
1612
+ ],
1613
+ "summary": "Get the authenticated consultant's persistent AI CV variant, if one exists.",
1614
+ "operationId": "GetMyCvVariant",
1615
+ "responses": {
1616
+ "200": {
1617
+ "description": "Payload of ConsultantCvVariantView",
1618
+ "content": {
1619
+ "application/json": {
1620
+ "schema": {
1621
+ "$ref": "#/components/schemas/consultantCvVariantView"
1622
+ }
1623
+ }
1624
+ }
1625
+ },
1626
+ "404": {
1627
+ "description": "No description"
1628
+ }
1629
+ },
1630
+ "security": [
1631
+ {
1632
+ "Implicit": [
1633
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
1634
+ ]
1635
+ },
1636
+ {
1637
+ "ApiKey": []
1638
+ }
1639
+ ]
1640
+ },
1641
+ "post": {
1642
+ "tags": [
1643
+ "CvVariants"
1644
+ ],
1645
+ "summary": "Get or create the authenticated consultant's persistent AI CV variant (Flowcase proposal + tailored CV copy of the main CV).",
1646
+ "operationId": "EnsureMyCvVariant",
1647
+ "requestBody": {
1648
+ "content": {
1649
+ "application/json": {
1650
+ "schema": {
1651
+ "$ref": "#/components/schemas/ensureCvVariantRequest"
1652
+ }
1653
+ }
1654
+ }
1655
+ },
1656
+ "responses": {
1657
+ "200": {
1658
+ "description": "Payload of ConsultantCvVariantView",
1659
+ "content": {
1660
+ "application/json": {
1661
+ "schema": {
1662
+ "$ref": "#/components/schemas/consultantCvVariantView"
1663
+ }
1664
+ }
1665
+ }
1666
+ },
1667
+ "502": {
1668
+ "description": "No description"
1669
+ }
1670
+ },
1671
+ "security": [
1672
+ {
1673
+ "Implicit": [
1674
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
1675
+ ]
1676
+ },
1677
+ {
1678
+ "ApiKey": []
1679
+ }
1680
+ ]
1681
+ }
1682
+ },
1683
+ "/v1.0/cv-variants/me/promote": {
1684
+ "post": {
1685
+ "tags": [
1686
+ "CvVariants"
1687
+ ],
1688
+ "summary": "Merge the consultant's AI CV variant into the main CV.",
1689
+ "operationId": "PromoteMyCvVariant",
1690
+ "responses": {
1691
+ "200": {
1692
+ "description": "Payload of ConsultantCvVariantView",
1693
+ "content": {
1694
+ "application/json": {
1695
+ "schema": {
1696
+ "$ref": "#/components/schemas/consultantCvVariantView"
1697
+ }
1698
+ }
1699
+ }
1700
+ },
1701
+ "404": {
1702
+ "description": "No description"
1703
+ },
1704
+ "501": {
1705
+ "description": "No description"
1706
+ }
1707
+ },
1708
+ "security": [
1709
+ {
1710
+ "Implicit": [
1711
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
1712
+ ]
1713
+ },
1714
+ {
1715
+ "ApiKey": []
1716
+ }
1717
+ ]
1718
+ }
1719
+ },
1720
+ "/v1.0/cv-variants/consultant/{email}": {
1721
+ "get": {
1722
+ "tags": [
1723
+ "CvVariants"
1724
+ ],
1725
+ "summary": "Get a specific consultant's persistent AI CV variant, if one exists.",
1726
+ "operationId": "GetConsultantCvVariant",
1727
+ "parameters": [
1728
+ {
1729
+ "name": "email",
1730
+ "in": "path",
1731
+ "required": true,
1732
+ "schema": {
1733
+ "type": "string"
1734
+ }
1735
+ }
1736
+ ],
1737
+ "responses": {
1738
+ "200": {
1739
+ "description": "Payload of ConsultantCvVariantView",
1740
+ "content": {
1741
+ "application/json": {
1742
+ "schema": {
1743
+ "$ref": "#/components/schemas/consultantCvVariantView"
1744
+ }
1745
+ }
1746
+ }
1747
+ },
1748
+ "404": {
1749
+ "description": "No description"
1750
+ }
1751
+ },
1752
+ "security": [
1753
+ {
1754
+ "Implicit": [
1755
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
1756
+ ]
1757
+ },
1758
+ {
1759
+ "ApiKey": []
1760
+ }
1761
+ ]
1762
+ },
1763
+ "post": {
1764
+ "tags": [
1765
+ "CvVariants"
1766
+ ],
1767
+ "summary": "Get or create a specific consultant's persistent AI CV variant (Flowcase proposal + tailored CV copy of the main CV).",
1768
+ "operationId": "EnsureConsultantCvVariant",
1769
+ "parameters": [
1770
+ {
1771
+ "name": "email",
1772
+ "in": "path",
1773
+ "required": true,
1774
+ "schema": {
1775
+ "type": "string"
1776
+ }
1777
+ }
1778
+ ],
1779
+ "requestBody": {
1780
+ "content": {
1781
+ "application/json": {
1782
+ "schema": {
1783
+ "$ref": "#/components/schemas/ensureCvVariantRequest"
1784
+ }
1785
+ }
1786
+ }
1787
+ },
1788
+ "responses": {
1789
+ "200": {
1790
+ "description": "Payload of ConsultantCvVariantView",
1791
+ "content": {
1792
+ "application/json": {
1793
+ "schema": {
1794
+ "$ref": "#/components/schemas/consultantCvVariantView"
1795
+ }
1796
+ }
1797
+ }
1798
+ },
1799
+ "502": {
1800
+ "description": "No description"
1801
+ }
1802
+ },
1803
+ "security": [
1804
+ {
1805
+ "Implicit": [
1806
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
1807
+ ]
1808
+ },
1809
+ {
1810
+ "ApiKey": []
1811
+ }
1812
+ ]
1813
+ }
1814
+ },
1815
+ "/v1.0/cv-variants/consultant/{email}/promote": {
1816
+ "post": {
1817
+ "tags": [
1818
+ "CvVariants"
1819
+ ],
1820
+ "summary": "Merge a specific consultant's AI CV variant into their main CV.",
1821
+ "operationId": "PromoteConsultantCvVariant",
1822
+ "parameters": [
1823
+ {
1824
+ "name": "email",
1825
+ "in": "path",
1826
+ "required": true,
1827
+ "schema": {
1828
+ "type": "string"
1829
+ }
1830
+ }
1831
+ ],
1832
+ "responses": {
1833
+ "200": {
1834
+ "description": "Payload of ConsultantCvVariantView",
1835
+ "content": {
1836
+ "application/json": {
1837
+ "schema": {
1838
+ "$ref": "#/components/schemas/consultantCvVariantView"
1839
+ }
1840
+ }
1841
+ }
1842
+ },
1843
+ "404": {
1844
+ "description": "No description"
1845
+ },
1846
+ "501": {
1847
+ "description": "No description"
1848
+ }
1849
+ },
1850
+ "security": [
1851
+ {
1852
+ "Implicit": [
1853
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
1854
+ ]
1855
+ },
1856
+ {
1857
+ "ApiKey": []
1858
+ }
1859
+ ]
1860
+ }
1861
+ },
1862
+ "/v1.0/consultants": {
1863
+ "get": {
1864
+ "tags": [
1865
+ "Consultants"
1866
+ ],
1867
+ "summary": "List all known consultants (for manual selection)",
1868
+ "operationId": "ListConsultants",
1869
+ "parameters": [
1870
+ {
1871
+ "name": "query",
1872
+ "in": "query",
1873
+ "schema": {
1874
+ "type": "string"
1875
+ }
1876
+ }
1877
+ ],
1878
+ "responses": {
1879
+ "200": {
1880
+ "description": "Payload of Array of ConsultantSummary",
1881
+ "content": {
1882
+ "application/json": {
1883
+ "schema": {
1884
+ "type": "array",
1885
+ "items": {
1886
+ "$ref": "#/components/schemas/consultantSummary"
1887
+ }
1888
+ }
1889
+ }
1890
+ }
1891
+ }
1892
+ },
1893
+ "security": [
1894
+ {
1895
+ "Implicit": [
1896
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
1897
+ ]
1898
+ },
1899
+ {
1900
+ "ApiKey": []
1901
+ }
1902
+ ]
1903
+ }
1904
+ },
1905
+ "/v1.0/tenders/{id}/documents": {
1906
+ "get": {
1907
+ "tags": [
1908
+ "Documents"
1909
+ ],
1910
+ "summary": "List documents for a tender",
1911
+ "operationId": "ListTenderDocuments",
1912
+ "parameters": [
1913
+ {
1914
+ "name": "id",
1915
+ "in": "path",
1916
+ "required": true,
1917
+ "schema": {
1918
+ "type": "string"
1919
+ }
1920
+ }
1921
+ ],
1922
+ "responses": {
1923
+ "200": {
1924
+ "description": "Payload of Array of TenderDocument",
1925
+ "content": {
1926
+ "application/json": {
1927
+ "schema": {
1928
+ "type": "array",
1929
+ "items": {
1930
+ "$ref": "#/components/schemas/tenderDocument"
1931
+ }
1932
+ }
1933
+ }
1934
+ }
1935
+ },
1936
+ "404": {
1937
+ "description": "No description"
1938
+ }
1939
+ },
1940
+ "security": [
1941
+ {
1942
+ "Implicit": [
1943
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
1944
+ ]
1945
+ },
1946
+ {
1947
+ "ApiKey": []
1948
+ }
1949
+ ]
1950
+ },
1951
+ "post": {
1952
+ "tags": [
1953
+ "Documents"
1954
+ ],
1955
+ "summary": "Upload a new document to a tender",
1956
+ "operationId": "UploadTenderDocument",
1957
+ "parameters": [
1958
+ {
1959
+ "name": "id",
1960
+ "in": "path",
1961
+ "required": true,
1962
+ "schema": {
1963
+ "type": "string"
1964
+ }
1965
+ }
1966
+ ],
1967
+ "responses": {
1968
+ "200": {
1969
+ "description": "Payload of TenderDocument",
1970
+ "content": {
1971
+ "application/json": {
1972
+ "schema": {
1973
+ "$ref": "#/components/schemas/tenderDocument"
1974
+ }
1975
+ }
1976
+ }
1977
+ },
1978
+ "404": {
1979
+ "description": "No description"
1980
+ }
1981
+ },
1982
+ "security": [
1983
+ {
1984
+ "Implicit": [
1985
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
1986
+ ]
1987
+ },
1988
+ {
1989
+ "ApiKey": []
1990
+ }
1991
+ ]
1992
+ }
1993
+ },
1994
+ "/v1.0/tenders/{id}/documents/{docId}/download-url": {
1995
+ "get": {
1996
+ "tags": [
1997
+ "Documents"
1998
+ ],
1999
+ "summary": "Get a short-lived download URL for a document",
2000
+ "operationId": "GetDocumentDownloadUrl",
2001
+ "parameters": [
2002
+ {
2003
+ "name": "id",
2004
+ "in": "path",
2005
+ "required": true,
2006
+ "schema": {
2007
+ "type": "string"
2008
+ }
2009
+ },
2010
+ {
2011
+ "name": "docId",
2012
+ "in": "path",
2013
+ "required": true,
2014
+ "schema": {
2015
+ "type": "string"
2016
+ }
2017
+ }
2018
+ ],
2019
+ "responses": {
2020
+ "200": {
2021
+ "description": "Payload of Object",
2022
+ "content": {
2023
+ "application/json": {
2024
+ "schema": {
2025
+ "type": "object"
2026
+ }
2027
+ }
2028
+ }
2029
+ },
2030
+ "404": {
2031
+ "description": "No description"
2032
+ }
2033
+ },
2034
+ "security": [
2035
+ {
2036
+ "Implicit": [
2037
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
2038
+ ]
2039
+ },
2040
+ {
2041
+ "ApiKey": []
2042
+ }
2043
+ ]
2044
+ }
2045
+ },
2046
+ "/v1.0/tenders/{id}/documents/{docId}/download": {
2047
+ "get": {
2048
+ "tags": [
2049
+ "Documents"
2050
+ ],
2051
+ "summary": "Download a single document",
2052
+ "operationId": "DownloadDocument",
2053
+ "parameters": [
2054
+ {
2055
+ "name": "id",
2056
+ "in": "path",
2057
+ "required": true,
2058
+ "schema": {
2059
+ "type": "string"
2060
+ }
2061
+ },
2062
+ {
2063
+ "name": "docId",
2064
+ "in": "path",
2065
+ "required": true,
2066
+ "schema": {
2067
+ "type": "string"
2068
+ }
2069
+ }
2070
+ ],
2071
+ "responses": {
2072
+ "200": {
2073
+ "description": "Payload of Array of Byte",
2074
+ "content": {
2075
+ "application/octet-stream": {
2076
+ "schema": {
2077
+ "type": "string",
2078
+ "format": "binary"
2079
+ }
2080
+ }
2081
+ }
2082
+ },
2083
+ "404": {
2084
+ "description": "No description"
2085
+ }
2086
+ },
2087
+ "security": [
2088
+ {
2089
+ "Implicit": [
2090
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
2091
+ ]
2092
+ },
2093
+ {
2094
+ "ApiKey": []
2095
+ }
2096
+ ]
2097
+ }
2098
+ },
2099
+ "/v1.0/tenders/{id}/documents/download-all": {
2100
+ "get": {
2101
+ "tags": [
2102
+ "Documents"
2103
+ ],
2104
+ "summary": "Download all tender documents as a ZIP archive",
2105
+ "operationId": "DownloadAllDocuments",
2106
+ "parameters": [
2107
+ {
2108
+ "name": "id",
2109
+ "in": "path",
2110
+ "required": true,
2111
+ "schema": {
2112
+ "type": "string"
2113
+ }
2114
+ }
2115
+ ],
2116
+ "responses": {
2117
+ "200": {
2118
+ "description": "Payload of Array of Byte",
2119
+ "content": {
2120
+ "application/zip": {
2121
+ "schema": {
2122
+ "type": "string",
2123
+ "format": "binary"
2124
+ }
2125
+ }
2126
+ }
2127
+ },
2128
+ "404": {
2129
+ "description": "No description"
2130
+ }
2131
+ },
2132
+ "security": [
2133
+ {
2134
+ "Implicit": [
2135
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
2136
+ ]
2137
+ },
2138
+ {
2139
+ "ApiKey": []
2140
+ }
2141
+ ]
2142
+ }
2143
+ },
2144
+ "/v1.0/tenders/{id}/documents/{docId}/extract-questions": {
2145
+ "post": {
2146
+ "tags": [
2147
+ "Documents"
2148
+ ],
2149
+ "summary": "Start extraction of fillable questions from a document",
2150
+ "operationId": "StartQuestionExtraction",
2151
+ "parameters": [
2152
+ {
2153
+ "name": "id",
2154
+ "in": "path",
2155
+ "required": true,
2156
+ "schema": {
2157
+ "type": "string"
2158
+ }
2159
+ },
2160
+ {
2161
+ "name": "docId",
2162
+ "in": "path",
2163
+ "required": true,
2164
+ "schema": {
2165
+ "type": "string"
2166
+ }
2167
+ }
2168
+ ],
2169
+ "responses": {
1423
2170
  "202": {
1424
2171
  "description": "Payload of Object",
1425
2172
  "content": {
@@ -1437,8 +2184,11 @@
1437
2184
  "security": [
1438
2185
  {
1439
2186
  "Implicit": [
1440
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
2187
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
1441
2188
  ]
2189
+ },
2190
+ {
2191
+ "ApiKey": []
1442
2192
  }
1443
2193
  ]
1444
2194
  }
@@ -1496,23 +2246,132 @@
1496
2246
  "security": [
1497
2247
  {
1498
2248
  "Implicit": [
1499
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
2249
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
2250
+ ]
2251
+ },
2252
+ {
2253
+ "ApiKey": []
2254
+ }
2255
+ ]
2256
+ }
2257
+ },
2258
+ "/v1.0/tenders/{id}/documents/{docId}": {
2259
+ "patch": {
2260
+ "tags": [
2261
+ "Documents"
2262
+ ],
2263
+ "summary": "Patch tender document flags (e.g. set as competence matrix source)",
2264
+ "operationId": "PatchTenderDocument",
2265
+ "parameters": [
2266
+ {
2267
+ "name": "id",
2268
+ "in": "path",
2269
+ "required": true,
2270
+ "schema": {
2271
+ "type": "string"
2272
+ }
2273
+ },
2274
+ {
2275
+ "name": "docId",
2276
+ "in": "path",
2277
+ "required": true,
2278
+ "schema": {
2279
+ "type": "string"
2280
+ }
2281
+ }
2282
+ ],
2283
+ "requestBody": {
2284
+ "content": {
2285
+ "application/json": {
2286
+ "schema": {
2287
+ "$ref": "#/components/schemas/patchDocumentRequest"
2288
+ }
2289
+ }
2290
+ },
2291
+ "required": true
2292
+ },
2293
+ "responses": {
2294
+ "200": {
2295
+ "description": "Payload of PatchDocumentResponse",
2296
+ "content": {
2297
+ "application/json": {
2298
+ "schema": {
2299
+ "$ref": "#/components/schemas/patchDocumentResponse"
2300
+ }
2301
+ }
2302
+ }
2303
+ },
2304
+ "404": {
2305
+ "description": "No description"
2306
+ }
2307
+ },
2308
+ "security": [
2309
+ {
2310
+ "Implicit": [
2311
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
2312
+ ]
2313
+ },
2314
+ {
2315
+ "ApiKey": []
2316
+ }
2317
+ ]
2318
+ },
2319
+ "delete": {
2320
+ "tags": [
2321
+ "Documents"
2322
+ ],
2323
+ "summary": "Delete a tender document (and its blob + related answers)",
2324
+ "operationId": "DeleteTenderDocument",
2325
+ "parameters": [
2326
+ {
2327
+ "name": "id",
2328
+ "in": "path",
2329
+ "required": true,
2330
+ "schema": {
2331
+ "type": "string"
2332
+ }
2333
+ },
2334
+ {
2335
+ "name": "docId",
2336
+ "in": "path",
2337
+ "required": true,
2338
+ "schema": {
2339
+ "type": "string"
2340
+ }
2341
+ }
2342
+ ],
2343
+ "responses": {
2344
+ "204": {
2345
+ "description": "No description"
2346
+ },
2347
+ "404": {
2348
+ "description": "No description"
2349
+ }
2350
+ },
2351
+ "security": [
2352
+ {
2353
+ "Implicit": [
2354
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
1500
2355
  ]
2356
+ },
2357
+ {
2358
+ "ApiKey": []
1501
2359
  }
1502
2360
  ]
1503
2361
  }
1504
2362
  },
1505
- "/v1.0/consultants": {
2363
+ "/v1.0/protected/health/{provider}": {
1506
2364
  "get": {
1507
2365
  "tags": [
1508
- "Consultants"
2366
+ "Health"
1509
2367
  ],
1510
- "summary": "List all known consultants (for manual selection)",
1511
- "operationId": "ListConsultants",
2368
+ "summary": "Checks an integration's connectivity",
2369
+ "operationId": "SalesIntegrationHealth",
1512
2370
  "parameters": [
1513
2371
  {
1514
- "name": "query",
1515
- "in": "query",
2372
+ "name": "provider",
2373
+ "in": "path",
2374
+ "required": true,
1516
2375
  "schema": {
1517
2376
  "type": "string"
1518
2377
  }
@@ -1520,14 +2379,11 @@
1520
2379
  ],
1521
2380
  "responses": {
1522
2381
  "200": {
1523
- "description": "Payload of Array of ConsultantSummary",
2382
+ "description": "Health result",
1524
2383
  "content": {
1525
2384
  "application/json": {
1526
2385
  "schema": {
1527
- "type": "array",
1528
- "items": {
1529
- "$ref": "#/components/schemas/consultantSummary"
1530
- }
2386
+ "$ref": "#/components/schemas/integrationHealthResult"
1531
2387
  }
1532
2388
  }
1533
2389
  }
@@ -1536,8 +2392,11 @@
1536
2392
  "security": [
1537
2393
  {
1538
2394
  "Implicit": [
1539
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
2395
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
1540
2396
  ]
2397
+ },
2398
+ {
2399
+ "ApiKey": []
1541
2400
  }
1542
2401
  ]
1543
2402
  }
@@ -1576,8 +2435,11 @@
1576
2435
  "security": [
1577
2436
  {
1578
2437
  "Implicit": [
1579
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
2438
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
1580
2439
  ]
2440
+ },
2441
+ {
2442
+ "ApiKey": []
1581
2443
  }
1582
2444
  ]
1583
2445
  }
@@ -1603,8 +2465,11 @@
1603
2465
  "security": [
1604
2466
  {
1605
2467
  "Implicit": [
1606
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
2468
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
1607
2469
  ]
2470
+ },
2471
+ {
2472
+ "ApiKey": []
1608
2473
  }
1609
2474
  ]
1610
2475
  }
@@ -1621,8 +2486,11 @@
1621
2486
  "security": [
1622
2487
  {
1623
2488
  "Implicit": [
1624
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
2489
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
1625
2490
  ]
2491
+ },
2492
+ {
2493
+ "ApiKey": []
1626
2494
  }
1627
2495
  ]
1628
2496
  }
@@ -1639,47 +2507,120 @@
1639
2507
  "security": [
1640
2508
  {
1641
2509
  "Implicit": [
1642
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
2510
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
1643
2511
  ]
1644
2512
  }
1645
2513
  ]
1646
2514
  }
1647
2515
  },
1648
- "/v1.0/salesforce/opportunities": {
1649
- "get": {
2516
+ "/v1.0/backups/salesforce": {
2517
+ "post": {
1650
2518
  "tags": [
1651
- "Salesforce"
2519
+ "Backups"
1652
2520
  ],
1653
- "summary": "List Salesforce Opportunities (open by default).",
1654
- "operationId": "ListSalesforceOpportunities",
2521
+ "summary": "Full-dump all queryable and replicateable Salesforce objects to the shared backups storage account.",
2522
+ "operationId": "CreateSalesforceBackup",
2523
+ "responses": {
2524
+ "200": {
2525
+ "description": "Payload of SalesforceBackupSummary",
2526
+ "content": {
2527
+ "application/json": {
2528
+ "schema": {
2529
+ "$ref": "#/components/schemas/salesforceBackupSummary"
2530
+ }
2531
+ }
2532
+ }
2533
+ }
2534
+ },
2535
+ "security": [
2536
+ {
2537
+ "Implicit": [
2538
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
2539
+ ]
2540
+ },
2541
+ {
2542
+ "ApiKey": []
2543
+ }
2544
+ ]
2545
+ }
2546
+ },
2547
+ "/v1.0/tenders/{id}/document-access": {
2548
+ "post": {
2549
+ "tags": [
2550
+ "Tenders"
2551
+ ],
2552
+ "summary": "Ask Snokam for access to a tender's competition documents.",
2553
+ "operationId": "RequestTenderDocumentAccess",
1655
2554
  "parameters": [
1656
2555
  {
1657
- "name": "includeClosed",
1658
- "in": "query",
2556
+ "name": "id",
2557
+ "in": "path",
2558
+ "required": true,
1659
2559
  "schema": {
1660
- "type": "boolean"
1661
- },
1662
- "x-ms-summary": "Include closed opportunities (default false)."
2560
+ "type": "string"
2561
+ }
2562
+ }
2563
+ ],
2564
+ "requestBody": {
2565
+ "content": {
2566
+ "application/json": {
2567
+ "schema": {
2568
+ "$ref": "#/components/schemas/documentAccessRequest"
2569
+ }
2570
+ }
2571
+ }
2572
+ },
2573
+ "responses": {
2574
+ "200": {
2575
+ "description": "Payload of TenderView",
2576
+ "content": {
2577
+ "application/json": {
2578
+ "schema": {
2579
+ "$ref": "#/components/schemas/tenderView"
2580
+ }
2581
+ }
2582
+ }
2583
+ },
2584
+ "404": {
2585
+ "description": "No description"
2586
+ }
2587
+ },
2588
+ "security": [
2589
+ {
2590
+ "Implicit": [
2591
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
2592
+ ]
1663
2593
  },
1664
2594
  {
1665
- "name": "limit",
1666
- "in": "query",
2595
+ "ApiKey": []
2596
+ }
2597
+ ]
2598
+ },
2599
+ "get": {
2600
+ "tags": [
2601
+ "Tenders"
2602
+ ],
2603
+ "summary": "Snokam's list of companies asking for document access on a tender.",
2604
+ "operationId": "ListTenderDocumentAccessRequests",
2605
+ "parameters": [
2606
+ {
2607
+ "name": "id",
2608
+ "in": "path",
2609
+ "required": true,
1667
2610
  "schema": {
1668
- "type": "integer",
1669
- "format": "int32"
1670
- },
1671
- "x-ms-summary": "Row cap, max 200 (default 100)."
2611
+ "type": "string"
2612
+ }
1672
2613
  }
1673
2614
  ],
1674
2615
  "responses": {
1675
2616
  "200": {
1676
- "description": "Payload of Array of SalesforceOpportunity",
2617
+ "description": "Payload of Array of TenderEngagement",
1677
2618
  "content": {
1678
2619
  "application/json": {
1679
2620
  "schema": {
1680
2621
  "type": "array",
1681
2622
  "items": {
1682
- "$ref": "#/components/schemas/salesforceOpportunity"
2623
+ "$ref": "#/components/schemas/tenderEngagement"
1683
2624
  }
1684
2625
  }
1685
2626
  }
@@ -1689,28 +2630,199 @@
1689
2630
  "security": [
1690
2631
  {
1691
2632
  "Implicit": [
1692
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
2633
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
2634
+ ]
2635
+ },
2636
+ {
2637
+ "ApiKey": []
2638
+ }
2639
+ ]
2640
+ }
2641
+ },
2642
+ "/v1.0/tenders/{id}/document-access/{businessId}": {
2643
+ "put": {
2644
+ "tags": [
2645
+ "Tenders"
2646
+ ],
2647
+ "summary": "Snokam grants or denies a company access to a tender's documents.",
2648
+ "operationId": "DecideTenderDocumentAccess",
2649
+ "parameters": [
2650
+ {
2651
+ "name": "id",
2652
+ "in": "path",
2653
+ "required": true,
2654
+ "schema": {
2655
+ "type": "string"
2656
+ }
2657
+ },
2658
+ {
2659
+ "name": "businessId",
2660
+ "in": "path",
2661
+ "required": true,
2662
+ "schema": {
2663
+ "type": "string"
2664
+ }
2665
+ }
2666
+ ],
2667
+ "requestBody": {
2668
+ "content": {
2669
+ "application/json": {
2670
+ "schema": {
2671
+ "$ref": "#/components/schemas/documentAccessDecision"
2672
+ }
2673
+ }
2674
+ },
2675
+ "required": true
2676
+ },
2677
+ "responses": {
2678
+ "200": {
2679
+ "description": "Payload of TenderEngagement",
2680
+ "content": {
2681
+ "application/json": {
2682
+ "schema": {
2683
+ "$ref": "#/components/schemas/tenderEngagement"
2684
+ }
2685
+ }
2686
+ }
2687
+ },
2688
+ "404": {
2689
+ "description": "No description"
2690
+ }
2691
+ },
2692
+ "security": [
2693
+ {
2694
+ "Implicit": [
2695
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
2696
+ ]
2697
+ },
2698
+ {
2699
+ "ApiKey": []
2700
+ }
2701
+ ]
2702
+ }
2703
+ },
2704
+ "/v1.0/tenders/{id}/application": {
2705
+ "post": {
2706
+ "tags": [
2707
+ "Tenders"
2708
+ ],
2709
+ "summary": "Apply for a tender. The application goes to Snokam, who reviews it and sends it together with their own consultants.",
2710
+ "operationId": "SubmitTenderApplication",
2711
+ "parameters": [
2712
+ {
2713
+ "name": "id",
2714
+ "in": "path",
2715
+ "required": true,
2716
+ "schema": {
2717
+ "type": "string"
2718
+ }
2719
+ }
2720
+ ],
2721
+ "requestBody": {
2722
+ "content": {
2723
+ "application/json": {
2724
+ "schema": {
2725
+ "$ref": "#/components/schemas/tenderApplicationRequest"
2726
+ }
2727
+ }
2728
+ },
2729
+ "required": true
2730
+ },
2731
+ "responses": {
2732
+ "200": {
2733
+ "description": "Payload of TenderView",
2734
+ "content": {
2735
+ "application/json": {
2736
+ "schema": {
2737
+ "$ref": "#/components/schemas/tenderView"
2738
+ }
2739
+ }
2740
+ }
2741
+ },
2742
+ "404": {
2743
+ "description": "No description"
2744
+ }
2745
+ },
2746
+ "security": [
2747
+ {
2748
+ "Implicit": [
2749
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
2750
+ ]
2751
+ },
2752
+ {
2753
+ "ApiKey": []
2754
+ }
2755
+ ]
2756
+ },
2757
+ "delete": {
2758
+ "tags": [
2759
+ "Tenders"
2760
+ ],
2761
+ "summary": "Withdraw an application.",
2762
+ "operationId": "WithdrawTenderApplication",
2763
+ "parameters": [
2764
+ {
2765
+ "name": "id",
2766
+ "in": "path",
2767
+ "required": true,
2768
+ "schema": {
2769
+ "type": "string"
2770
+ }
2771
+ }
2772
+ ],
2773
+ "responses": {
2774
+ "200": {
2775
+ "description": "Payload of TenderView",
2776
+ "content": {
2777
+ "application/json": {
2778
+ "schema": {
2779
+ "$ref": "#/components/schemas/tenderView"
2780
+ }
2781
+ }
2782
+ }
2783
+ },
2784
+ "404": {
2785
+ "description": "No description"
2786
+ }
2787
+ },
2788
+ "security": [
2789
+ {
2790
+ "Implicit": [
2791
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
1693
2792
  ]
2793
+ },
2794
+ {
2795
+ "ApiKey": []
1694
2796
  }
1695
2797
  ]
1696
2798
  }
1697
2799
  },
1698
- "/v1.0/salesforce/opportunity-stages": {
2800
+ "/v1.0/tenders/{id}/applications": {
1699
2801
  "get": {
1700
2802
  "tags": [
1701
- "Salesforce"
2803
+ "Tenders"
2804
+ ],
2805
+ "summary": "Snokam's inbox of applications for a tender.",
2806
+ "operationId": "ListTenderApplications",
2807
+ "parameters": [
2808
+ {
2809
+ "name": "id",
2810
+ "in": "path",
2811
+ "required": true,
2812
+ "schema": {
2813
+ "type": "string"
2814
+ }
2815
+ }
1702
2816
  ],
1703
- "summary": "List the SF org's Opportunity pipeline stages in configured order.",
1704
- "operationId": "ListSalesforceOpportunityStages",
1705
2817
  "responses": {
1706
2818
  "200": {
1707
- "description": "Payload of Array of SalesforceOpportunityStage",
2819
+ "description": "Payload of Array of TenderEngagement",
1708
2820
  "content": {
1709
2821
  "application/json": {
1710
2822
  "schema": {
1711
2823
  "type": "array",
1712
2824
  "items": {
1713
- "$ref": "#/components/schemas/salesforceOpportunityStage"
2825
+ "$ref": "#/components/schemas/tenderEngagement"
1714
2826
  }
1715
2827
  }
1716
2828
  }
@@ -1720,47 +2832,84 @@
1720
2832
  "security": [
1721
2833
  {
1722
2834
  "Implicit": [
1723
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
2835
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
1724
2836
  ]
2837
+ },
2838
+ {
2839
+ "ApiKey": []
1725
2840
  }
1726
2841
  ]
1727
2842
  }
1728
2843
  },
1729
- "/v1.0/salesforce/refresh": {
1730
- "post": {
2844
+ "/v1.0/tenders/{id}/applications/{businessId}": {
2845
+ "put": {
1731
2846
  "tags": [
1732
- "Salesforce"
2847
+ "Tenders"
1733
2848
  ],
1734
- "summary": "Batch-refresh the cached Salesforce state on every linked Snøkam tender.",
1735
- "operationId": "RefreshAllSalesforceLinks",
2849
+ "summary": "Snokam includes an application in the bid, or rejects it.",
2850
+ "operationId": "DecideTenderApplication",
2851
+ "parameters": [
2852
+ {
2853
+ "name": "id",
2854
+ "in": "path",
2855
+ "required": true,
2856
+ "schema": {
2857
+ "type": "string"
2858
+ }
2859
+ },
2860
+ {
2861
+ "name": "businessId",
2862
+ "in": "path",
2863
+ "required": true,
2864
+ "schema": {
2865
+ "type": "string"
2866
+ }
2867
+ }
2868
+ ],
2869
+ "requestBody": {
2870
+ "content": {
2871
+ "application/json": {
2872
+ "schema": {
2873
+ "$ref": "#/components/schemas/tenderApplicationDecision"
2874
+ }
2875
+ }
2876
+ },
2877
+ "required": true
2878
+ },
1736
2879
  "responses": {
1737
2880
  "200": {
1738
- "description": "Payload of SalesforceRefreshResult",
2881
+ "description": "Payload of TenderEngagement",
1739
2882
  "content": {
1740
2883
  "application/json": {
1741
2884
  "schema": {
1742
- "$ref": "#/components/schemas/salesforceRefreshResult"
2885
+ "$ref": "#/components/schemas/tenderEngagement"
1743
2886
  }
1744
2887
  }
1745
2888
  }
2889
+ },
2890
+ "404": {
2891
+ "description": "No description"
1746
2892
  }
1747
2893
  },
1748
2894
  "security": [
1749
2895
  {
1750
2896
  "Implicit": [
1751
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
2897
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
1752
2898
  ]
2899
+ },
2900
+ {
2901
+ "ApiKey": []
1753
2902
  }
1754
2903
  ]
1755
2904
  }
1756
2905
  },
1757
- "/v1.0/tenders/{id}/salesforce/stage": {
2906
+ "/v1.0/tenders/{id}/consultants": {
1758
2907
  "post": {
1759
2908
  "tags": [
1760
- "Salesforce"
2909
+ "Tenders"
1761
2910
  ],
1762
- "summary": "Move the linked SF Opportunity to a new stage and refresh the cache.",
1763
- "operationId": "UpdateTenderSalesforceStage",
2911
+ "summary": "Assign a consultant to a tender. Idempotent: assigning the same email twice refreshes Name/Note but does not create duplicates.",
2912
+ "operationId": "AssignConsultant",
1764
2913
  "parameters": [
1765
2914
  {
1766
2915
  "name": "id",
@@ -1772,11 +2921,10 @@
1772
2921
  }
1773
2922
  ],
1774
2923
  "requestBody": {
1775
- "description": "The SF stage masterLabel/apiName to switch to.",
1776
2924
  "content": {
1777
2925
  "application/json": {
1778
2926
  "schema": {
1779
- "$ref": "#/components/schemas/updateSalesforceStageRequest"
2927
+ "$ref": "#/components/schemas/assignedConsultant"
1780
2928
  }
1781
2929
  }
1782
2930
  },
@@ -1784,18 +2932,15 @@
1784
2932
  },
1785
2933
  "responses": {
1786
2934
  "200": {
1787
- "description": "Payload of Tender",
2935
+ "description": "Payload of TenderView",
1788
2936
  "content": {
1789
2937
  "application/json": {
1790
2938
  "schema": {
1791
- "$ref": "#/components/schemas/tender"
2939
+ "$ref": "#/components/schemas/tenderView"
1792
2940
  }
1793
2941
  }
1794
2942
  }
1795
2943
  },
1796
- "400": {
1797
- "description": "Tender has no Salesforce link, or stageName is missing."
1798
- },
1799
2944
  "404": {
1800
2945
  "description": "No description"
1801
2946
  }
@@ -1803,64 +2948,76 @@
1803
2948
  "security": [
1804
2949
  {
1805
2950
  "Implicit": [
1806
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
2951
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
1807
2952
  ]
2953
+ },
2954
+ {
2955
+ "ApiKey": []
1808
2956
  }
1809
2957
  ]
1810
2958
  }
1811
2959
  },
1812
- "/v1.0/salesforce/opportunities/{sfId}/import": {
2960
+ "/v1.0/tenders/{id}/matches/interest": {
1813
2961
  "post": {
1814
2962
  "tags": [
1815
- "Salesforce"
2963
+ "Tenders"
1816
2964
  ],
1817
- "summary": "Create a Snøkam tender stub from an existing Salesforce Opportunity.",
1818
- "operationId": "ImportSalesforceOpportunity",
2965
+ "summary": "Mark a consultant's interest in a matched tender. interested=true selects the match; false deselects and dismisses it (suppressing future match notifications).",
2966
+ "operationId": "SetConsultantMatchInterest",
1819
2967
  "parameters": [
1820
2968
  {
1821
- "name": "sfId",
2969
+ "name": "id",
1822
2970
  "in": "path",
1823
2971
  "required": true,
1824
2972
  "schema": {
1825
2973
  "type": "string"
1826
- },
1827
- "x-ms-summary": "Salesforce Opportunity Id."
2974
+ }
1828
2975
  }
1829
2976
  ],
2977
+ "requestBody": {
2978
+ "content": {
2979
+ "application/json": {
2980
+ "schema": {
2981
+ "$ref": "#/components/schemas/setMatchInterestRequest"
2982
+ }
2983
+ }
2984
+ },
2985
+ "required": true
2986
+ },
1830
2987
  "responses": {
1831
2988
  "200": {
1832
- "description": "Payload of Tender",
2989
+ "description": "Payload of TenderView",
1833
2990
  "content": {
1834
2991
  "application/json": {
1835
2992
  "schema": {
1836
- "$ref": "#/components/schemas/tender"
2993
+ "$ref": "#/components/schemas/tenderView"
1837
2994
  }
1838
2995
  }
1839
2996
  }
1840
2997
  },
1841
2998
  "404": {
1842
2999
  "description": "No description"
1843
- },
1844
- "409": {
1845
- "description": "A tender is already linked to this Opportunity."
1846
3000
  }
1847
3001
  },
1848
3002
  "security": [
1849
3003
  {
1850
3004
  "Implicit": [
1851
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
3005
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
1852
3006
  ]
3007
+ },
3008
+ {
3009
+ "ApiKey": []
1853
3010
  }
1854
3011
  ]
1855
3012
  }
1856
3013
  },
1857
- "/v1.0/tenders/{id}/salesforce": {
3014
+ "/v1.0/tenders/{id}/slack-messages": {
1858
3015
  "post": {
1859
3016
  "tags": [
1860
- "Salesforce"
3017
+ "Tenders"
1861
3018
  ],
1862
- "summary": "Create a Salesforce Opportunity from a Snøkam tender and cache the link.",
1863
- "operationId": "PromoteTenderToSalesforce",
3019
+ "summary": "Queue a Slack message for a tender (Service Bus notifications-function).",
3020
+ "operationId": "SendTenderSlackMessage",
1864
3021
  "parameters": [
1865
3022
  {
1866
3023
  "name": "id",
@@ -1871,40 +3028,46 @@
1871
3028
  }
1872
3029
  }
1873
3030
  ],
1874
- "responses": {
1875
- "200": {
1876
- "description": "Payload of Tender",
1877
- "content": {
1878
- "application/json": {
1879
- "schema": {
1880
- "$ref": "#/components/schemas/tender"
1881
- }
3031
+ "requestBody": {
3032
+ "content": {
3033
+ "application/json": {
3034
+ "schema": {
3035
+ "$ref": "#/components/schemas/sendTenderSlackMessageRequest"
1882
3036
  }
1883
3037
  }
1884
3038
  },
1885
- "404": {
3039
+ "required": true
3040
+ },
3041
+ "responses": {
3042
+ "204": {
1886
3043
  "description": "No description"
1887
3044
  },
1888
- "409": {
1889
- "description": "Tender is already linked to a Salesforce Opportunity."
3045
+ "400": {
3046
+ "description": "No description"
3047
+ },
3048
+ "404": {
3049
+ "description": "No description"
1890
3050
  }
1891
3051
  },
1892
3052
  "security": [
1893
3053
  {
1894
3054
  "Implicit": [
1895
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
3055
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
1896
3056
  ]
3057
+ },
3058
+ {
3059
+ "ApiKey": []
1897
3060
  }
1898
3061
  ]
1899
3062
  }
1900
3063
  },
1901
- "/v1.0/tenders/{id}/salesforce/refresh": {
1902
- "post": {
3064
+ "/v1.0/tenders/{id}/consultants/{email}": {
3065
+ "delete": {
1903
3066
  "tags": [
1904
- "Salesforce"
3067
+ "Tenders"
1905
3068
  ],
1906
- "summary": "Re-sync cached Salesforce Opportunity state (stage / closed / won) onto the tender.",
1907
- "operationId": "RefreshTenderSalesforceLink",
3069
+ "summary": "Remove a consultant assignment from a tender. No-op if the email isn't assigned.",
3070
+ "operationId": "UnassignConsultant",
1908
3071
  "parameters": [
1909
3072
  {
1910
3073
  "name": "id",
@@ -1913,15 +3076,23 @@
1913
3076
  "schema": {
1914
3077
  "type": "string"
1915
3078
  }
3079
+ },
3080
+ {
3081
+ "name": "email",
3082
+ "in": "path",
3083
+ "required": true,
3084
+ "schema": {
3085
+ "type": "string"
3086
+ }
1916
3087
  }
1917
3088
  ],
1918
3089
  "responses": {
1919
3090
  "200": {
1920
- "description": "Payload of Tender",
3091
+ "description": "Payload of TenderView",
1921
3092
  "content": {
1922
3093
  "application/json": {
1923
3094
  "schema": {
1924
- "$ref": "#/components/schemas/tender"
3095
+ "$ref": "#/components/schemas/tenderView"
1925
3096
  }
1926
3097
  }
1927
3098
  }
@@ -1933,8 +3104,11 @@
1933
3104
  "security": [
1934
3105
  {
1935
3106
  "Implicit": [
1936
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
3107
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
1937
3108
  ]
3109
+ },
3110
+ {
3111
+ "ApiKey": []
1938
3112
  }
1939
3113
  ]
1940
3114
  }
@@ -1948,13 +3122,13 @@
1948
3122
  "operationId": "ListTenders",
1949
3123
  "responses": {
1950
3124
  "200": {
1951
- "description": "Payload of Array of Tender",
3125
+ "description": "Payload of Array of TenderView",
1952
3126
  "content": {
1953
3127
  "application/json": {
1954
3128
  "schema": {
1955
3129
  "type": "array",
1956
3130
  "items": {
1957
- "$ref": "#/components/schemas/tender"
3131
+ "$ref": "#/components/schemas/tenderView"
1958
3132
  }
1959
3133
  }
1960
3134
  }
@@ -1964,8 +3138,11 @@
1964
3138
  "security": [
1965
3139
  {
1966
3140
  "Implicit": [
1967
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
3141
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
1968
3142
  ]
3143
+ },
3144
+ {
3145
+ "ApiKey": []
1969
3146
  }
1970
3147
  ]
1971
3148
  },
@@ -1979,7 +3156,7 @@
1979
3156
  "content": {
1980
3157
  "application/json": {
1981
3158
  "schema": {
1982
- "$ref": "#/components/schemas/tender"
3159
+ "$ref": "#/components/schemas/tenderView"
1983
3160
  }
1984
3161
  }
1985
3162
  },
@@ -1987,11 +3164,11 @@
1987
3164
  },
1988
3165
  "responses": {
1989
3166
  "201": {
1990
- "description": "Payload of Tender",
3167
+ "description": "Payload of TenderView",
1991
3168
  "content": {
1992
3169
  "application/json": {
1993
3170
  "schema": {
1994
- "$ref": "#/components/schemas/tender"
3171
+ "$ref": "#/components/schemas/tenderView"
1995
3172
  }
1996
3173
  }
1997
3174
  }
@@ -2000,8 +3177,11 @@
2000
3177
  "security": [
2001
3178
  {
2002
3179
  "Implicit": [
2003
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
3180
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
2004
3181
  ]
3182
+ },
3183
+ {
3184
+ "ApiKey": []
2005
3185
  }
2006
3186
  ]
2007
3187
  }
@@ -2026,144 +3206,36 @@
2026
3206
  ],
2027
3207
  "responses": {
2028
3208
  "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://7e877854-e62d-4637-a655-1da7141f7ac9/.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://7e877854-e62d-4637-a655-1da7141f7ac9/.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://7e877854-e62d-4637-a655-1da7141f7ac9/.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",
3209
+ "description": "Payload of TenderView",
2142
3210
  "content": {
2143
3211
  "application/json": {
2144
3212
  "schema": {
2145
- "$ref": "#/components/schemas/backfillSlugsResult"
3213
+ "$ref": "#/components/schemas/tenderView"
2146
3214
  }
2147
3215
  }
2148
3216
  }
3217
+ },
3218
+ "404": {
3219
+ "description": "No description"
2149
3220
  }
2150
3221
  },
2151
3222
  "security": [
2152
3223
  {
2153
3224
  "Implicit": [
2154
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
3225
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
2155
3226
  ]
3227
+ },
3228
+ {
3229
+ "ApiKey": []
2156
3230
  }
2157
3231
  ]
2158
- }
2159
- },
2160
- "/v1.0/tenders/{id}/reingest": {
2161
- "post": {
3232
+ },
3233
+ "put": {
2162
3234
  "tags": [
2163
3235
  "Tenders"
2164
3236
  ],
2165
- "summary": "Re-run the ingestion pipeline on an existing tender, re-parsing documents and refreshing AI match / summary / classification.",
2166
- "operationId": "ReingestTender",
3237
+ "summary": "Update a tender",
3238
+ "operationId": "UpdateTender",
2167
3239
  "parameters": [
2168
3240
  {
2169
3241
  "name": "id",
@@ -2174,13 +3246,23 @@
2174
3246
  }
2175
3247
  }
2176
3248
  ],
3249
+ "requestBody": {
3250
+ "content": {
3251
+ "application/json": {
3252
+ "schema": {
3253
+ "$ref": "#/components/schemas/tenderView"
3254
+ }
3255
+ }
3256
+ },
3257
+ "required": true
3258
+ },
2177
3259
  "responses": {
2178
3260
  "200": {
2179
- "description": "Payload of AgentJob",
3261
+ "description": "Payload of TenderView",
2180
3262
  "content": {
2181
3263
  "application/json": {
2182
3264
  "schema": {
2183
- "$ref": "#/components/schemas/agentJob"
3265
+ "$ref": "#/components/schemas/tenderView"
2184
3266
  }
2185
3267
  }
2186
3268
  }
@@ -2192,19 +3274,20 @@
2192
3274
  "security": [
2193
3275
  {
2194
3276
  "Implicit": [
2195
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
3277
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
2196
3278
  ]
3279
+ },
3280
+ {
3281
+ "ApiKey": []
2197
3282
  }
2198
3283
  ]
2199
- }
2200
- },
2201
- "/v1.0/tenders/{id}/jobs/{jobId}/snapshot": {
2202
- "get": {
3284
+ },
3285
+ "delete": {
2203
3286
  "tags": [
2204
3287
  "Tenders"
2205
3288
  ],
2206
- "summary": "Return the tender as it looked right after a given agent job ran (time-travel view).",
2207
- "operationId": "GetTenderJobSnapshot",
3289
+ "summary": "Delete a tender",
3290
+ "operationId": "DeleteTender",
2208
3291
  "parameters": [
2209
3292
  {
2210
3293
  "name": "id",
@@ -2213,26 +3296,11 @@
2213
3296
  "schema": {
2214
3297
  "type": "string"
2215
3298
  }
2216
- },
2217
- {
2218
- "name": "jobId",
2219
- "in": "path",
2220
- "required": true,
2221
- "schema": {
2222
- "type": "string"
2223
- }
2224
3299
  }
2225
3300
  ],
2226
3301
  "responses": {
2227
- "200": {
2228
- "description": "Payload of Tender",
2229
- "content": {
2230
- "application/json": {
2231
- "schema": {
2232
- "$ref": "#/components/schemas/tender"
2233
- }
2234
- }
2235
- }
3302
+ "204": {
3303
+ "description": "No description"
2236
3304
  },
2237
3305
  "404": {
2238
3306
  "description": "No description"
@@ -2241,8 +3309,11 @@
2241
3309
  "security": [
2242
3310
  {
2243
3311
  "Implicit": [
2244
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
3312
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
2245
3313
  ]
3314
+ },
3315
+ {
3316
+ "ApiKey": []
2246
3317
  }
2247
3318
  ]
2248
3319
  }
@@ -2276,11 +3347,11 @@
2276
3347
  },
2277
3348
  "responses": {
2278
3349
  "200": {
2279
- "description": "Payload of Tender",
3350
+ "description": "Payload of TenderView",
2280
3351
  "content": {
2281
3352
  "application/json": {
2282
3353
  "schema": {
2283
- "$ref": "#/components/schemas/tender"
3354
+ "$ref": "#/components/schemas/tenderView"
2284
3355
  }
2285
3356
  }
2286
3357
  }
@@ -2292,8 +3363,11 @@
2292
3363
  "security": [
2293
3364
  {
2294
3365
  "Implicit": [
2295
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
3366
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
2296
3367
  ]
3368
+ },
3369
+ {
3370
+ "ApiKey": []
2297
3371
  }
2298
3372
  ]
2299
3373
  }
@@ -2327,11 +3401,11 @@
2327
3401
  },
2328
3402
  "responses": {
2329
3403
  "200": {
2330
- "description": "Payload of Tender",
3404
+ "description": "Payload of TenderView",
2331
3405
  "content": {
2332
3406
  "application/json": {
2333
3407
  "schema": {
2334
- "$ref": "#/components/schemas/tender"
3408
+ "$ref": "#/components/schemas/tenderView"
2335
3409
  }
2336
3410
  }
2337
3411
  }
@@ -2343,8 +3417,11 @@
2343
3417
  "security": [
2344
3418
  {
2345
3419
  "Implicit": [
2346
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
3420
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
2347
3421
  ]
3422
+ },
3423
+ {
3424
+ "ApiKey": []
2348
3425
  }
2349
3426
  ]
2350
3427
  }
@@ -2376,11 +3453,11 @@
2376
3453
  ],
2377
3454
  "responses": {
2378
3455
  "200": {
2379
- "description": "Payload of Tender",
3456
+ "description": "Payload of TenderView",
2380
3457
  "content": {
2381
3458
  "application/json": {
2382
3459
  "schema": {
2383
- "$ref": "#/components/schemas/tender"
3460
+ "$ref": "#/components/schemas/tenderView"
2384
3461
  }
2385
3462
  }
2386
3463
  }
@@ -2392,70 +3469,53 @@
2392
3469
  "security": [
2393
3470
  {
2394
3471
  "Implicit": [
2395
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
3472
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
2396
3473
  ]
3474
+ },
3475
+ {
3476
+ "ApiKey": []
2397
3477
  }
2398
3478
  ]
2399
3479
  }
2400
3480
  },
2401
- "/v1.0/tenders/{id}/consultants": {
3481
+ "/v1.0/tenders/backfill-slugs": {
2402
3482
  "post": {
2403
3483
  "tags": [
2404
3484
  "Tenders"
2405
3485
  ],
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
- },
3486
+ "summary": "Assign a slug to every tender that doesn't have one yet. Idempotent safe to re-run.",
3487
+ "operationId": "BackfillTenderSlugs",
2428
3488
  "responses": {
2429
3489
  "200": {
2430
- "description": "Payload of Tender",
3490
+ "description": "Payload of BackfillSlugsResult",
2431
3491
  "content": {
2432
3492
  "application/json": {
2433
3493
  "schema": {
2434
- "$ref": "#/components/schemas/tender"
3494
+ "$ref": "#/components/schemas/backfillSlugsResult"
2435
3495
  }
2436
3496
  }
2437
3497
  }
2438
- },
2439
- "404": {
2440
- "description": "No description"
2441
3498
  }
2442
3499
  },
2443
3500
  "security": [
2444
3501
  {
2445
3502
  "Implicit": [
2446
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
3503
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
2447
3504
  ]
3505
+ },
3506
+ {
3507
+ "ApiKey": []
2448
3508
  }
2449
3509
  ]
2450
3510
  }
2451
3511
  },
2452
- "/v1.0/tenders/{id}/slack-messages": {
3512
+ "/v1.0/tenders/{id}/reingest": {
2453
3513
  "post": {
2454
3514
  "tags": [
2455
3515
  "Tenders"
2456
3516
  ],
2457
- "summary": "Queue a Slack message for a tender (Service Bus notifications-function).",
2458
- "operationId": "SendTenderSlackMessage",
3517
+ "summary": "Re-run the ingestion pipeline on an existing tender, re-parsing documents and refreshing AI match / summary / classification.",
3518
+ "operationId": "ReingestTender",
2459
3519
  "parameters": [
2460
3520
  {
2461
3521
  "name": "id",
@@ -2466,23 +3526,17 @@
2466
3526
  }
2467
3527
  }
2468
3528
  ],
2469
- "requestBody": {
2470
- "content": {
2471
- "application/json": {
2472
- "schema": {
2473
- "$ref": "#/components/schemas/sendTenderSlackMessageRequest"
3529
+ "responses": {
3530
+ "200": {
3531
+ "description": "Payload of AgentJob",
3532
+ "content": {
3533
+ "application/json": {
3534
+ "schema": {
3535
+ "$ref": "#/components/schemas/agentJob"
3536
+ }
2474
3537
  }
2475
3538
  }
2476
3539
  },
2477
- "required": true
2478
- },
2479
- "responses": {
2480
- "204": {
2481
- "description": "No description"
2482
- },
2483
- "400": {
2484
- "description": "No description"
2485
- },
2486
3540
  "404": {
2487
3541
  "description": "No description"
2488
3542
  }
@@ -2490,19 +3544,53 @@
2490
3544
  "security": [
2491
3545
  {
2492
3546
  "Implicit": [
2493
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
3547
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
2494
3548
  ]
3549
+ },
3550
+ {
3551
+ "ApiKey": []
2495
3552
  }
2496
3553
  ]
2497
3554
  }
2498
3555
  },
2499
- "/v1.0/tenders/{id}/consultants/{email}": {
2500
- "delete": {
3556
+ "/v1.0/tenders/reingest-failed": {
3557
+ "post": {
2501
3558
  "tags": [
2502
3559
  "Tenders"
2503
3560
  ],
2504
- "summary": "Remove a consultant assignment from a tender. No-op if the email isn't assigned.",
2505
- "operationId": "UnassignConsultant",
3561
+ "summary": "Re-run ingestion on every tender stuck in a failed state whose deadline has not passed. Recovers tenders left broken by an earlier ingestion outage; posts to the sales feed and matches consultants as normal.",
3562
+ "operationId": "ReingestFailedTenders",
3563
+ "responses": {
3564
+ "200": {
3565
+ "description": "Payload of ReingestFailedResult",
3566
+ "content": {
3567
+ "application/json": {
3568
+ "schema": {
3569
+ "$ref": "#/components/schemas/reingestFailedResult"
3570
+ }
3571
+ }
3572
+ }
3573
+ }
3574
+ },
3575
+ "security": [
3576
+ {
3577
+ "Implicit": [
3578
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
3579
+ ]
3580
+ },
3581
+ {
3582
+ "ApiKey": []
3583
+ }
3584
+ ]
3585
+ }
3586
+ },
3587
+ "/v1.0/tenders/{id}/jobs/{jobId}/snapshot": {
3588
+ "get": {
3589
+ "tags": [
3590
+ "Tenders"
3591
+ ],
3592
+ "summary": "Return the tender as it looked right after a given agent job ran (time-travel view).",
3593
+ "operationId": "GetTenderJobSnapshot",
2506
3594
  "parameters": [
2507
3595
  {
2508
3596
  "name": "id",
@@ -2513,7 +3601,7 @@
2513
3601
  }
2514
3602
  },
2515
3603
  {
2516
- "name": "email",
3604
+ "name": "jobId",
2517
3605
  "in": "path",
2518
3606
  "required": true,
2519
3607
  "schema": {
@@ -2523,11 +3611,11 @@
2523
3611
  ],
2524
3612
  "responses": {
2525
3613
  "200": {
2526
- "description": "Payload of Tender",
3614
+ "description": "Payload of TenderView",
2527
3615
  "content": {
2528
3616
  "application/json": {
2529
3617
  "schema": {
2530
- "$ref": "#/components/schemas/tender"
3618
+ "$ref": "#/components/schemas/tenderView"
2531
3619
  }
2532
3620
  }
2533
3621
  }
@@ -2539,8 +3627,11 @@
2539
3627
  "security": [
2540
3628
  {
2541
3629
  "Implicit": [
2542
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
3630
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
2543
3631
  ]
3632
+ },
3633
+ {
3634
+ "ApiKey": []
2544
3635
  }
2545
3636
  ]
2546
3637
  }
@@ -2589,8 +3680,11 @@
2589
3680
  "security": [
2590
3681
  {
2591
3682
  "Implicit": [
2592
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
3683
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
2593
3684
  ]
3685
+ },
3686
+ {
3687
+ "ApiKey": []
2594
3688
  }
2595
3689
  ]
2596
3690
  }
@@ -2613,7 +3707,17 @@
2613
3707
  }
2614
3708
  }
2615
3709
  }
2616
- }
3710
+ },
3711
+ "security": [
3712
+ {
3713
+ "Implicit": [
3714
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
3715
+ ]
3716
+ },
3717
+ {
3718
+ "ApiKey": []
3719
+ }
3720
+ ]
2617
3721
  }
2618
3722
  },
2619
3723
  "/v1.0/admin/reprocess-matches": {
@@ -2648,8 +3752,11 @@
2648
3752
  "security": [
2649
3753
  {
2650
3754
  "Implicit": [
2651
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
3755
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
2652
3756
  ]
3757
+ },
3758
+ {
3759
+ "ApiKey": []
2653
3760
  }
2654
3761
  ]
2655
3762
  }
@@ -2713,8 +3820,11 @@
2713
3820
  "security": [
2714
3821
  {
2715
3822
  "Implicit": [
2716
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
3823
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
2717
3824
  ]
3825
+ },
3826
+ {
3827
+ "ApiKey": []
2718
3828
  }
2719
3829
  ]
2720
3830
  }
@@ -2730,8 +3840,11 @@
2730
3840
  "security": [
2731
3841
  {
2732
3842
  "Implicit": [
2733
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default"
3843
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default"
2734
3844
  ]
3845
+ },
3846
+ {
3847
+ "ApiKey": []
2735
3848
  }
2736
3849
  ]
2737
3850
  }
@@ -2951,6 +4064,46 @@
2951
4064
  }
2952
4065
  }
2953
4066
  },
4067
+ "backupSummary": {
4068
+ "type": "object",
4069
+ "properties": {
4070
+ "blobAccount": {
4071
+ "type": "string"
4072
+ },
4073
+ "container": {
4074
+ "type": "string"
4075
+ },
4076
+ "prefix": {
4077
+ "type": "string"
4078
+ },
4079
+ "containers": {
4080
+ "type": "array",
4081
+ "items": {
4082
+ "$ref": "#/components/schemas/containerBackup"
4083
+ }
4084
+ },
4085
+ "documentsCopied": {
4086
+ "type": "integer",
4087
+ "format": "int32"
4088
+ },
4089
+ "documentsBytes": {
4090
+ "type": "integer",
4091
+ "format": "int64"
4092
+ },
4093
+ "documentsFailures": {
4094
+ "type": "integer",
4095
+ "format": "int32"
4096
+ },
4097
+ "startedAt": {
4098
+ "type": "string",
4099
+ "format": "date-time"
4100
+ },
4101
+ "completedAt": {
4102
+ "type": "string",
4103
+ "format": "date-time"
4104
+ }
4105
+ }
4106
+ },
2954
4107
  "bulkDeleteJobError": {
2955
4108
  "type": "object",
2956
4109
  "properties": {
@@ -3014,6 +4167,45 @@
3014
4167
  }
3015
4168
  }
3016
4169
  },
4170
+ "consultantCvVariantView": {
4171
+ "type": "object",
4172
+ "properties": {
4173
+ "consultantEmail": {
4174
+ "type": "string",
4175
+ "nullable": true
4176
+ },
4177
+ "consultantName": {
4178
+ "type": "string",
4179
+ "nullable": true
4180
+ },
4181
+ "proposalId": {
4182
+ "type": "string",
4183
+ "nullable": true
4184
+ },
4185
+ "userId": {
4186
+ "type": "string",
4187
+ "nullable": true
4188
+ },
4189
+ "mainCvId": {
4190
+ "type": "string",
4191
+ "nullable": true
4192
+ },
4193
+ "variantCvId": {
4194
+ "type": "string",
4195
+ "nullable": true
4196
+ },
4197
+ "createdAt": {
4198
+ "type": "string",
4199
+ "format": "date-time",
4200
+ "nullable": true
4201
+ },
4202
+ "promotedAt": {
4203
+ "type": "string",
4204
+ "format": "date-time",
4205
+ "nullable": true
4206
+ }
4207
+ }
4208
+ },
3017
4209
  "consultantMatch": {
3018
4210
  "type": "object",
3019
4211
  "properties": {
@@ -3021,6 +4213,10 @@
3021
4213
  "type": "string",
3022
4214
  "nullable": true
3023
4215
  },
4216
+ "businessId": {
4217
+ "type": "string",
4218
+ "nullable": true
4219
+ },
3024
4220
  "name": {
3025
4221
  "type": "string",
3026
4222
  "nullable": true
@@ -3056,6 +4252,15 @@
3056
4252
  "type": "boolean",
3057
4253
  "nullable": true
3058
4254
  },
4255
+ "dismissed": {
4256
+ "type": "boolean",
4257
+ "nullable": true
4258
+ },
4259
+ "dismissedAt": {
4260
+ "type": "string",
4261
+ "format": "date-time",
4262
+ "nullable": true
4263
+ },
3059
4264
  "fitExplanation": {
3060
4265
  "type": "string",
3061
4266
  "nullable": true
@@ -3076,6 +4281,11 @@
3076
4281
  "type": "string",
3077
4282
  "format": "date-time",
3078
4283
  "nullable": true
4284
+ },
4285
+ "consultantChannelNotifiedAt": {
4286
+ "type": "string",
4287
+ "format": "date-time",
4288
+ "nullable": true
3079
4289
  }
3080
4290
  }
3081
4291
  },
@@ -3141,6 +4351,25 @@
3141
4351
  }
3142
4352
  }
3143
4353
  },
4354
+ "containerBackup": {
4355
+ "type": "object",
4356
+ "properties": {
4357
+ "name": {
4358
+ "type": "string"
4359
+ },
4360
+ "blobPath": {
4361
+ "type": "string"
4362
+ },
4363
+ "itemCount": {
4364
+ "type": "integer",
4365
+ "format": "int32"
4366
+ },
4367
+ "compressedBytes": {
4368
+ "type": "integer",
4369
+ "format": "int64"
4370
+ }
4371
+ }
4372
+ },
3144
4373
  "crawlActivityResponse": {
3145
4374
  "type": "object",
3146
4375
  "properties": {
@@ -3352,6 +4581,119 @@
3352
4581
  }
3353
4582
  }
3354
4583
  },
4584
+ "createBackupRequest": {
4585
+ "type": "object",
4586
+ "properties": {
4587
+ "includeDocuments": {
4588
+ "type": "boolean"
4589
+ }
4590
+ }
4591
+ },
4592
+ "crmOpportunity": {
4593
+ "type": "object",
4594
+ "properties": {
4595
+ "id": {
4596
+ "type": "string"
4597
+ },
4598
+ "name": {
4599
+ "type": "string"
4600
+ },
4601
+ "stage": {
4602
+ "type": "string"
4603
+ },
4604
+ "closeDate": {
4605
+ "type": "string",
4606
+ "format": "date-time",
4607
+ "nullable": true
4608
+ },
4609
+ "isClosed": {
4610
+ "type": "boolean"
4611
+ },
4612
+ "isWon": {
4613
+ "type": "boolean"
4614
+ },
4615
+ "amount": {
4616
+ "type": "number",
4617
+ "format": "double",
4618
+ "nullable": true
4619
+ },
4620
+ "account": {
4621
+ "$ref": "#/components/schemas/crmParty"
4622
+ },
4623
+ "owner": {
4624
+ "$ref": "#/components/schemas/crmParty"
4625
+ },
4626
+ "tenderId": {
4627
+ "type": "string"
4628
+ },
4629
+ "locator": {
4630
+ "$ref": "#/components/schemas/crmRecordLocator"
4631
+ }
4632
+ }
4633
+ },
4634
+ "crmParty": {
4635
+ "type": "object",
4636
+ "properties": {
4637
+ "id": {
4638
+ "type": "string"
4639
+ },
4640
+ "name": {
4641
+ "type": "string"
4642
+ },
4643
+ "email": {
4644
+ "type": "string"
4645
+ }
4646
+ }
4647
+ },
4648
+ "crmRecordLocator": {
4649
+ "type": "object",
4650
+ "properties": {
4651
+ "type": {
4652
+ "type": "string"
4653
+ },
4654
+ "url": {
4655
+ "type": "string"
4656
+ }
4657
+ }
4658
+ },
4659
+ "crmRefreshResult": {
4660
+ "type": "object",
4661
+ "properties": {
4662
+ "checked": {
4663
+ "type": "integer",
4664
+ "format": "int32"
4665
+ },
4666
+ "updated": {
4667
+ "type": "integer",
4668
+ "format": "int32"
4669
+ }
4670
+ }
4671
+ },
4672
+ "crmStage": {
4673
+ "type": "object",
4674
+ "properties": {
4675
+ "label": {
4676
+ "type": "string"
4677
+ },
4678
+ "apiName": {
4679
+ "type": "string"
4680
+ },
4681
+ "isActive": {
4682
+ "type": "boolean"
4683
+ },
4684
+ "isClosed": {
4685
+ "type": "boolean"
4686
+ },
4687
+ "isWon": {
4688
+ "type": "boolean"
4689
+ },
4690
+ "sortOrder": {
4691
+ "type": "integer",
4692
+ "format": "int32",
4693
+ "nullable": true
4694
+ }
4695
+ }
4696
+ },
3355
4697
  "deleteFailedTendersResponse": {
3356
4698
  "type": "object",
3357
4699
  "properties": {
@@ -3387,6 +4729,34 @@
3387
4729
  }
3388
4730
  }
3389
4731
  },
4732
+ "documentAccessDecision": {
4733
+ "type": "object",
4734
+ "properties": {
4735
+ "status": {
4736
+ "type": "string"
4737
+ },
4738
+ "decisionNote": {
4739
+ "type": "string"
4740
+ }
4741
+ }
4742
+ },
4743
+ "documentAccessRequest": {
4744
+ "type": "object",
4745
+ "properties": {
4746
+ "note": {
4747
+ "type": "string"
4748
+ }
4749
+ }
4750
+ },
4751
+ "ensureCvVariantRequest": {
4752
+ "type": "object",
4753
+ "properties": {
4754
+ "consultantName": {
4755
+ "type": "string",
4756
+ "nullable": true
4757
+ }
4758
+ }
4759
+ },
3390
4760
  "externalSourceRef": {
3391
4761
  "type": "object",
3392
4762
  "properties": {
@@ -3583,6 +4953,20 @@
3583
4953
  }
3584
4954
  }
3585
4955
  },
4956
+ "integrationHealthResult": {
4957
+ "type": "object",
4958
+ "properties": {
4959
+ "key": {
4960
+ "type": "string"
4961
+ },
4962
+ "status": {
4963
+ "type": "string"
4964
+ },
4965
+ "message": {
4966
+ "type": "string"
4967
+ }
4968
+ }
4969
+ },
3586
4970
  "listingCandidate": {
3587
4971
  "type": "object",
3588
4972
  "properties": {
@@ -3703,138 +5087,124 @@
3703
5087
  },
3704
5088
  "nullable": true
3705
5089
  },
3706
- "salesforceAttributes": {
5090
+ "reingestFailedResult": {
3707
5091
  "type": "object",
3708
5092
  "properties": {
3709
- "type": {
3710
- "type": "string",
3711
- "nullable": true
5093
+ "totalFailed": {
5094
+ "type": "integer",
5095
+ "format": "int32"
3712
5096
  },
3713
- "url": {
3714
- "type": "string",
3715
- "nullable": true
5097
+ "actionable": {
5098
+ "type": "integer",
5099
+ "format": "int32"
5100
+ },
5101
+ "scheduled": {
5102
+ "type": "integer",
5103
+ "format": "int32"
3716
5104
  }
3717
- },
3718
- "nullable": true
5105
+ }
3719
5106
  },
3720
- "salesforceOpportunity": {
5107
+ "salesforceBackupSummary": {
3721
5108
  "type": "object",
3722
5109
  "properties": {
3723
- "attributes": {
3724
- "$ref": "#/components/schemas/salesforceAttributes"
5110
+ "blobAccount": {
5111
+ "type": "string"
3725
5112
  },
3726
- "Id": {
3727
- "type": "string",
3728
- "nullable": true
5113
+ "container": {
5114
+ "type": "string"
3729
5115
  },
3730
- "Name": {
3731
- "type": "string",
3732
- "nullable": true
5116
+ "prefix": {
5117
+ "type": "string"
3733
5118
  },
3734
- "StageName": {
3735
- "type": "string",
3736
- "nullable": true
5119
+ "objectsDiscovered": {
5120
+ "type": "integer",
5121
+ "format": "int32"
3737
5122
  },
3738
- "CloseDate": {
3739
- "type": "string",
3740
- "format": "date-time",
3741
- "nullable": true
5123
+ "objectsBackedUp": {
5124
+ "type": "integer",
5125
+ "format": "int32"
3742
5126
  },
3743
- "IsClosed": {
3744
- "type": "boolean",
3745
- "nullable": true
5127
+ "objectsFailed": {
5128
+ "type": "integer",
5129
+ "format": "int32"
3746
5130
  },
3747
- "IsWon": {
3748
- "type": "boolean",
3749
- "nullable": true
5131
+ "recordsExported": {
5132
+ "type": "integer",
5133
+ "format": "int64"
3750
5134
  },
3751
- "Amount": {
3752
- "type": "number",
3753
- "format": "double",
3754
- "nullable": true
5135
+ "compressedBytes": {
5136
+ "type": "integer",
5137
+ "format": "int64"
3755
5138
  },
3756
- "Account": {
3757
- "$ref": "#/components/schemas/salesforceReference"
5139
+ "manifestPath": {
5140
+ "type": "string"
3758
5141
  },
3759
- "Owner": {
3760
- "$ref": "#/components/schemas/salesforceReference"
5142
+ "objects": {
5143
+ "type": "array",
5144
+ "items": {
5145
+ "$ref": "#/components/schemas/salesforceObjectBackup"
5146
+ }
3761
5147
  },
3762
- "Snokam_Tender_Id__c": {
5148
+ "startedAt": {
3763
5149
  "type": "string",
3764
- "nullable": true
5150
+ "format": "date-time"
5151
+ },
5152
+ "completedAt": {
5153
+ "type": "string",
5154
+ "format": "date-time"
3765
5155
  }
3766
5156
  }
3767
5157
  },
3768
- "salesforceOpportunityStage": {
5158
+ "salesforceObjectBackup": {
3769
5159
  "type": "object",
3770
5160
  "properties": {
3771
- "MasterLabel": {
3772
- "type": "string",
3773
- "nullable": true
3774
- },
3775
- "ApiName": {
3776
- "type": "string",
3777
- "nullable": true
5161
+ "name": {
5162
+ "type": "string"
3778
5163
  },
3779
- "IsActive": {
3780
- "type": "boolean",
3781
- "nullable": true
5164
+ "blobPath": {
5165
+ "type": "string"
3782
5166
  },
3783
- "IsClosed": {
3784
- "type": "boolean",
3785
- "nullable": true
5167
+ "jobId": {
5168
+ "type": "string"
3786
5169
  },
3787
- "IsWon": {
3788
- "type": "boolean",
3789
- "nullable": true
5170
+ "records": {
5171
+ "type": "integer",
5172
+ "format": "int64"
3790
5173
  },
3791
- "SortOrder": {
5174
+ "compressedBytes": {
3792
5175
  "type": "integer",
3793
- "format": "int32",
3794
- "nullable": true
5176
+ "format": "int64"
5177
+ },
5178
+ "deletedRecords": {
5179
+ "type": "boolean"
5180
+ },
5181
+ "error": {
5182
+ "type": "string"
3795
5183
  }
3796
5184
  }
3797
5185
  },
3798
- "salesforceReference": {
5186
+ "sendTenderSlackMessageRequest": {
3799
5187
  "type": "object",
3800
5188
  "properties": {
3801
- "Name": {
3802
- "type": "string",
3803
- "nullable": true
3804
- },
3805
- "Id": {
5189
+ "employeeName": {
3806
5190
  "type": "string",
3807
5191
  "nullable": true
3808
5192
  },
3809
- "Email": {
5193
+ "message": {
3810
5194
  "type": "string",
3811
5195
  "nullable": true
3812
5196
  }
3813
- },
3814
- "nullable": true
3815
- },
3816
- "salesforceRefreshResult": {
3817
- "type": "object",
3818
- "properties": {
3819
- "checked": {
3820
- "type": "integer",
3821
- "format": "int32"
3822
- },
3823
- "updated": {
3824
- "type": "integer",
3825
- "format": "int32"
3826
- }
3827
5197
  }
3828
5198
  },
3829
- "sendTenderSlackMessageRequest": {
5199
+ "setMatchInterestRequest": {
3830
5200
  "type": "object",
3831
5201
  "properties": {
3832
- "employeeName": {
5202
+ "email": {
3833
5203
  "type": "string",
3834
5204
  "nullable": true
3835
5205
  },
3836
- "message": {
3837
- "type": "string",
5206
+ "interested": {
5207
+ "type": "boolean",
3838
5208
  "nullable": true
3839
5209
  }
3840
5210
  }
@@ -3878,94 +5248,71 @@
3878
5248
  }
3879
5249
  }
3880
5250
  },
3881
- "tender": {
5251
+ "tenderApplication": {
3882
5252
  "type": "object",
3883
5253
  "properties": {
3884
- "id": {
5254
+ "status": {
3885
5255
  "type": "string",
3886
5256
  "nullable": true
3887
5257
  },
3888
- "type": {
5258
+ "submittedAt": {
3889
5259
  "type": "string",
5260
+ "format": "date-time",
3890
5261
  "nullable": true
3891
5262
  },
3892
- "slug": {
5263
+ "submittedBy": {
3893
5264
  "type": "string",
3894
5265
  "nullable": true
3895
5266
  },
3896
- "source": {
3897
- "$ref": "#/components/schemas/tenderSource"
3898
- },
3899
- "info": {
3900
- "$ref": "#/components/schemas/tenderInfo"
3901
- },
3902
- "dates": {
3903
- "$ref": "#/components/schemas/tenderDates"
3904
- },
3905
- "status": {
3906
- "$ref": "#/components/schemas/tenderStatus"
3907
- },
3908
- "classification": {
3909
- "$ref": "#/components/schemas/tenderClassification"
3910
- },
3911
- "parser": {
3912
- "$ref": "#/components/schemas/tenderParser"
3913
- },
3914
- "todos": {
3915
- "type": "array",
3916
- "items": {
3917
- "$ref": "#/components/schemas/tenderTodo"
3918
- },
3919
- "nullable": true
3920
- },
3921
- "documents": {
5267
+ "consultantEmails": {
3922
5268
  "type": "array",
3923
5269
  "items": {
3924
- "$ref": "#/components/schemas/tenderDocument"
5270
+ "type": "string"
3925
5271
  },
3926
5272
  "nullable": true
3927
5273
  },
3928
- "consultantMatches": {
3929
- "type": "array",
3930
- "items": {
3931
- "$ref": "#/components/schemas/consultantMatch"
3932
- },
5274
+ "note": {
5275
+ "type": "string",
3933
5276
  "nullable": true
3934
5277
  },
3935
- "assignedConsultants": {
3936
- "type": "array",
3937
- "items": {
3938
- "$ref": "#/components/schemas/assignedConsultant"
3939
- },
5278
+ "decidedAt": {
5279
+ "type": "string",
5280
+ "format": "date-time",
3940
5281
  "nullable": true
3941
5282
  },
3942
- "cvProposal": {
3943
- "$ref": "#/components/schemas/tenderCvProposal"
3944
- },
3945
- "audit": {
3946
- "$ref": "#/components/schemas/tenderAudit"
3947
- },
3948
- "description": {
5283
+ "decidedBy": {
3949
5284
  "type": "string",
3950
5285
  "nullable": true
3951
5286
  },
3952
- "summary": {
5287
+ "decisionNote": {
3953
5288
  "type": "string",
3954
5289
  "nullable": true
5290
+ }
5291
+ },
5292
+ "nullable": true
5293
+ },
5294
+ "tenderApplicationDecision": {
5295
+ "type": "object",
5296
+ "properties": {
5297
+ "status": {
5298
+ "type": "string"
3955
5299
  },
3956
- "timeline": {
5300
+ "decisionNote": {
5301
+ "type": "string"
5302
+ }
5303
+ }
5304
+ },
5305
+ "tenderApplicationRequest": {
5306
+ "type": "object",
5307
+ "properties": {
5308
+ "consultantEmails": {
3957
5309
  "type": "array",
3958
5310
  "items": {
3959
- "$ref": "#/components/schemas/timelineEvent"
3960
- },
3961
- "nullable": true
3962
- },
3963
- "blobContainer": {
3964
- "type": "string",
3965
- "nullable": true
5311
+ "type": "string"
5312
+ }
3966
5313
  },
3967
- "salesforce": {
3968
- "$ref": "#/components/schemas/tenderSalesforce"
5314
+ "note": {
5315
+ "type": "string"
3969
5316
  }
3970
5317
  }
3971
5318
  },
@@ -4222,6 +5569,95 @@
4222
5569
  }
4223
5570
  }
4224
5571
  },
5572
+ "tenderDocumentAccess": {
5573
+ "type": "object",
5574
+ "properties": {
5575
+ "status": {
5576
+ "type": "string",
5577
+ "nullable": true
5578
+ },
5579
+ "requestedAt": {
5580
+ "type": "string",
5581
+ "format": "date-time",
5582
+ "nullable": true
5583
+ },
5584
+ "requestedBy": {
5585
+ "type": "string",
5586
+ "nullable": true
5587
+ },
5588
+ "note": {
5589
+ "type": "string",
5590
+ "nullable": true
5591
+ },
5592
+ "decidedAt": {
5593
+ "type": "string",
5594
+ "format": "date-time",
5595
+ "nullable": true
5596
+ },
5597
+ "decidedBy": {
5598
+ "type": "string",
5599
+ "nullable": true
5600
+ },
5601
+ "decisionNote": {
5602
+ "type": "string",
5603
+ "nullable": true
5604
+ }
5605
+ },
5606
+ "nullable": true
5607
+ },
5608
+ "tenderEngagement": {
5609
+ "type": "object",
5610
+ "properties": {
5611
+ "id": {
5612
+ "type": "string",
5613
+ "nullable": true
5614
+ },
5615
+ "type": {
5616
+ "type": "string",
5617
+ "nullable": true
5618
+ },
5619
+ "businessId": {
5620
+ "type": "string",
5621
+ "nullable": true
5622
+ },
5623
+ "tenderId": {
5624
+ "type": "string",
5625
+ "nullable": true
5626
+ },
5627
+ "consultantMatches": {
5628
+ "type": "array",
5629
+ "items": {
5630
+ "$ref": "#/components/schemas/consultantMatch"
5631
+ },
5632
+ "nullable": true
5633
+ },
5634
+ "assignedConsultants": {
5635
+ "type": "array",
5636
+ "items": {
5637
+ "$ref": "#/components/schemas/assignedConsultant"
5638
+ },
5639
+ "nullable": true
5640
+ },
5641
+ "cvProposal": {
5642
+ "$ref": "#/components/schemas/tenderCvProposal"
5643
+ },
5644
+ "salesforce": {
5645
+ "$ref": "#/components/schemas/tenderSalesforce"
5646
+ },
5647
+ "documentAccess": {
5648
+ "$ref": "#/components/schemas/tenderDocumentAccess"
5649
+ },
5650
+ "application": {
5651
+ "$ref": "#/components/schemas/tenderApplication"
5652
+ },
5653
+ "audit": {
5654
+ "$ref": "#/components/schemas/tenderAudit"
5655
+ },
5656
+ "hasGrantedDocumentAccess": {
5657
+ "type": "boolean"
5658
+ }
5659
+ }
5660
+ },
4225
5661
  "tenderInfo": {
4226
5662
  "type": "object",
4227
5663
  "properties": {
@@ -4454,6 +5890,104 @@
4454
5890
  }
4455
5891
  }
4456
5892
  },
5893
+ "tenderView": {
5894
+ "type": "object",
5895
+ "properties": {
5896
+ "id": {
5897
+ "type": "string",
5898
+ "nullable": true
5899
+ },
5900
+ "type": {
5901
+ "type": "string",
5902
+ "nullable": true
5903
+ },
5904
+ "slug": {
5905
+ "type": "string",
5906
+ "nullable": true
5907
+ },
5908
+ "source": {
5909
+ "$ref": "#/components/schemas/tenderSource"
5910
+ },
5911
+ "info": {
5912
+ "$ref": "#/components/schemas/tenderInfo"
5913
+ },
5914
+ "dates": {
5915
+ "$ref": "#/components/schemas/tenderDates"
5916
+ },
5917
+ "status": {
5918
+ "$ref": "#/components/schemas/tenderStatus"
5919
+ },
5920
+ "classification": {
5921
+ "$ref": "#/components/schemas/tenderClassification"
5922
+ },
5923
+ "parser": {
5924
+ "$ref": "#/components/schemas/tenderParser"
5925
+ },
5926
+ "todos": {
5927
+ "type": "array",
5928
+ "items": {
5929
+ "$ref": "#/components/schemas/tenderTodo"
5930
+ },
5931
+ "nullable": true
5932
+ },
5933
+ "documents": {
5934
+ "type": "array",
5935
+ "items": {
5936
+ "$ref": "#/components/schemas/tenderDocument"
5937
+ },
5938
+ "nullable": true
5939
+ },
5940
+ "businessIds": {
5941
+ "type": "array",
5942
+ "items": {
5943
+ "type": "string"
5944
+ },
5945
+ "nullable": true
5946
+ },
5947
+ "consultantMatches": {
5948
+ "type": "array",
5949
+ "items": {
5950
+ "$ref": "#/components/schemas/consultantMatch"
5951
+ },
5952
+ "nullable": true
5953
+ },
5954
+ "assignedConsultants": {
5955
+ "type": "array",
5956
+ "items": {
5957
+ "$ref": "#/components/schemas/assignedConsultant"
5958
+ },
5959
+ "nullable": true
5960
+ },
5961
+ "cvProposal": {
5962
+ "$ref": "#/components/schemas/tenderCvProposal"
5963
+ },
5964
+ "audit": {
5965
+ "$ref": "#/components/schemas/tenderAudit"
5966
+ },
5967
+ "description": {
5968
+ "type": "string",
5969
+ "nullable": true
5970
+ },
5971
+ "summary": {
5972
+ "type": "string",
5973
+ "nullable": true
5974
+ },
5975
+ "timeline": {
5976
+ "type": "array",
5977
+ "items": {
5978
+ "$ref": "#/components/schemas/timelineEvent"
5979
+ },
5980
+ "nullable": true
5981
+ },
5982
+ "blobContainer": {
5983
+ "type": "string",
5984
+ "nullable": true
5985
+ },
5986
+ "salesforce": {
5987
+ "$ref": "#/components/schemas/tenderSalesforce"
5988
+ }
5989
+ }
5990
+ },
4457
5991
  "timelineEvent": {
4458
5992
  "type": "object",
4459
5993
  "properties": {
@@ -4521,14 +6055,19 @@
4521
6055
  "type": "oauth2",
4522
6056
  "flows": {
4523
6057
  "implicit": {
4524
- "authorizationUrl": "https://login.microsoftonline.com/81a4f38d-6712-4b65-868b-c3771f9ba91e/oauth2/v2.0/authorize",
4525
- "tokenUrl": "https://login.microsoftonline.com/81a4f38d-6712-4b65-868b-c3771f9ba91e/oauth2/v2.0/token",
4526
- "refreshUrl": "https://login.microsoftonline.com/81a4f38d-6712-4b65-868b-c3771f9ba91e/oauth2/v2.0/token",
6058
+ "authorizationUrl": "https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize",
6059
+ "tokenUrl": "https://login.microsoftonline.com/organizations/oauth2/v2.0/token",
6060
+ "refreshUrl": "https://login.microsoftonline.com/organizations/oauth2/v2.0/token",
4527
6061
  "scopes": {
4528
- "api://7e877854-e62d-4637-a655-1da7141f7ac9/.default": "Default function scope"
6062
+ "api://bb21a8d0-366b-4a95-aa59-dbbf708322d1/.default": "Default function scope"
4529
6063
  }
4530
6064
  }
4531
6065
  }
6066
+ },
6067
+ "ApiKey": {
6068
+ "type": "http",
6069
+ "scheme": "bearer",
6070
+ "bearerFormat": "JWT"
4532
6071
  }
4533
6072
  }
4534
6073
  }