@snokam/mcp-api 0.131.3 → 0.133.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.
@@ -78,47 +78,6 @@
78
78
  ]
79
79
  }
80
80
  },
81
- "/v1.0/tenders/ingest": {
82
- "post": {
83
- "tags": [
84
- "Tenders"
85
- ],
86
- "summary": "Start tender ingestion",
87
- "operationId": "StartTenderIngestion",
88
- "requestBody": {
89
- "content": {
90
- "application/json": {
91
- "schema": {
92
- "$ref": "#/components/schemas/ingestionRequest"
93
- }
94
- }
95
- },
96
- "required": true
97
- },
98
- "responses": {
99
- "202": {
100
- "description": "Payload of Object",
101
- "content": {
102
- "application/json": {
103
- "schema": {
104
- "type": "object"
105
- }
106
- }
107
- }
108
- }
109
- },
110
- "security": [
111
- {
112
- "Implicit": [
113
- "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
114
- ]
115
- },
116
- {
117
- "ApiKey": []
118
- }
119
- ]
120
- }
121
- },
122
81
  "/v1.0/jobs/{jobId}": {
123
82
  "get": {
124
83
  "tags": [
@@ -204,15 +163,25 @@
204
163
  ]
205
164
  }
206
165
  },
207
- "/v1.0/scan/doffin": {
166
+ "/v1.0/tenders/ingest": {
208
167
  "post": {
209
168
  "tags": [
210
- "Scan"
169
+ "Tenders"
211
170
  ],
212
- "summary": "Trigger a Doffin scan immediately",
213
- "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
+ },
214
183
  "responses": {
215
- "200": {
184
+ "202": {
216
185
  "description": "Payload of Object",
217
186
  "content": {
218
187
  "application/json": {
@@ -235,13 +204,52 @@
235
204
  ]
236
205
  }
237
206
  },
238
- "/v1.0/scan/email": {
207
+ "/v1.0/admin/reprocess-emails": {
208
+ "post": {
209
+ "tags": [
210
+ "Admin"
211
+ ],
212
+ "summary": "Re-fetch all emails since N days ago and re-ingest them so raw content is stored as source_email blobs",
213
+ "operationId": "ReprocessEmails",
214
+ "parameters": [
215
+ {
216
+ "name": "daysSince",
217
+ "in": "query",
218
+ "description": "Number of days back to fetch emails (default: 90)",
219
+ "schema": {
220
+ "type": "string"
221
+ }
222
+ }
223
+ ],
224
+ "responses": {
225
+ "200": {
226
+ "description": "Payload of Object",
227
+ "content": {
228
+ "application/json": {
229
+ "schema": {
230
+ "type": "object"
231
+ }
232
+ }
233
+ }
234
+ }
235
+ },
236
+ "security": [
237
+ {
238
+ "Implicit": []
239
+ },
240
+ {
241
+ "ApiKey": []
242
+ }
243
+ ]
244
+ }
245
+ },
246
+ "/v1.0/scan/doffin": {
239
247
  "post": {
240
248
  "tags": [
241
249
  "Scan"
242
250
  ],
243
- "summary": "Trigger an email scan immediately",
244
- "operationId": "TriggerEmailScan",
251
+ "summary": "Trigger a Doffin scan immediately",
252
+ "operationId": "TriggerDoffinScan",
245
253
  "responses": {
246
254
  "200": {
247
255
  "description": "Payload of Object",
@@ -266,13 +274,13 @@
266
274
  ]
267
275
  }
268
276
  },
269
- "/v1.0/scan/sites": {
277
+ "/v1.0/scan/email": {
270
278
  "post": {
271
279
  "tags": [
272
280
  "Scan"
273
281
  ],
274
- "summary": "Trigger an agentic site scan immediately over all configured sources",
275
- "operationId": "TriggerSiteScan",
282
+ "summary": "Trigger an email scan immediately",
283
+ "operationId": "TriggerEmailScan",
276
284
  "responses": {
277
285
  "200": {
278
286
  "description": "Payload of Object",
@@ -297,23 +305,13 @@
297
305
  ]
298
306
  }
299
307
  },
300
- "/v1.0/admin/reprocess-emails": {
308
+ "/v1.0/scan/sites": {
301
309
  "post": {
302
310
  "tags": [
303
- "Admin"
304
- ],
305
- "summary": "Re-fetch all emails since N days ago and re-ingest them so raw content is stored as source_email blobs",
306
- "operationId": "ReprocessEmails",
307
- "parameters": [
308
- {
309
- "name": "daysSince",
310
- "in": "query",
311
- "description": "Number of days back to fetch emails (default: 90)",
312
- "schema": {
313
- "type": "string"
314
- }
315
- }
311
+ "Scan"
316
312
  ],
313
+ "summary": "Trigger an agentic site scan immediately over all configured sources",
314
+ "operationId": "TriggerSiteScan",
317
315
  "responses": {
318
316
  "200": {
319
317
  "description": "Payload of Object",
@@ -328,7 +326,9 @@
328
326
  },
329
327
  "security": [
330
328
  {
331
- "Implicit": []
329
+ "Implicit": [
330
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
331
+ ]
332
332
  },
333
333
  {
334
334
  "ApiKey": []
@@ -640,23 +640,30 @@
640
640
  ]
641
641
  }
642
642
  },
643
- "/v1.0/crawl/sources": {
644
- "get": {
643
+ "/v1.0/crawl/sources/{name}/failed-tenders": {
644
+ "delete": {
645
645
  "tags": [
646
646
  "Crawl"
647
647
  ],
648
- "summary": "List configured crawl sources together with their learned patterns and last-activity timestamp",
649
- "operationId": "ListCrawlSources",
648
+ "summary": "Delete all tenders for this source whose ingestion failed (parse-failed / zero confidence)",
649
+ "operationId": "DeleteFailedTenders",
650
+ "parameters": [
651
+ {
652
+ "name": "name",
653
+ "in": "path",
654
+ "required": true,
655
+ "schema": {
656
+ "type": "string"
657
+ }
658
+ }
659
+ ],
650
660
  "responses": {
651
661
  "200": {
652
- "description": "Payload of Array of CrawlSourceWithPattern",
662
+ "description": "Payload of DeleteFailedTendersResponse",
653
663
  "content": {
654
664
  "application/json": {
655
665
  "schema": {
656
- "type": "array",
657
- "items": {
658
- "$ref": "#/components/schemas/crawlSourceWithPattern"
659
- }
666
+ "$ref": "#/components/schemas/deleteFailedTendersResponse"
660
667
  }
661
668
  }
662
669
  }
@@ -674,16 +681,16 @@
674
681
  ]
675
682
  }
676
683
  },
677
- "/v1.0/crawl/sources/{name}": {
678
- "put": {
684
+ "/v1.0/crawl/jobs/{jobId}/retry": {
685
+ "post": {
679
686
  "tags": [
680
687
  "Crawl"
681
688
  ],
682
- "summary": "Create or update a crawl source",
683
- "operationId": "UpsertCrawlSource",
689
+ "summary": "Delete the tender (if any) and enqueue a fresh ingestion for the same URL/title/externalId",
690
+ "operationId": "RetryCrawlJob",
684
691
  "parameters": [
685
692
  {
686
- "name": "name",
693
+ "name": "jobId",
687
694
  "in": "path",
688
695
  "required": true,
689
696
  "schema": {
@@ -691,59 +698,21 @@
691
698
  }
692
699
  }
693
700
  ],
694
- "requestBody": {
695
- "content": {
696
- "application/json": {
697
- "schema": {
698
- "$ref": "#/components/schemas/crawlSourceUpsertRequest"
699
- }
700
- }
701
- }
702
- },
703
701
  "responses": {
704
702
  "200": {
705
- "description": "Payload of CrawlSourceConfig",
703
+ "description": "Payload of AgentJob",
706
704
  "content": {
707
705
  "application/json": {
708
706
  "schema": {
709
- "$ref": "#/components/schemas/crawlSourceConfig"
707
+ "$ref": "#/components/schemas/agentJob"
710
708
  }
711
709
  }
712
710
  }
713
711
  },
714
712
  "400": {
715
713
  "description": "No description"
716
- }
717
- },
718
- "security": [
719
- {
720
- "Implicit": [
721
- "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
722
- ]
723
714
  },
724
- {
725
- "ApiKey": []
726
- }
727
- ]
728
- },
729
- "delete": {
730
- "tags": [
731
- "Crawl"
732
- ],
733
- "summary": "Delete a crawl source and its cached pattern",
734
- "operationId": "DeleteCrawlSource",
735
- "parameters": [
736
- {
737
- "name": "name",
738
- "in": "path",
739
- "required": true,
740
- "schema": {
741
- "type": "string"
742
- }
743
- }
744
- ],
745
- "responses": {
746
- "204": {
715
+ "404": {
747
716
  "description": "No description"
748
717
  }
749
718
  },
@@ -759,16 +728,16 @@
759
728
  ]
760
729
  }
761
730
  },
762
- "/v1.0/crawl/sources/{name}/pattern": {
763
- "delete": {
731
+ "/v1.0/crawl/jobs/{jobId}/cancel": {
732
+ "post": {
764
733
  "tags": [
765
734
  "Crawl"
766
735
  ],
767
- "summary": "Drop the cached URL pattern for a source so the next scan re-bootstraps it",
768
- "operationId": "InvalidateCrawlPattern",
736
+ "summary": "Terminate the running orchestration and mark the job as failed (\"Cancelled by operator\")",
737
+ "operationId": "CancelCrawlJob",
769
738
  "parameters": [
770
739
  {
771
- "name": "name",
740
+ "name": "jobId",
772
741
  "in": "path",
773
742
  "required": true,
774
743
  "schema": {
@@ -777,7 +746,20 @@
777
746
  }
778
747
  ],
779
748
  "responses": {
780
- "204": {
749
+ "200": {
750
+ "description": "Payload of AgentJob",
751
+ "content": {
752
+ "application/json": {
753
+ "schema": {
754
+ "$ref": "#/components/schemas/agentJob"
755
+ }
756
+ }
757
+ }
758
+ },
759
+ "404": {
760
+ "description": "No description"
761
+ },
762
+ "409": {
781
763
  "description": "No description"
782
764
  }
783
765
  },
@@ -793,32 +775,35 @@
793
775
  ]
794
776
  }
795
777
  },
796
- "/v1.0/crawl/discover-listing": {
778
+ "/v1.0/crawl/jobs/bulk-delete": {
797
779
  "post": {
798
780
  "tags": [
799
781
  "Crawl"
800
782
  ],
801
- "summary": "Given a site homepage or bare domain, locate the tender/project listing page on it",
802
- "operationId": "DiscoverCrawlListing",
783
+ "summary": "Delete a batch of jobs and their backing tenders",
784
+ "operationId": "BulkDeleteCrawlJobs",
803
785
  "requestBody": {
804
786
  "content": {
805
787
  "application/json": {
806
788
  "schema": {
807
- "$ref": "#/components/schemas/discoverListingRequest"
789
+ "$ref": "#/components/schemas/bulkDeleteJobsRequest"
808
790
  }
809
791
  }
810
792
  }
811
793
  },
812
794
  "responses": {
813
795
  "200": {
814
- "description": "Payload of DiscoverListingResponse",
796
+ "description": "Payload of BulkDeleteJobsResponse",
815
797
  "content": {
816
798
  "application/json": {
817
799
  "schema": {
818
- "$ref": "#/components/schemas/discoverListingResponse"
800
+ "$ref": "#/components/schemas/bulkDeleteJobsResponse"
819
801
  }
820
802
  }
821
803
  }
804
+ },
805
+ "400": {
806
+ "description": "No description"
822
807
  }
823
808
  },
824
809
  "security": [
@@ -826,17 +811,20 @@
826
811
  "Implicit": [
827
812
  "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
828
813
  ]
814
+ },
815
+ {
816
+ "ApiKey": []
829
817
  }
830
818
  ]
831
819
  }
832
820
  },
833
- "/v1.0/crawl/sources/{name}/scan": {
834
- "post": {
821
+ "/v1.0/crawl/sources/{name}/jobs": {
822
+ "get": {
835
823
  "tags": [
836
824
  "Crawl"
837
825
  ],
838
- "summary": "Scan one source now and enqueue ingestion jobs for newly discovered notices",
839
- "operationId": "ScanCrawlSource",
826
+ "summary": "Recent ingestion jobs for this source, newest first",
827
+ "operationId": "ListCrawlJobs",
840
828
  "parameters": [
841
829
  {
842
830
  "name": "name",
@@ -845,21 +833,29 @@
845
833
  "schema": {
846
834
  "type": "string"
847
835
  }
836
+ },
837
+ {
838
+ "name": "limit",
839
+ "in": "query",
840
+ "description": "Max jobs to return (default 50)",
841
+ "schema": {
842
+ "type": "string"
843
+ }
848
844
  }
849
845
  ],
850
846
  "responses": {
851
847
  "200": {
852
- "description": "Payload of CrawlScanResponse",
848
+ "description": "Payload of Array of AgentJob",
853
849
  "content": {
854
850
  "application/json": {
855
851
  "schema": {
856
- "$ref": "#/components/schemas/crawlScanResponse"
852
+ "type": "array",
853
+ "items": {
854
+ "$ref": "#/components/schemas/agentJob"
855
+ }
857
856
  }
858
857
  }
859
858
  }
860
- },
861
- "404": {
862
- "description": "No description"
863
859
  }
864
860
  },
865
861
  "security": [
@@ -874,13 +870,13 @@
874
870
  ]
875
871
  }
876
872
  },
877
- "/v1.0/crawl/sources/{name}/failed-tenders": {
878
- "delete": {
873
+ "/v1.0/crawl/sources/{name}/scan": {
874
+ "post": {
879
875
  "tags": [
880
876
  "Crawl"
881
877
  ],
882
- "summary": "Delete all tenders for this source whose ingestion failed (parse-failed / zero confidence)",
883
- "operationId": "DeleteFailedTenders",
878
+ "summary": "Scan one source now and enqueue ingestion jobs for newly discovered notices",
879
+ "operationId": "ScanCrawlSource",
884
880
  "parameters": [
885
881
  {
886
882
  "name": "name",
@@ -893,14 +889,17 @@
893
889
  ],
894
890
  "responses": {
895
891
  "200": {
896
- "description": "Payload of DeleteFailedTendersResponse",
892
+ "description": "Payload of CrawlScanResponse",
897
893
  "content": {
898
894
  "application/json": {
899
895
  "schema": {
900
- "$ref": "#/components/schemas/deleteFailedTendersResponse"
896
+ "$ref": "#/components/schemas/crawlScanResponse"
901
897
  }
902
898
  }
903
899
  }
900
+ },
901
+ "404": {
902
+ "description": "No description"
904
903
  }
905
904
  },
906
905
  "security": [
@@ -1055,16 +1054,50 @@
1055
1054
  ]
1056
1055
  }
1057
1056
  },
1058
- "/v1.0/crawl/jobs/{jobId}/retry": {
1059
- "post": {
1057
+ "/v1.0/crawl/sources": {
1058
+ "get": {
1060
1059
  "tags": [
1061
1060
  "Crawl"
1062
1061
  ],
1063
- "summary": "Delete the tender (if any) and enqueue a fresh ingestion for the same URL/title/externalId",
1064
- "operationId": "RetryCrawlJob",
1062
+ "summary": "List configured crawl sources together with their learned patterns and last-activity timestamp",
1063
+ "operationId": "ListCrawlSources",
1064
+ "responses": {
1065
+ "200": {
1066
+ "description": "Payload of Array of CrawlSourceWithPattern",
1067
+ "content": {
1068
+ "application/json": {
1069
+ "schema": {
1070
+ "type": "array",
1071
+ "items": {
1072
+ "$ref": "#/components/schemas/crawlSourceWithPattern"
1073
+ }
1074
+ }
1075
+ }
1076
+ }
1077
+ }
1078
+ },
1079
+ "security": [
1080
+ {
1081
+ "Implicit": [
1082
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
1083
+ ]
1084
+ },
1085
+ {
1086
+ "ApiKey": []
1087
+ }
1088
+ ]
1089
+ }
1090
+ },
1091
+ "/v1.0/crawl/sources/{name}": {
1092
+ "put": {
1093
+ "tags": [
1094
+ "Crawl"
1095
+ ],
1096
+ "summary": "Create or update a crawl source",
1097
+ "operationId": "UpsertCrawlSource",
1065
1098
  "parameters": [
1066
1099
  {
1067
- "name": "jobId",
1100
+ "name": "name",
1068
1101
  "in": "path",
1069
1102
  "required": true,
1070
1103
  "schema": {
@@ -1072,21 +1105,59 @@
1072
1105
  }
1073
1106
  }
1074
1107
  ],
1108
+ "requestBody": {
1109
+ "content": {
1110
+ "application/json": {
1111
+ "schema": {
1112
+ "$ref": "#/components/schemas/crawlSourceUpsertRequest"
1113
+ }
1114
+ }
1115
+ }
1116
+ },
1075
1117
  "responses": {
1076
1118
  "200": {
1077
- "description": "Payload of AgentJob",
1119
+ "description": "Payload of CrawlSourceConfig",
1078
1120
  "content": {
1079
1121
  "application/json": {
1080
1122
  "schema": {
1081
- "$ref": "#/components/schemas/agentJob"
1123
+ "$ref": "#/components/schemas/crawlSourceConfig"
1082
1124
  }
1083
1125
  }
1084
1126
  }
1085
1127
  },
1086
1128
  "400": {
1087
1129
  "description": "No description"
1130
+ }
1131
+ },
1132
+ "security": [
1133
+ {
1134
+ "Implicit": [
1135
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
1136
+ ]
1088
1137
  },
1089
- "404": {
1138
+ {
1139
+ "ApiKey": []
1140
+ }
1141
+ ]
1142
+ },
1143
+ "delete": {
1144
+ "tags": [
1145
+ "Crawl"
1146
+ ],
1147
+ "summary": "Delete a crawl source and its cached pattern",
1148
+ "operationId": "DeleteCrawlSource",
1149
+ "parameters": [
1150
+ {
1151
+ "name": "name",
1152
+ "in": "path",
1153
+ "required": true,
1154
+ "schema": {
1155
+ "type": "string"
1156
+ }
1157
+ }
1158
+ ],
1159
+ "responses": {
1160
+ "204": {
1090
1161
  "description": "No description"
1091
1162
  }
1092
1163
  },
@@ -1102,16 +1173,16 @@
1102
1173
  ]
1103
1174
  }
1104
1175
  },
1105
- "/v1.0/crawl/jobs/{jobId}/cancel": {
1106
- "post": {
1176
+ "/v1.0/crawl/sources/{name}/pattern": {
1177
+ "delete": {
1107
1178
  "tags": [
1108
1179
  "Crawl"
1109
1180
  ],
1110
- "summary": "Terminate the running orchestration and mark the job as failed (\"Cancelled by operator\")",
1111
- "operationId": "CancelCrawlJob",
1181
+ "summary": "Drop the cached URL pattern for a source so the next scan re-bootstraps it",
1182
+ "operationId": "InvalidateCrawlPattern",
1112
1183
  "parameters": [
1113
1184
  {
1114
- "name": "jobId",
1185
+ "name": "name",
1115
1186
  "in": "path",
1116
1187
  "required": true,
1117
1188
  "schema": {
@@ -1120,20 +1191,7 @@
1120
1191
  }
1121
1192
  ],
1122
1193
  "responses": {
1123
- "200": {
1124
- "description": "Payload of AgentJob",
1125
- "content": {
1126
- "application/json": {
1127
- "schema": {
1128
- "$ref": "#/components/schemas/agentJob"
1129
- }
1130
- }
1131
- }
1132
- },
1133
- "404": {
1134
- "description": "No description"
1135
- },
1136
- "409": {
1194
+ "204": {
1137
1195
  "description": "No description"
1138
1196
  }
1139
1197
  },
@@ -1149,35 +1207,32 @@
1149
1207
  ]
1150
1208
  }
1151
1209
  },
1152
- "/v1.0/crawl/jobs/bulk-delete": {
1210
+ "/v1.0/crawl/discover-listing": {
1153
1211
  "post": {
1154
1212
  "tags": [
1155
1213
  "Crawl"
1156
1214
  ],
1157
- "summary": "Delete a batch of jobs and their backing tenders",
1158
- "operationId": "BulkDeleteCrawlJobs",
1215
+ "summary": "Given a site homepage or bare domain, locate the tender/project listing page on it",
1216
+ "operationId": "DiscoverCrawlListing",
1159
1217
  "requestBody": {
1160
1218
  "content": {
1161
1219
  "application/json": {
1162
1220
  "schema": {
1163
- "$ref": "#/components/schemas/bulkDeleteJobsRequest"
1221
+ "$ref": "#/components/schemas/discoverListingRequest"
1164
1222
  }
1165
1223
  }
1166
1224
  }
1167
1225
  },
1168
1226
  "responses": {
1169
1227
  "200": {
1170
- "description": "Payload of BulkDeleteJobsResponse",
1228
+ "description": "Payload of DiscoverListingResponse",
1171
1229
  "content": {
1172
1230
  "application/json": {
1173
1231
  "schema": {
1174
- "$ref": "#/components/schemas/bulkDeleteJobsResponse"
1232
+ "$ref": "#/components/schemas/discoverListingResponse"
1175
1233
  }
1176
1234
  }
1177
1235
  }
1178
- },
1179
- "400": {
1180
- "description": "No description"
1181
1236
  }
1182
1237
  },
1183
1238
  "security": [
@@ -1185,20 +1240,17 @@
1185
1240
  "Implicit": [
1186
1241
  "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
1187
1242
  ]
1188
- },
1189
- {
1190
- "ApiKey": []
1191
1243
  }
1192
1244
  ]
1193
1245
  }
1194
1246
  },
1195
- "/v1.0/crawl/sources/{name}/jobs": {
1196
- "get": {
1247
+ "/v1.0/crawl/sources/{name}/preview": {
1248
+ "post": {
1197
1249
  "tags": [
1198
1250
  "Crawl"
1199
1251
  ],
1200
- "summary": "Recent ingestion jobs for this source, newest first",
1201
- "operationId": "ListCrawlJobs",
1252
+ "summary": "Run a one-off discovery crawl for a single source and return the notices it would enqueue (no ingestion)",
1253
+ "operationId": "PreviewCrawlSource",
1202
1254
  "parameters": [
1203
1255
  {
1204
1256
  "name": "name",
@@ -1207,29 +1259,21 @@
1207
1259
  "schema": {
1208
1260
  "type": "string"
1209
1261
  }
1210
- },
1211
- {
1212
- "name": "limit",
1213
- "in": "query",
1214
- "description": "Max jobs to return (default 50)",
1215
- "schema": {
1216
- "type": "string"
1217
- }
1218
1262
  }
1219
1263
  ],
1220
1264
  "responses": {
1221
1265
  "200": {
1222
- "description": "Payload of Array of AgentJob",
1266
+ "description": "Payload of CrawlPreviewResponse",
1223
1267
  "content": {
1224
1268
  "application/json": {
1225
1269
  "schema": {
1226
- "type": "array",
1227
- "items": {
1228
- "$ref": "#/components/schemas/agentJob"
1229
- }
1270
+ "$ref": "#/components/schemas/crawlPreviewResponse"
1230
1271
  }
1231
1272
  }
1232
1273
  }
1274
+ },
1275
+ "404": {
1276
+ "description": "No description"
1233
1277
  }
1234
1278
  },
1235
1279
  "security": [
@@ -1244,18 +1288,17 @@
1244
1288
  ]
1245
1289
  }
1246
1290
  },
1247
- "/v1.0/crawl/sources/{name}/preview": {
1248
- "post": {
1291
+ "/v1.0/consultants": {
1292
+ "get": {
1249
1293
  "tags": [
1250
- "Crawl"
1294
+ "Consultants"
1251
1295
  ],
1252
- "summary": "Run a one-off discovery crawl for a single source and return the notices it would enqueue (no ingestion)",
1253
- "operationId": "PreviewCrawlSource",
1296
+ "summary": "List all known consultants (for manual selection)",
1297
+ "operationId": "ListConsultants",
1254
1298
  "parameters": [
1255
1299
  {
1256
- "name": "name",
1257
- "in": "path",
1258
- "required": true,
1300
+ "name": "query",
1301
+ "in": "query",
1259
1302
  "schema": {
1260
1303
  "type": "string"
1261
1304
  }
@@ -1263,17 +1306,17 @@
1263
1306
  ],
1264
1307
  "responses": {
1265
1308
  "200": {
1266
- "description": "Payload of CrawlPreviewResponse",
1309
+ "description": "Payload of Array of ConsultantSummary",
1267
1310
  "content": {
1268
1311
  "application/json": {
1269
1312
  "schema": {
1270
- "$ref": "#/components/schemas/crawlPreviewResponse"
1313
+ "type": "array",
1314
+ "items": {
1315
+ "$ref": "#/components/schemas/consultantSummary"
1316
+ }
1271
1317
  }
1272
1318
  }
1273
1319
  }
1274
- },
1275
- "404": {
1276
- "description": "No description"
1277
1320
  }
1278
1321
  },
1279
1322
  "security": [
@@ -1527,13 +1570,13 @@
1527
1570
  ]
1528
1571
  }
1529
1572
  },
1530
- "/v1.0/tenders/{id}/documents/{docId}": {
1531
- "patch": {
1573
+ "/v1.0/tenders/{id}/documents/{docId}/extract-questions": {
1574
+ "post": {
1532
1575
  "tags": [
1533
1576
  "Documents"
1534
1577
  ],
1535
- "summary": "Patch tender document flags (e.g. set as competence matrix source)",
1536
- "operationId": "PatchTenderDocument",
1578
+ "summary": "Start extraction of fillable questions from a document",
1579
+ "operationId": "StartQuestionExtraction",
1537
1580
  "parameters": [
1538
1581
  {
1539
1582
  "name": "id",
@@ -1552,23 +1595,13 @@
1552
1595
  }
1553
1596
  }
1554
1597
  ],
1555
- "requestBody": {
1556
- "content": {
1557
- "application/json": {
1558
- "schema": {
1559
- "$ref": "#/components/schemas/patchDocumentRequest"
1560
- }
1561
- }
1562
- },
1563
- "required": true
1564
- },
1565
1598
  "responses": {
1566
- "200": {
1567
- "description": "Payload of PatchDocumentResponse",
1599
+ "202": {
1600
+ "description": "Payload of Object",
1568
1601
  "content": {
1569
1602
  "application/json": {
1570
1603
  "schema": {
1571
- "$ref": "#/components/schemas/patchDocumentResponse"
1604
+ "type": "object"
1572
1605
  }
1573
1606
  }
1574
1607
  }
@@ -1587,14 +1620,16 @@
1587
1620
  "ApiKey": []
1588
1621
  }
1589
1622
  ]
1590
- },
1591
- "delete": {
1623
+ }
1624
+ },
1625
+ "/v1.0/tenders/{id}/documents/{docId}/fill-questions": {
1626
+ "post": {
1592
1627
  "tags": [
1593
1628
  "Documents"
1594
1629
  ],
1595
- "summary": "Delete a tender document (and its blob + related answers)",
1596
- "operationId": "DeleteTenderDocument",
1597
- "parameters": [
1630
+ "summary": "Start filling tender question answers per consultant",
1631
+ "operationId": "StartQuestionFill",
1632
+ "parameters": [
1598
1633
  {
1599
1634
  "name": "id",
1600
1635
  "in": "path",
@@ -1612,51 +1647,16 @@
1612
1647
  }
1613
1648
  }
1614
1649
  ],
1615
- "responses": {
1616
- "204": {
1617
- "description": "No description"
1618
- },
1619
- "404": {
1620
- "description": "No description"
1621
- }
1622
- },
1623
- "security": [
1624
- {
1625
- "Implicit": [
1626
- "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
1627
- ]
1628
- },
1629
- {
1630
- "ApiKey": []
1631
- }
1632
- ]
1633
- }
1634
- },
1635
- "/v1.0/tenders/{id}/documents/{docId}/extract-questions": {
1636
- "post": {
1637
- "tags": [
1638
- "Documents"
1639
- ],
1640
- "summary": "Start extraction of fillable questions from a document",
1641
- "operationId": "StartQuestionExtraction",
1642
- "parameters": [
1643
- {
1644
- "name": "id",
1645
- "in": "path",
1646
- "required": true,
1647
- "schema": {
1648
- "type": "string"
1650
+ "requestBody": {
1651
+ "content": {
1652
+ "application/json": {
1653
+ "schema": {
1654
+ "$ref": "#/components/schemas/questionFillRequest"
1655
+ }
1649
1656
  }
1650
1657
  },
1651
- {
1652
- "name": "docId",
1653
- "in": "path",
1654
- "required": true,
1655
- "schema": {
1656
- "type": "string"
1657
- }
1658
- }
1659
- ],
1658
+ "required": true
1659
+ },
1660
1660
  "responses": {
1661
1661
  "202": {
1662
1662
  "description": "Payload of Object",
@@ -1684,13 +1684,13 @@
1684
1684
  ]
1685
1685
  }
1686
1686
  },
1687
- "/v1.0/tenders/{id}/documents/{docId}/fill-questions": {
1688
- "post": {
1687
+ "/v1.0/tenders/{id}/documents/{docId}": {
1688
+ "patch": {
1689
1689
  "tags": [
1690
1690
  "Documents"
1691
1691
  ],
1692
- "summary": "Start filling tender question answers per consultant",
1693
- "operationId": "StartQuestionFill",
1692
+ "summary": "Patch tender document flags (e.g. set as competence matrix source)",
1693
+ "operationId": "PatchTenderDocument",
1694
1694
  "parameters": [
1695
1695
  {
1696
1696
  "name": "id",
@@ -1713,19 +1713,19 @@
1713
1713
  "content": {
1714
1714
  "application/json": {
1715
1715
  "schema": {
1716
- "$ref": "#/components/schemas/questionFillRequest"
1716
+ "$ref": "#/components/schemas/patchDocumentRequest"
1717
1717
  }
1718
1718
  }
1719
1719
  },
1720
1720
  "required": true
1721
1721
  },
1722
1722
  "responses": {
1723
- "202": {
1724
- "description": "Payload of Object",
1723
+ "200": {
1724
+ "description": "Payload of PatchDocumentResponse",
1725
1725
  "content": {
1726
1726
  "application/json": {
1727
1727
  "schema": {
1728
- "type": "object"
1728
+ "$ref": "#/components/schemas/patchDocumentResponse"
1729
1729
  }
1730
1730
  }
1731
1731
  }
@@ -1744,37 +1744,37 @@
1744
1744
  "ApiKey": []
1745
1745
  }
1746
1746
  ]
1747
- }
1748
- },
1749
- "/v1.0/consultants": {
1750
- "get": {
1747
+ },
1748
+ "delete": {
1751
1749
  "tags": [
1752
- "Consultants"
1750
+ "Documents"
1753
1751
  ],
1754
- "summary": "List all known consultants (for manual selection)",
1755
- "operationId": "ListConsultants",
1752
+ "summary": "Delete a tender document (and its blob + related answers)",
1753
+ "operationId": "DeleteTenderDocument",
1756
1754
  "parameters": [
1757
1755
  {
1758
- "name": "query",
1759
- "in": "query",
1756
+ "name": "id",
1757
+ "in": "path",
1758
+ "required": true,
1759
+ "schema": {
1760
+ "type": "string"
1761
+ }
1762
+ },
1763
+ {
1764
+ "name": "docId",
1765
+ "in": "path",
1766
+ "required": true,
1760
1767
  "schema": {
1761
1768
  "type": "string"
1762
1769
  }
1763
1770
  }
1764
1771
  ],
1765
1772
  "responses": {
1766
- "200": {
1767
- "description": "Payload of Array of ConsultantSummary",
1768
- "content": {
1769
- "application/json": {
1770
- "schema": {
1771
- "type": "array",
1772
- "items": {
1773
- "$ref": "#/components/schemas/consultantSummary"
1774
- }
1775
- }
1776
- }
1777
- }
1773
+ "204": {
1774
+ "description": "No description"
1775
+ },
1776
+ "404": {
1777
+ "description": "No description"
1778
1778
  }
1779
1779
  },
1780
1780
  "security": [
@@ -1942,6 +1942,145 @@
1942
1942
  ]
1943
1943
  }
1944
1944
  },
1945
+ "/v1.0/salesforce/opportunities/{sfId}/import": {
1946
+ "post": {
1947
+ "tags": [
1948
+ "Salesforce"
1949
+ ],
1950
+ "summary": "Create a Snøkam tender stub from an existing Salesforce Opportunity.",
1951
+ "operationId": "ImportSalesforceOpportunity",
1952
+ "parameters": [
1953
+ {
1954
+ "name": "sfId",
1955
+ "in": "path",
1956
+ "required": true,
1957
+ "schema": {
1958
+ "type": "string"
1959
+ },
1960
+ "x-ms-summary": "Salesforce Opportunity Id."
1961
+ }
1962
+ ],
1963
+ "responses": {
1964
+ "200": {
1965
+ "description": "Payload of TenderView",
1966
+ "content": {
1967
+ "application/json": {
1968
+ "schema": {
1969
+ "$ref": "#/components/schemas/tenderView"
1970
+ }
1971
+ }
1972
+ }
1973
+ },
1974
+ "404": {
1975
+ "description": "No description"
1976
+ },
1977
+ "409": {
1978
+ "description": "A tender is already linked to this Opportunity."
1979
+ }
1980
+ },
1981
+ "security": [
1982
+ {
1983
+ "Implicit": [
1984
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
1985
+ ]
1986
+ },
1987
+ {
1988
+ "ApiKey": []
1989
+ }
1990
+ ]
1991
+ }
1992
+ },
1993
+ "/v1.0/tenders/{id}/salesforce": {
1994
+ "post": {
1995
+ "tags": [
1996
+ "Salesforce"
1997
+ ],
1998
+ "summary": "Create a Salesforce Opportunity from a Snøkam tender and cache the link.",
1999
+ "operationId": "PromoteTenderToSalesforce",
2000
+ "parameters": [
2001
+ {
2002
+ "name": "id",
2003
+ "in": "path",
2004
+ "required": true,
2005
+ "schema": {
2006
+ "type": "string"
2007
+ }
2008
+ }
2009
+ ],
2010
+ "responses": {
2011
+ "200": {
2012
+ "description": "Payload of TenderView",
2013
+ "content": {
2014
+ "application/json": {
2015
+ "schema": {
2016
+ "$ref": "#/components/schemas/tenderView"
2017
+ }
2018
+ }
2019
+ }
2020
+ },
2021
+ "404": {
2022
+ "description": "No description"
2023
+ },
2024
+ "409": {
2025
+ "description": "Tender is already linked to a Salesforce Opportunity."
2026
+ }
2027
+ },
2028
+ "security": [
2029
+ {
2030
+ "Implicit": [
2031
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
2032
+ ]
2033
+ },
2034
+ {
2035
+ "ApiKey": []
2036
+ }
2037
+ ]
2038
+ }
2039
+ },
2040
+ "/v1.0/tenders/{id}/salesforce/refresh": {
2041
+ "post": {
2042
+ "tags": [
2043
+ "Salesforce"
2044
+ ],
2045
+ "summary": "Re-sync cached Salesforce Opportunity state (stage / closed / won) onto the engagement.",
2046
+ "operationId": "RefreshTenderSalesforceLink",
2047
+ "parameters": [
2048
+ {
2049
+ "name": "id",
2050
+ "in": "path",
2051
+ "required": true,
2052
+ "schema": {
2053
+ "type": "string"
2054
+ }
2055
+ }
2056
+ ],
2057
+ "responses": {
2058
+ "200": {
2059
+ "description": "Payload of TenderView",
2060
+ "content": {
2061
+ "application/json": {
2062
+ "schema": {
2063
+ "$ref": "#/components/schemas/tenderView"
2064
+ }
2065
+ }
2066
+ }
2067
+ },
2068
+ "404": {
2069
+ "description": "No description"
2070
+ }
2071
+ },
2072
+ "security": [
2073
+ {
2074
+ "Implicit": [
2075
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
2076
+ ]
2077
+ },
2078
+ {
2079
+ "ApiKey": []
2080
+ }
2081
+ ]
2082
+ }
2083
+ },
1945
2084
  "/v1.0/salesforce/opportunities": {
1946
2085
  "get": {
1947
2086
  "tags": [
@@ -2118,24 +2257,33 @@
2118
2257
  ]
2119
2258
  }
2120
2259
  },
2121
- "/v1.0/salesforce/opportunities/{sfId}/import": {
2260
+ "/v1.0/tenders/{id}/consultants": {
2122
2261
  "post": {
2123
2262
  "tags": [
2124
- "Salesforce"
2263
+ "Tenders"
2125
2264
  ],
2126
- "summary": "Create a Snøkam tender stub from an existing Salesforce Opportunity.",
2127
- "operationId": "ImportSalesforceOpportunity",
2265
+ "summary": "Assign a consultant to a tender. Idempotent: assigning the same email twice refreshes Name/Note but does not create duplicates.",
2266
+ "operationId": "AssignConsultant",
2128
2267
  "parameters": [
2129
2268
  {
2130
- "name": "sfId",
2269
+ "name": "id",
2131
2270
  "in": "path",
2132
2271
  "required": true,
2133
2272
  "schema": {
2134
2273
  "type": "string"
2135
- },
2136
- "x-ms-summary": "Salesforce Opportunity Id."
2274
+ }
2137
2275
  }
2138
2276
  ],
2277
+ "requestBody": {
2278
+ "content": {
2279
+ "application/json": {
2280
+ "schema": {
2281
+ "$ref": "#/components/schemas/assignedConsultant"
2282
+ }
2283
+ }
2284
+ },
2285
+ "required": true
2286
+ },
2139
2287
  "responses": {
2140
2288
  "200": {
2141
2289
  "description": "Payload of TenderView",
@@ -2149,9 +2297,6 @@
2149
2297
  },
2150
2298
  "404": {
2151
2299
  "description": "No description"
2152
- },
2153
- "409": {
2154
- "description": "A tender is already linked to this Opportunity."
2155
2300
  }
2156
2301
  },
2157
2302
  "security": [
@@ -2166,13 +2311,13 @@
2166
2311
  ]
2167
2312
  }
2168
2313
  },
2169
- "/v1.0/tenders/{id}/salesforce": {
2314
+ "/v1.0/tenders/{id}/slack-messages": {
2170
2315
  "post": {
2171
2316
  "tags": [
2172
- "Salesforce"
2317
+ "Tenders"
2173
2318
  ],
2174
- "summary": "Create a Salesforce Opportunity from a Snøkam tender and cache the link.",
2175
- "operationId": "PromoteTenderToSalesforce",
2319
+ "summary": "Queue a Slack message for a tender (Service Bus notifications-function).",
2320
+ "operationId": "SendTenderSlackMessage",
2176
2321
  "parameters": [
2177
2322
  {
2178
2323
  "name": "id",
@@ -2183,22 +2328,25 @@
2183
2328
  }
2184
2329
  }
2185
2330
  ],
2186
- "responses": {
2187
- "200": {
2188
- "description": "Payload of TenderView",
2189
- "content": {
2190
- "application/json": {
2191
- "schema": {
2192
- "$ref": "#/components/schemas/tenderView"
2193
- }
2331
+ "requestBody": {
2332
+ "content": {
2333
+ "application/json": {
2334
+ "schema": {
2335
+ "$ref": "#/components/schemas/sendTenderSlackMessageRequest"
2194
2336
  }
2195
2337
  }
2196
2338
  },
2197
- "404": {
2339
+ "required": true
2340
+ },
2341
+ "responses": {
2342
+ "204": {
2198
2343
  "description": "No description"
2199
2344
  },
2200
- "409": {
2201
- "description": "Tender is already linked to a Salesforce Opportunity."
2345
+ "400": {
2346
+ "description": "No description"
2347
+ },
2348
+ "404": {
2349
+ "description": "No description"
2202
2350
  }
2203
2351
  },
2204
2352
  "security": [
@@ -2213,13 +2361,13 @@
2213
2361
  ]
2214
2362
  }
2215
2363
  },
2216
- "/v1.0/tenders/{id}/salesforce/refresh": {
2217
- "post": {
2364
+ "/v1.0/tenders/{id}/consultants/{email}": {
2365
+ "delete": {
2218
2366
  "tags": [
2219
- "Salesforce"
2367
+ "Tenders"
2220
2368
  ],
2221
- "summary": "Re-sync cached Salesforce Opportunity state (stage / closed / won) onto the engagement.",
2222
- "operationId": "RefreshTenderSalesforceLink",
2369
+ "summary": "Remove a consultant assignment from a tender. No-op if the email isn't assigned.",
2370
+ "operationId": "UnassignConsultant",
2223
2371
  "parameters": [
2224
2372
  {
2225
2373
  "name": "id",
@@ -2228,6 +2376,14 @@
2228
2376
  "schema": {
2229
2377
  "type": "string"
2230
2378
  }
2379
+ },
2380
+ {
2381
+ "name": "email",
2382
+ "in": "path",
2383
+ "required": true,
2384
+ "schema": {
2385
+ "type": "string"
2386
+ }
2231
2387
  }
2232
2388
  ],
2233
2389
  "responses": {
@@ -2462,133 +2618,6 @@
2462
2618
  ]
2463
2619
  }
2464
2620
  },
2465
- "/v1.0/tenders/backfill-slugs": {
2466
- "post": {
2467
- "tags": [
2468
- "Tenders"
2469
- ],
2470
- "summary": "Assign a slug to every tender that doesn't have one yet. Idempotent — safe to re-run.",
2471
- "operationId": "BackfillTenderSlugs",
2472
- "responses": {
2473
- "200": {
2474
- "description": "Payload of BackfillSlugsResult",
2475
- "content": {
2476
- "application/json": {
2477
- "schema": {
2478
- "$ref": "#/components/schemas/backfillSlugsResult"
2479
- }
2480
- }
2481
- }
2482
- }
2483
- },
2484
- "security": [
2485
- {
2486
- "Implicit": [
2487
- "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
2488
- ]
2489
- },
2490
- {
2491
- "ApiKey": []
2492
- }
2493
- ]
2494
- }
2495
- },
2496
- "/v1.0/tenders/{id}/reingest": {
2497
- "post": {
2498
- "tags": [
2499
- "Tenders"
2500
- ],
2501
- "summary": "Re-run the ingestion pipeline on an existing tender, re-parsing documents and refreshing AI match / summary / classification.",
2502
- "operationId": "ReingestTender",
2503
- "parameters": [
2504
- {
2505
- "name": "id",
2506
- "in": "path",
2507
- "required": true,
2508
- "schema": {
2509
- "type": "string"
2510
- }
2511
- }
2512
- ],
2513
- "responses": {
2514
- "200": {
2515
- "description": "Payload of AgentJob",
2516
- "content": {
2517
- "application/json": {
2518
- "schema": {
2519
- "$ref": "#/components/schemas/agentJob"
2520
- }
2521
- }
2522
- }
2523
- },
2524
- "404": {
2525
- "description": "No description"
2526
- }
2527
- },
2528
- "security": [
2529
- {
2530
- "Implicit": [
2531
- "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
2532
- ]
2533
- },
2534
- {
2535
- "ApiKey": []
2536
- }
2537
- ]
2538
- }
2539
- },
2540
- "/v1.0/tenders/{id}/jobs/{jobId}/snapshot": {
2541
- "get": {
2542
- "tags": [
2543
- "Tenders"
2544
- ],
2545
- "summary": "Return the tender as it looked right after a given agent job ran (time-travel view).",
2546
- "operationId": "GetTenderJobSnapshot",
2547
- "parameters": [
2548
- {
2549
- "name": "id",
2550
- "in": "path",
2551
- "required": true,
2552
- "schema": {
2553
- "type": "string"
2554
- }
2555
- },
2556
- {
2557
- "name": "jobId",
2558
- "in": "path",
2559
- "required": true,
2560
- "schema": {
2561
- "type": "string"
2562
- }
2563
- }
2564
- ],
2565
- "responses": {
2566
- "200": {
2567
- "description": "Payload of TenderView",
2568
- "content": {
2569
- "application/json": {
2570
- "schema": {
2571
- "$ref": "#/components/schemas/tenderView"
2572
- }
2573
- }
2574
- }
2575
- },
2576
- "404": {
2577
- "description": "No description"
2578
- }
2579
- },
2580
- "security": [
2581
- {
2582
- "Implicit": [
2583
- "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
2584
- ]
2585
- },
2586
- {
2587
- "ApiKey": []
2588
- }
2589
- ]
2590
- }
2591
- },
2592
2621
  "/v1.0/tenders/{id}/cv-proposal": {
2593
2622
  "put": {
2594
2623
  "tags": [
@@ -2749,46 +2778,23 @@
2749
2778
  ]
2750
2779
  }
2751
2780
  },
2752
- "/v1.0/tenders/{id}/consultants": {
2781
+ "/v1.0/tenders/backfill-slugs": {
2753
2782
  "post": {
2754
2783
  "tags": [
2755
2784
  "Tenders"
2756
2785
  ],
2757
- "summary": "Assign a consultant to a tender. Idempotent: assigning the same email twice refreshes Name/Note but does not create duplicates.",
2758
- "operationId": "AssignConsultant",
2759
- "parameters": [
2760
- {
2761
- "name": "id",
2762
- "in": "path",
2763
- "required": true,
2764
- "schema": {
2765
- "type": "string"
2766
- }
2767
- }
2768
- ],
2769
- "requestBody": {
2770
- "content": {
2771
- "application/json": {
2772
- "schema": {
2773
- "$ref": "#/components/schemas/assignedConsultant"
2774
- }
2775
- }
2776
- },
2777
- "required": true
2778
- },
2786
+ "summary": "Assign a slug to every tender that doesn't have one yet. Idempotent safe to re-run.",
2787
+ "operationId": "BackfillTenderSlugs",
2779
2788
  "responses": {
2780
2789
  "200": {
2781
- "description": "Payload of TenderView",
2790
+ "description": "Payload of BackfillSlugsResult",
2782
2791
  "content": {
2783
2792
  "application/json": {
2784
2793
  "schema": {
2785
- "$ref": "#/components/schemas/tenderView"
2794
+ "$ref": "#/components/schemas/backfillSlugsResult"
2786
2795
  }
2787
2796
  }
2788
2797
  }
2789
- },
2790
- "404": {
2791
- "description": "No description"
2792
2798
  }
2793
2799
  },
2794
2800
  "security": [
@@ -2803,13 +2809,13 @@
2803
2809
  ]
2804
2810
  }
2805
2811
  },
2806
- "/v1.0/tenders/{id}/slack-messages": {
2812
+ "/v1.0/tenders/{id}/reingest": {
2807
2813
  "post": {
2808
2814
  "tags": [
2809
2815
  "Tenders"
2810
2816
  ],
2811
- "summary": "Queue a Slack message for a tender (Service Bus notifications-function).",
2812
- "operationId": "SendTenderSlackMessage",
2817
+ "summary": "Re-run the ingestion pipeline on an existing tender, re-parsing documents and refreshing AI match / summary / classification.",
2818
+ "operationId": "ReingestTender",
2813
2819
  "parameters": [
2814
2820
  {
2815
2821
  "name": "id",
@@ -2820,23 +2826,17 @@
2820
2826
  }
2821
2827
  }
2822
2828
  ],
2823
- "requestBody": {
2824
- "content": {
2825
- "application/json": {
2826
- "schema": {
2827
- "$ref": "#/components/schemas/sendTenderSlackMessageRequest"
2829
+ "responses": {
2830
+ "200": {
2831
+ "description": "Payload of AgentJob",
2832
+ "content": {
2833
+ "application/json": {
2834
+ "schema": {
2835
+ "$ref": "#/components/schemas/agentJob"
2836
+ }
2828
2837
  }
2829
2838
  }
2830
2839
  },
2831
- "required": true
2832
- },
2833
- "responses": {
2834
- "204": {
2835
- "description": "No description"
2836
- },
2837
- "400": {
2838
- "description": "No description"
2839
- },
2840
2840
  "404": {
2841
2841
  "description": "No description"
2842
2842
  }
@@ -2853,13 +2853,13 @@
2853
2853
  ]
2854
2854
  }
2855
2855
  },
2856
- "/v1.0/tenders/{id}/consultants/{email}": {
2857
- "delete": {
2856
+ "/v1.0/tenders/{id}/jobs/{jobId}/snapshot": {
2857
+ "get": {
2858
2858
  "tags": [
2859
2859
  "Tenders"
2860
2860
  ],
2861
- "summary": "Remove a consultant assignment from a tender. No-op if the email isn't assigned.",
2862
- "operationId": "UnassignConsultant",
2861
+ "summary": "Return the tender as it looked right after a given agent job ran (time-travel view).",
2862
+ "operationId": "GetTenderJobSnapshot",
2863
2863
  "parameters": [
2864
2864
  {
2865
2865
  "name": "id",
@@ -2870,7 +2870,7 @@
2870
2870
  }
2871
2871
  },
2872
2872
  {
2873
- "name": "email",
2873
+ "name": "jobId",
2874
2874
  "in": "path",
2875
2875
  "required": true,
2876
2876
  "schema": {