@snokam/mcp-api 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1655 @@
1
+ {
2
+ "openapi": "3.0.4",
3
+ "info": {
4
+ "title": "ChatGPT Function",
5
+ "description": "Backend for Azure OpenAI integrations",
6
+ "version": "v1.0.0"
7
+ },
8
+ "servers": [
9
+ {
10
+ "url": "https://chatgpt.api.test.snokam.no"
11
+ }
12
+ ],
13
+ "paths": {
14
+ "/v1.0/newsletter/summary": {
15
+ "post": {
16
+ "tags": [
17
+ "Newsletter"
18
+ ],
19
+ "summary": "Summarize newsletter of a given topic",
20
+ "description": "Reads last week's newsletter mails and returns summary",
21
+ "operationId": "summarizeNewsletter",
22
+ "parameters": [
23
+ {
24
+ "name": "topic",
25
+ "in": "query",
26
+ "description": "Topic to summarize, e.g. AI",
27
+ "schema": {
28
+ "type": "string"
29
+ },
30
+ "x-ms-summary": "Technology topic"
31
+ }
32
+ ],
33
+ "responses": {
34
+ "200": {
35
+ "description": "Summary of the newsletter for the specified topic",
36
+ "content": {
37
+ "application/json": {
38
+ "schema": {
39
+ "$ref": "#/components/schemas/simpleResponseDto"
40
+ }
41
+ }
42
+ },
43
+ "x-ms-summary": "Success"
44
+ }
45
+ }
46
+ }
47
+ },
48
+ "/v1.0/newsletter/single-news": {
49
+ "post": {
50
+ "tags": [
51
+ "AI News"
52
+ ],
53
+ "summary": "Get a single AI news item",
54
+ "description": "Fetches one AI news item from recent emails",
55
+ "operationId": "getSingleNews",
56
+ "parameters": [
57
+ {
58
+ "name": "topic",
59
+ "in": "query",
60
+ "description": "Topic to summarize, e.g. AI",
61
+ "schema": {
62
+ "type": "string"
63
+ },
64
+ "x-ms-summary": "Technology topic"
65
+ }
66
+ ],
67
+ "responses": {
68
+ "200": {
69
+ "description": "A single AI news item",
70
+ "content": {
71
+ "application/json": {
72
+ "schema": {
73
+ "$ref": "#/components/schemas/simpleResponseDto"
74
+ }
75
+ }
76
+ },
77
+ "x-ms-summary": "Success"
78
+ }
79
+ }
80
+ }
81
+ },
82
+ "/v1.0/protected/question": {
83
+ "get": {
84
+ "tags": [
85
+ "Question"
86
+ ],
87
+ "summary": "Synchronously answer a question using ChatGPT",
88
+ "description": "This function synchronously answers a question using ChatGPT.",
89
+ "operationId": "protectedSyncQuestion",
90
+ "parameters": [
91
+ {
92
+ "name": "input",
93
+ "in": "query",
94
+ "description": "The question input to be answered",
95
+ "required": true,
96
+ "schema": {
97
+ "type": "string"
98
+ },
99
+ "x-ms-summary": "The question input"
100
+ },
101
+ {
102
+ "name": "addDefaultPrompts",
103
+ "in": "query",
104
+ "description": "If true, default prompts from the Prompts folder will be added to the chat context.",
105
+ "schema": {
106
+ "type": "boolean"
107
+ },
108
+ "x-ms-summary": "Include Default Prompts"
109
+ },
110
+ {
111
+ "name": "addApiTools",
112
+ "in": "query",
113
+ "description": "If true, API tools will be added to the chat context.",
114
+ "schema": {
115
+ "type": "boolean"
116
+ },
117
+ "x-ms-summary": "Include API Tools"
118
+ }
119
+ ],
120
+ "responses": {
121
+ "200": {
122
+ "description": "Question answered successfully",
123
+ "content": {
124
+ "application/json": {
125
+ "schema": {
126
+ "$ref": "#/components/schemas/simpleResponseDto"
127
+ }
128
+ }
129
+ },
130
+ "x-ms-summary": "Success"
131
+ }
132
+ },
133
+ "security": [
134
+ {
135
+ "Implicit": [
136
+ "api://1cb6ee2c-d1ef-4a71-b341-b8b79c272f22/user_impersonation"
137
+ ]
138
+ }
139
+ ]
140
+ }
141
+ },
142
+ "/v1.0/protected/question/async": {
143
+ "get": {
144
+ "tags": [
145
+ "Question"
146
+ ],
147
+ "summary": "Asynchronously answer a question using ChatGPT",
148
+ "description": "This function asynchronously answers a question using ChatGPT.",
149
+ "operationId": "protectedAsyncQuestion",
150
+ "parameters": [
151
+ {
152
+ "name": "input",
153
+ "in": "query",
154
+ "description": "The question input to be answered",
155
+ "required": true,
156
+ "schema": {
157
+ "type": "string"
158
+ },
159
+ "x-ms-summary": "The question input"
160
+ },
161
+ {
162
+ "name": "addDefaultPrompts",
163
+ "in": "query",
164
+ "description": "If true, default prompts from the Prompts folder will be added to the chat context.",
165
+ "schema": {
166
+ "type": "boolean"
167
+ },
168
+ "x-ms-summary": "Include Default Prompts"
169
+ },
170
+ {
171
+ "name": "addApiTools",
172
+ "in": "query",
173
+ "description": "If true, API tools will be added to the chat context.",
174
+ "schema": {
175
+ "type": "boolean"
176
+ },
177
+ "x-ms-summary": "Include API Tools"
178
+ }
179
+ ],
180
+ "responses": {
181
+ "200": {
182
+ "description": "Question answered successfully",
183
+ "x-ms-summary": "Success"
184
+ }
185
+ },
186
+ "security": [
187
+ {
188
+ "Implicit": [
189
+ "api://1cb6ee2c-d1ef-4a71-b341-b8b79c272f22/user_impersonation"
190
+ ]
191
+ }
192
+ ]
193
+ }
194
+ },
195
+ "/v1.0/protected/conversation": {
196
+ "post": {
197
+ "tags": [
198
+ "Conversation"
199
+ ],
200
+ "summary": "Synchronously handle a conversation using ChatGPT",
201
+ "description": "This function synchronously handles a conversation using ChatGPT.",
202
+ "operationId": "protectedSyncConversation",
203
+ "parameters": [
204
+ {
205
+ "name": "addDefaultPrompts",
206
+ "in": "query",
207
+ "description": "If true, default prompts from the Prompts folder will be added to the chat context.",
208
+ "schema": {
209
+ "type": "boolean"
210
+ },
211
+ "x-ms-summary": "Include Default Prompts"
212
+ },
213
+ {
214
+ "name": "addApiTools",
215
+ "in": "query",
216
+ "description": "If true, API tools will be added to the chat context.",
217
+ "schema": {
218
+ "type": "boolean"
219
+ },
220
+ "x-ms-summary": "Include API Tools"
221
+ }
222
+ ],
223
+ "requestBody": {
224
+ "description": "List of chat messages",
225
+ "content": {
226
+ "application/json": {
227
+ "schema": {
228
+ "type": "array",
229
+ "items": {
230
+ "$ref": "#/components/schemas/inputChatMessage"
231
+ }
232
+ }
233
+ }
234
+ },
235
+ "required": true
236
+ },
237
+ "responses": {
238
+ "200": {
239
+ "description": "Conversation handled successfully",
240
+ "content": {
241
+ "application/json": {
242
+ "schema": {
243
+ "$ref": "#/components/schemas/simpleResponseDto"
244
+ }
245
+ }
246
+ },
247
+ "x-ms-summary": "Success"
248
+ }
249
+ },
250
+ "security": [
251
+ {
252
+ "Implicit": [
253
+ "api://1cb6ee2c-d1ef-4a71-b341-b8b79c272f22/user_impersonation"
254
+ ]
255
+ }
256
+ ]
257
+ }
258
+ },
259
+ "/v1.0/protected/conversation/async": {
260
+ "post": {
261
+ "tags": [
262
+ "Conversation"
263
+ ],
264
+ "summary": "Asynchronously handle a conversation using ChatGPT",
265
+ "description": "This function asynchronously handles a conversation using ChatGPT.",
266
+ "operationId": "protectedAsyncConversation",
267
+ "parameters": [
268
+ {
269
+ "name": "addDefaultPrompts",
270
+ "in": "query",
271
+ "description": "If true, default prompts from the Prompts folder will be added to the chat context.",
272
+ "schema": {
273
+ "type": "boolean"
274
+ },
275
+ "x-ms-summary": "Include Default Prompts"
276
+ },
277
+ {
278
+ "name": "addApiTools",
279
+ "in": "query",
280
+ "description": "If true, API tools will be added to the chat context.",
281
+ "schema": {
282
+ "type": "boolean"
283
+ },
284
+ "x-ms-summary": "Include API Tools"
285
+ }
286
+ ],
287
+ "requestBody": {
288
+ "description": "List of chat messages",
289
+ "content": {
290
+ "application/json": {
291
+ "schema": {
292
+ "type": "array",
293
+ "items": {
294
+ "$ref": "#/components/schemas/inputChatMessage"
295
+ }
296
+ }
297
+ }
298
+ },
299
+ "required": true
300
+ },
301
+ "responses": {
302
+ "200": {
303
+ "description": "Conversation handled successfully",
304
+ "x-ms-summary": "Success"
305
+ }
306
+ },
307
+ "security": [
308
+ {
309
+ "Implicit": [
310
+ "api://1cb6ee2c-d1ef-4a71-b341-b8b79c272f22/user_impersonation"
311
+ ]
312
+ }
313
+ ]
314
+ }
315
+ },
316
+ "/v1.0/question": {
317
+ "get": {
318
+ "tags": [
319
+ "Question"
320
+ ],
321
+ "summary": "Synchronously answer a question using ChatGPT",
322
+ "description": "This function synchronously answers a question using ChatGPT.",
323
+ "operationId": "syncQuestion",
324
+ "parameters": [
325
+ {
326
+ "name": "input",
327
+ "in": "query",
328
+ "description": "The question input to be answered",
329
+ "required": true,
330
+ "schema": {
331
+ "type": "string"
332
+ },
333
+ "x-ms-summary": "The question input"
334
+ },
335
+ {
336
+ "name": "addDefaultPrompts",
337
+ "in": "query",
338
+ "description": "If true, default prompts from the Prompts folder will be added to the chat context.",
339
+ "schema": {
340
+ "type": "boolean"
341
+ },
342
+ "x-ms-summary": "Include Default Prompts"
343
+ },
344
+ {
345
+ "name": "addApiTools",
346
+ "in": "query",
347
+ "description": "If true, API tools will be added to the chat context.",
348
+ "schema": {
349
+ "type": "boolean"
350
+ },
351
+ "x-ms-summary": "Include API Tools"
352
+ }
353
+ ],
354
+ "responses": {
355
+ "200": {
356
+ "description": "Question answered successfully",
357
+ "content": {
358
+ "application/json": {
359
+ "schema": {
360
+ "$ref": "#/components/schemas/simpleResponseDto"
361
+ }
362
+ }
363
+ },
364
+ "x-ms-summary": "Success"
365
+ }
366
+ }
367
+ }
368
+ },
369
+ "/v1.0/question/async": {
370
+ "get": {
371
+ "tags": [
372
+ "Question"
373
+ ],
374
+ "summary": "Asynchronously answer a question using ChatGPT",
375
+ "description": "This function asynchronously answers a question using ChatGPT.",
376
+ "operationId": "asyncQuestion",
377
+ "parameters": [
378
+ {
379
+ "name": "input",
380
+ "in": "query",
381
+ "description": "The question input to be answered",
382
+ "required": true,
383
+ "schema": {
384
+ "type": "string"
385
+ },
386
+ "x-ms-summary": "The question input"
387
+ },
388
+ {
389
+ "name": "addDefaultPrompts",
390
+ "in": "query",
391
+ "description": "If true, default prompts from the Prompts folder will be added to the chat context.",
392
+ "schema": {
393
+ "type": "boolean"
394
+ },
395
+ "x-ms-summary": "Include Default Prompts"
396
+ },
397
+ {
398
+ "name": "addApiTools",
399
+ "in": "query",
400
+ "description": "If true, API tools will be added to the chat context.",
401
+ "schema": {
402
+ "type": "boolean"
403
+ },
404
+ "x-ms-summary": "Include API Tools"
405
+ }
406
+ ],
407
+ "responses": {
408
+ "200": {
409
+ "description": "Question answered successfully",
410
+ "x-ms-summary": "Success"
411
+ }
412
+ }
413
+ }
414
+ },
415
+ "/v1.0/conversation": {
416
+ "post": {
417
+ "tags": [
418
+ "Conversation"
419
+ ],
420
+ "summary": "Synchronously handle a conversation using ChatGPT",
421
+ "description": "This function synchronously handles a conversation using ChatGPT.",
422
+ "operationId": "syncConversation",
423
+ "parameters": [
424
+ {
425
+ "name": "addDefaultPrompts",
426
+ "in": "query",
427
+ "description": "If true, default prompts from the Prompts folder will be added to the chat context.",
428
+ "schema": {
429
+ "type": "boolean"
430
+ },
431
+ "x-ms-summary": "Include Default Prompts"
432
+ },
433
+ {
434
+ "name": "addApiTools",
435
+ "in": "query",
436
+ "description": "If true, API tools will be added to the chat context.",
437
+ "schema": {
438
+ "type": "boolean"
439
+ },
440
+ "x-ms-summary": "Include API Tools"
441
+ }
442
+ ],
443
+ "requestBody": {
444
+ "description": "List of chat messages",
445
+ "content": {
446
+ "application/json": {
447
+ "schema": {
448
+ "type": "array",
449
+ "items": {
450
+ "$ref": "#/components/schemas/inputChatMessage"
451
+ }
452
+ }
453
+ }
454
+ },
455
+ "required": true
456
+ },
457
+ "responses": {
458
+ "200": {
459
+ "description": "Conversation handled successfully",
460
+ "content": {
461
+ "application/json": {
462
+ "schema": {
463
+ "$ref": "#/components/schemas/simpleResponseDto"
464
+ }
465
+ }
466
+ },
467
+ "x-ms-summary": "Success"
468
+ }
469
+ }
470
+ }
471
+ },
472
+ "/v1.0/conversation/async": {
473
+ "post": {
474
+ "tags": [
475
+ "Conversation"
476
+ ],
477
+ "summary": "Asynchronously handle a conversation using ChatGPT",
478
+ "description": "This function asynchronously handles a conversation using ChatGPT.",
479
+ "operationId": "asyncConversation",
480
+ "parameters": [
481
+ {
482
+ "name": "addDefaultPrompts",
483
+ "in": "query",
484
+ "description": "If true, default prompts from the Prompts folder will be added to the chat context.",
485
+ "schema": {
486
+ "type": "boolean"
487
+ },
488
+ "x-ms-summary": "Include Default Prompts"
489
+ },
490
+ {
491
+ "name": "addApiTools",
492
+ "in": "query",
493
+ "description": "If true, API tools will be added to the chat context.",
494
+ "schema": {
495
+ "type": "boolean"
496
+ },
497
+ "x-ms-summary": "Include API Tools"
498
+ }
499
+ ],
500
+ "requestBody": {
501
+ "description": "List of chat messages",
502
+ "content": {
503
+ "application/json": {
504
+ "schema": {
505
+ "type": "array",
506
+ "items": {
507
+ "$ref": "#/components/schemas/inputChatMessage"
508
+ }
509
+ }
510
+ }
511
+ },
512
+ "required": true
513
+ },
514
+ "responses": {
515
+ "200": {
516
+ "description": "Conversation handled successfully",
517
+ "x-ms-summary": "Success"
518
+ }
519
+ }
520
+ }
521
+ },
522
+ "/v1.0/public/blob-storage": {
523
+ "get": {
524
+ "tags": [
525
+ "Tokens"
526
+ ],
527
+ "summary": "Gets blob storage and creates sas token",
528
+ "description": "Generates a sas token for use to upload image and video memories to azure blob storage",
529
+ "operationId": "GetBlobStorage",
530
+ "responses": {
531
+ "200": {
532
+ "description": "Generated token",
533
+ "content": {
534
+ "application/json": {
535
+ "schema": {
536
+ "$ref": "#/components/schemas/azureBlobStorageCredentials"
537
+ }
538
+ }
539
+ },
540
+ "x-ms-summary": "Success"
541
+ },
542
+ "401": {
543
+ "description": "User is not authorized",
544
+ "x-ms-summary": "Unauthorized"
545
+ }
546
+ }
547
+ }
548
+ },
549
+ "/v1.0/slack/event": {
550
+ "post": {
551
+ "tags": [
552
+ "Slack"
553
+ ],
554
+ "summary": "Handle a Slack event",
555
+ "description": "This function handles a Slack event.",
556
+ "operationId": "slackEvent",
557
+ "requestBody": {
558
+ "description": "Slack event data",
559
+ "content": {
560
+ "application/json": {
561
+ "schema": {
562
+ "$ref": "#/components/schemas/slackEvent"
563
+ }
564
+ }
565
+ },
566
+ "required": true
567
+ },
568
+ "responses": {
569
+ "200": {
570
+ "description": "Slack event handled successfully",
571
+ "content": {
572
+ "application/json": {
573
+ "schema": {
574
+ "$ref": "#/components/schemas/slackEvent"
575
+ }
576
+ }
577
+ },
578
+ "x-ms-summary": "Success"
579
+ },
580
+ "204": {
581
+ "description": "No relevant Slack event found",
582
+ "x-ms-summary": "No Content"
583
+ }
584
+ }
585
+ }
586
+ },
587
+ "/v1.0/realtime/get-ephemeral-token": {
588
+ "post": {
589
+ "tags": [
590
+ "Realtime"
591
+ ],
592
+ "summary": "Get ephemeral token for GPT-4o realtime session",
593
+ "description": "Starts a new ephemeral realtime session with OpenAI GPT-4o. Use `agent` query param to switch assistant behavior.",
594
+ "operationId": "GetEphemeralToken",
595
+ "parameters": [
596
+ {
597
+ "name": "agent",
598
+ "in": "query",
599
+ "schema": {
600
+ "type": "string"
601
+ },
602
+ "x-ms-summary": "Agent (e.g. 'create-event', 'default')"
603
+ },
604
+ {
605
+ "name": "voice",
606
+ "in": "query",
607
+ "schema": {
608
+ "type": "string"
609
+ },
610
+ "x-ms-summary": "OpenAI voice (e.g. 'ash', 'alloy')"
611
+ }
612
+ ],
613
+ "responses": {
614
+ "200": {
615
+ "description": "Payload of RealtimeSession",
616
+ "content": {
617
+ "application/json": {
618
+ "schema": {
619
+ "$ref": "#/components/schemas/realtimeSession"
620
+ }
621
+ }
622
+ },
623
+ "x-ms-summary": "Session started"
624
+ }
625
+ }
626
+ }
627
+ },
628
+ "/v1.0/realtime/agents": {
629
+ "get": {
630
+ "tags": [
631
+ "Realtime"
632
+ ],
633
+ "summary": "List all available contexts",
634
+ "description": "Lists all predefined context modes for GPT-4o realtime sessions",
635
+ "operationId": "GetAvailableAgents",
636
+ "responses": {
637
+ "200": {
638
+ "description": "Payload of Array of RealtimeAgentsDto",
639
+ "content": {
640
+ "application/json": {
641
+ "schema": {
642
+ "type": "array",
643
+ "items": {
644
+ "$ref": "#/components/schemas/realtimeAgentsDto"
645
+ }
646
+ }
647
+ }
648
+ },
649
+ "x-ms-summary": "Contexts listed"
650
+ }
651
+ }
652
+ }
653
+ },
654
+ "/followup-email": {
655
+ "post": {
656
+ "tags": [
657
+ "Follow-up Email"
658
+ ],
659
+ "summary": "Generate a follow-up email for a company, and save it as a draft in the pre-configured mailbox",
660
+ "description": "Generates a personalized follow-up email using Salesforce data and external research",
661
+ "operationId": "generateFollowUpEmail",
662
+ "parameters": [
663
+ {
664
+ "name": "companyName",
665
+ "in": "query",
666
+ "description": "The name of the company to generate a follow-up email for",
667
+ "required": true,
668
+ "schema": {
669
+ "type": "string"
670
+ },
671
+ "x-ms-summary": "Company name"
672
+ }
673
+ ],
674
+ "responses": {
675
+ "200": {
676
+ "description": "The generated follow-up email",
677
+ "content": {
678
+ "application/json": {
679
+ "schema": {
680
+ "$ref": "#/components/schemas/followUpEmailResponse"
681
+ }
682
+ }
683
+ },
684
+ "x-ms-summary": "Success"
685
+ },
686
+ "400": {
687
+ "description": "Invalid input parameters",
688
+ "content": {
689
+ "application/json": {
690
+ "schema": {
691
+ "$ref": "#/components/schemas/errorResponse"
692
+ }
693
+ }
694
+ },
695
+ "x-ms-summary": "Bad Request"
696
+ },
697
+ "500": {
698
+ "description": "An error occurred while generating the email",
699
+ "content": {
700
+ "application/json": {
701
+ "schema": {
702
+ "$ref": "#/components/schemas/errorResponse"
703
+ }
704
+ }
705
+ },
706
+ "x-ms-summary": "Internal Server Error"
707
+ }
708
+ },
709
+ "security": [
710
+ {
711
+ "Implicit": [
712
+ "api://1cb6ee2c-d1ef-4a71-b341-b8b79c272f22/user_impersonation"
713
+ ]
714
+ }
715
+ ]
716
+ },
717
+ "get": {
718
+ "tags": [
719
+ "Follow-up Email"
720
+ ],
721
+ "summary": "Generate follow-up email content for a company",
722
+ "description": "Generates personalized follow-up email content using Salesforce data and external research. Returns the email content without creating a draft.",
723
+ "operationId": "generateFollowUpEmailGet",
724
+ "parameters": [
725
+ {
726
+ "name": "companyName",
727
+ "in": "query",
728
+ "description": "The name of the company to generate a follow-up email for",
729
+ "required": true,
730
+ "schema": {
731
+ "type": "string"
732
+ },
733
+ "x-ms-summary": "Company name"
734
+ }
735
+ ],
736
+ "responses": {
737
+ "200": {
738
+ "description": "The generated follow-up email content",
739
+ "content": {
740
+ "application/json": {
741
+ "schema": {
742
+ "$ref": "#/components/schemas/emailContentResponse"
743
+ }
744
+ }
745
+ },
746
+ "x-ms-summary": "Success"
747
+ },
748
+ "400": {
749
+ "description": "Invalid input parameters",
750
+ "content": {
751
+ "application/json": {
752
+ "schema": {
753
+ "$ref": "#/components/schemas/errorResponse"
754
+ }
755
+ }
756
+ },
757
+ "x-ms-summary": "Bad Request"
758
+ },
759
+ "500": {
760
+ "description": "An error occurred while generating the email",
761
+ "content": {
762
+ "application/json": {
763
+ "schema": {
764
+ "$ref": "#/components/schemas/errorResponse"
765
+ }
766
+ }
767
+ },
768
+ "x-ms-summary": "Internal Server Error"
769
+ }
770
+ },
771
+ "security": [
772
+ {
773
+ "Implicit": [
774
+ "api://1cb6ee2c-d1ef-4a71-b341-b8b79c272f22/user_impersonation"
775
+ ]
776
+ }
777
+ ]
778
+ }
779
+ },
780
+ "/followup-email/contact": {
781
+ "post": {
782
+ "tags": [
783
+ "Follow-up Email"
784
+ ],
785
+ "summary": "Generate a follow-up email for a specific contact, and save it as a draft in the pre-configured mailbox",
786
+ "description": "Generates a personalized follow-up email using Salesforce contact data and external research. No email will be sent automatically, but the email will be saved as a draft.",
787
+ "operationId": "generateFollowUpEmailByContact",
788
+ "parameters": [
789
+ {
790
+ "name": "contactId",
791
+ "in": "query",
792
+ "description": "The Salesforce ID of the contact to generate a follow-up email for",
793
+ "required": true,
794
+ "schema": {
795
+ "type": "string"
796
+ },
797
+ "x-ms-summary": "Contact ID"
798
+ }
799
+ ],
800
+ "responses": {
801
+ "200": {
802
+ "description": "The generated follow-up email",
803
+ "content": {
804
+ "application/json": {
805
+ "schema": {
806
+ "$ref": "#/components/schemas/followUpEmailResponse"
807
+ }
808
+ }
809
+ },
810
+ "x-ms-summary": "Success"
811
+ },
812
+ "400": {
813
+ "description": "Invalid input parameters",
814
+ "content": {
815
+ "application/json": {
816
+ "schema": {
817
+ "$ref": "#/components/schemas/errorResponse"
818
+ }
819
+ }
820
+ },
821
+ "x-ms-summary": "Bad Request"
822
+ },
823
+ "500": {
824
+ "description": "An error occurred while generating the email",
825
+ "content": {
826
+ "application/json": {
827
+ "schema": {
828
+ "$ref": "#/components/schemas/errorResponse"
829
+ }
830
+ }
831
+ },
832
+ "x-ms-summary": "Internal Server Error"
833
+ }
834
+ },
835
+ "security": [
836
+ {
837
+ "Implicit": [
838
+ "api://1cb6ee2c-d1ef-4a71-b341-b8b79c272f22/user_impersonation"
839
+ ]
840
+ }
841
+ ]
842
+ },
843
+ "get": {
844
+ "tags": [
845
+ "Follow-up Email"
846
+ ],
847
+ "summary": "Generate follow-up email content for a specific contact",
848
+ "description": "Generates personalized follow-up email content using Salesforce contact data and external research. Returns the email content without creating a draft.",
849
+ "operationId": "generateFollowUpEmailByContactGet",
850
+ "parameters": [
851
+ {
852
+ "name": "contactId",
853
+ "in": "query",
854
+ "description": "The Salesforce ID of the contact to generate a follow-up email for",
855
+ "required": true,
856
+ "schema": {
857
+ "type": "string"
858
+ },
859
+ "x-ms-summary": "Contact ID"
860
+ }
861
+ ],
862
+ "responses": {
863
+ "200": {
864
+ "description": "The generated follow-up email content",
865
+ "content": {
866
+ "application/json": {
867
+ "schema": {
868
+ "$ref": "#/components/schemas/emailContentResponse"
869
+ }
870
+ }
871
+ },
872
+ "x-ms-summary": "Success"
873
+ },
874
+ "400": {
875
+ "description": "Invalid input parameters",
876
+ "content": {
877
+ "application/json": {
878
+ "schema": {
879
+ "$ref": "#/components/schemas/errorResponse"
880
+ }
881
+ }
882
+ },
883
+ "x-ms-summary": "Bad Request"
884
+ },
885
+ "500": {
886
+ "description": "An error occurred while generating the email",
887
+ "content": {
888
+ "application/json": {
889
+ "schema": {
890
+ "$ref": "#/components/schemas/errorResponse"
891
+ }
892
+ }
893
+ },
894
+ "x-ms-summary": "Internal Server Error"
895
+ }
896
+ },
897
+ "security": [
898
+ {
899
+ "Implicit": [
900
+ "api://1cb6ee2c-d1ef-4a71-b341-b8b79c272f22/user_impersonation"
901
+ ]
902
+ }
903
+ ]
904
+ }
905
+ },
906
+ "/followup-email/automated": {
907
+ "post": {
908
+ "tags": [
909
+ "Automated Follow-up"
910
+ ],
911
+ "summary": "Process automated follow-up emails for strategic priority contacts",
912
+ "description": "Processes strategic priority contacts with LastActivity > specified days or null, creating draft emails if no existing drafts exist. This is the same logic that runs daily via CronJob.",
913
+ "operationId": "processAutomatedFollowUpEmails",
914
+ "parameters": [
915
+ {
916
+ "name": "priority",
917
+ "in": "query",
918
+ "description": "The strategic priority to filter contacts. Valid values: A, B, C, D (default: D)",
919
+ "schema": {
920
+ "type": "string"
921
+ },
922
+ "x-ms-summary": "Strategic priority"
923
+ },
924
+ {
925
+ "name": "daysBack",
926
+ "in": "query",
927
+ "description": "Number of days to look back for last activity (default: 90)",
928
+ "schema": {
929
+ "type": "integer",
930
+ "format": "int32"
931
+ },
932
+ "x-ms-summary": "Days back"
933
+ }
934
+ ],
935
+ "responses": {
936
+ "200": {
937
+ "description": "The processing results",
938
+ "content": {
939
+ "application/json": {
940
+ "schema": {
941
+ "$ref": "#/components/schemas/followUpEmailResponse"
942
+ }
943
+ }
944
+ },
945
+ "x-ms-summary": "Success"
946
+ },
947
+ "500": {
948
+ "description": "An error occurred while processing automated follow-ups",
949
+ "content": {
950
+ "application/json": {
951
+ "schema": {
952
+ "$ref": "#/components/schemas/errorResponse"
953
+ }
954
+ }
955
+ },
956
+ "x-ms-summary": "Internal Server Error"
957
+ }
958
+ },
959
+ "security": [
960
+ {
961
+ "Implicit": [
962
+ "api://1cb6ee2c-d1ef-4a71-b341-b8b79c272f22/user_impersonation"
963
+ ]
964
+ }
965
+ ]
966
+ }
967
+ }
968
+ },
969
+ "components": {
970
+ "schemas": {
971
+ "authorization": {
972
+ "type": "object",
973
+ "properties": {
974
+ "enterprise_id": {
975
+ "type": "object",
976
+ "nullable": true
977
+ },
978
+ "team_id": {
979
+ "type": "string",
980
+ "nullable": true
981
+ },
982
+ "user_id": {
983
+ "type": "string",
984
+ "nullable": true
985
+ },
986
+ "is_bot": {
987
+ "type": "boolean",
988
+ "nullable": true
989
+ },
990
+ "is_enterprise_install": {
991
+ "type": "boolean",
992
+ "nullable": true
993
+ }
994
+ }
995
+ },
996
+ "azureBlobStorageCredentials": {
997
+ "type": "object",
998
+ "properties": {
999
+ "sasToken": {
1000
+ "type": "string"
1001
+ },
1002
+ "blobUrl": {
1003
+ "type": "string"
1004
+ },
1005
+ "additionalProperties": {
1006
+ "type": "object",
1007
+ "additionalProperties": {
1008
+ "type": "object"
1009
+ }
1010
+ }
1011
+ }
1012
+ },
1013
+ "clientSecret": {
1014
+ "type": "object",
1015
+ "properties": {
1016
+ "value": {
1017
+ "type": "string",
1018
+ "nullable": true
1019
+ },
1020
+ "expires_at": {
1021
+ "type": "integer",
1022
+ "format": "int64",
1023
+ "nullable": true
1024
+ }
1025
+ },
1026
+ "nullable": true
1027
+ },
1028
+ "emailContentResponse": {
1029
+ "type": "object",
1030
+ "properties": {
1031
+ "success": {
1032
+ "type": "boolean"
1033
+ },
1034
+ "message": {
1035
+ "type": "string"
1036
+ },
1037
+ "subject": {
1038
+ "type": "string"
1039
+ },
1040
+ "body": {
1041
+ "type": "string"
1042
+ },
1043
+ "companyName": {
1044
+ "type": "string"
1045
+ },
1046
+ "contactId": {
1047
+ "type": "string"
1048
+ },
1049
+ "salesforceData": {
1050
+ "type": "string"
1051
+ },
1052
+ "externalResearch": {
1053
+ "type": "string"
1054
+ }
1055
+ }
1056
+ },
1057
+ "errorResponse": {
1058
+ "type": "object",
1059
+ "properties": {
1060
+ "error": {
1061
+ "type": "string"
1062
+ },
1063
+ "message": {
1064
+ "type": "string"
1065
+ },
1066
+ "details": {
1067
+ "type": "string"
1068
+ }
1069
+ }
1070
+ },
1071
+ "event": {
1072
+ "type": "object",
1073
+ "properties": {
1074
+ "type": {
1075
+ "type": "string",
1076
+ "nullable": true
1077
+ },
1078
+ "text": {
1079
+ "type": "string",
1080
+ "nullable": true
1081
+ },
1082
+ "files": {
1083
+ "type": "array",
1084
+ "items": {
1085
+ "$ref": "#/components/schemas/file"
1086
+ },
1087
+ "nullable": true
1088
+ },
1089
+ "upload": {
1090
+ "type": "boolean",
1091
+ "nullable": true
1092
+ },
1093
+ "user": {
1094
+ "type": "string",
1095
+ "nullable": true
1096
+ },
1097
+ "display_as_bot": {
1098
+ "type": "boolean",
1099
+ "nullable": true
1100
+ },
1101
+ "bot_id": {
1102
+ "type": "string",
1103
+ "nullable": true
1104
+ },
1105
+ "ts": {
1106
+ "type": "string",
1107
+ "nullable": true
1108
+ },
1109
+ "channel": {
1110
+ "type": "string",
1111
+ "nullable": true
1112
+ },
1113
+ "subtype": {
1114
+ "type": "string",
1115
+ "nullable": true
1116
+ },
1117
+ "event_ts": {
1118
+ "type": "string",
1119
+ "nullable": true
1120
+ },
1121
+ "channel_type": {
1122
+ "type": "string",
1123
+ "nullable": true
1124
+ }
1125
+ },
1126
+ "nullable": true
1127
+ },
1128
+ "file": {
1129
+ "type": "object",
1130
+ "properties": {
1131
+ "id": {
1132
+ "type": "string",
1133
+ "nullable": true
1134
+ },
1135
+ "created": {
1136
+ "type": "integer",
1137
+ "format": "int32",
1138
+ "nullable": true
1139
+ },
1140
+ "timestamp": {
1141
+ "type": "integer",
1142
+ "format": "int32",
1143
+ "nullable": true
1144
+ },
1145
+ "name": {
1146
+ "type": "string",
1147
+ "nullable": true
1148
+ },
1149
+ "title": {
1150
+ "type": "string",
1151
+ "nullable": true
1152
+ },
1153
+ "mimetype": {
1154
+ "type": "string",
1155
+ "nullable": true
1156
+ },
1157
+ "filetype": {
1158
+ "type": "string",
1159
+ "nullable": true
1160
+ },
1161
+ "pretty_type": {
1162
+ "type": "string",
1163
+ "nullable": true
1164
+ },
1165
+ "user": {
1166
+ "type": "string",
1167
+ "nullable": true
1168
+ },
1169
+ "user_team": {
1170
+ "type": "string",
1171
+ "nullable": true
1172
+ },
1173
+ "editable": {
1174
+ "type": "boolean",
1175
+ "nullable": true
1176
+ },
1177
+ "size": {
1178
+ "type": "integer",
1179
+ "format": "int32",
1180
+ "nullable": true
1181
+ },
1182
+ "mode": {
1183
+ "type": "string",
1184
+ "nullable": true
1185
+ },
1186
+ "is_external": {
1187
+ "type": "boolean",
1188
+ "nullable": true
1189
+ },
1190
+ "external_type": {
1191
+ "type": "string",
1192
+ "nullable": true
1193
+ },
1194
+ "is_public": {
1195
+ "type": "boolean",
1196
+ "nullable": true
1197
+ },
1198
+ "public_url_shared": {
1199
+ "type": "boolean",
1200
+ "nullable": true
1201
+ },
1202
+ "display_as_bot": {
1203
+ "type": "boolean",
1204
+ "nullable": true
1205
+ },
1206
+ "username": {
1207
+ "type": "string",
1208
+ "nullable": true
1209
+ },
1210
+ "url_private": {
1211
+ "type": "string",
1212
+ "nullable": true
1213
+ },
1214
+ "url_private_download": {
1215
+ "type": "string",
1216
+ "nullable": true
1217
+ },
1218
+ "permalink": {
1219
+ "type": "string",
1220
+ "nullable": true
1221
+ },
1222
+ "permalink_public": {
1223
+ "type": "string",
1224
+ "nullable": true
1225
+ },
1226
+ "subject": {
1227
+ "type": "string",
1228
+ "nullable": true
1229
+ },
1230
+ "to": {
1231
+ "type": "array",
1232
+ "items": {
1233
+ "$ref": "#/components/schemas/to"
1234
+ },
1235
+ "nullable": true
1236
+ },
1237
+ "from": {
1238
+ "type": "array",
1239
+ "items": {
1240
+ "$ref": "#/components/schemas/from"
1241
+ },
1242
+ "nullable": true
1243
+ },
1244
+ "cc": {
1245
+ "type": "array",
1246
+ "items": {
1247
+ "type": "object"
1248
+ },
1249
+ "nullable": true
1250
+ },
1251
+ "attachments": {
1252
+ "type": "array",
1253
+ "items": {
1254
+ "type": "object"
1255
+ },
1256
+ "nullable": true
1257
+ },
1258
+ "original_attachment_count": {
1259
+ "type": "integer",
1260
+ "format": "int32",
1261
+ "nullable": true
1262
+ },
1263
+ "plain_text": {
1264
+ "type": "string",
1265
+ "nullable": true
1266
+ },
1267
+ "preview": {
1268
+ "type": "string",
1269
+ "nullable": true
1270
+ },
1271
+ "preview_plain_text": {
1272
+ "type": "string",
1273
+ "nullable": true
1274
+ },
1275
+ "headers": {
1276
+ "$ref": "#/components/schemas/headers"
1277
+ },
1278
+ "has_more": {
1279
+ "type": "boolean",
1280
+ "nullable": true
1281
+ },
1282
+ "sent_to_self": {
1283
+ "type": "boolean",
1284
+ "nullable": true
1285
+ },
1286
+ "bot_id": {
1287
+ "type": "string",
1288
+ "nullable": true
1289
+ },
1290
+ "has_rich_preview": {
1291
+ "type": "boolean",
1292
+ "nullable": true
1293
+ },
1294
+ "file_access": {
1295
+ "type": "string",
1296
+ "nullable": true
1297
+ }
1298
+ }
1299
+ },
1300
+ "followUpEmailResponse": {
1301
+ "type": "object",
1302
+ "properties": {
1303
+ "success": {
1304
+ "type": "boolean"
1305
+ },
1306
+ "message": {
1307
+ "type": "string"
1308
+ },
1309
+ "result": {
1310
+ "type": "string"
1311
+ },
1312
+ "companyName": {
1313
+ "type": "string"
1314
+ },
1315
+ "contactId": {
1316
+ "type": "string"
1317
+ }
1318
+ }
1319
+ },
1320
+ "from": {
1321
+ "type": "object",
1322
+ "properties": {
1323
+ "address": {
1324
+ "type": "string",
1325
+ "nullable": true
1326
+ },
1327
+ "name": {
1328
+ "type": "string",
1329
+ "nullable": true
1330
+ },
1331
+ "original": {
1332
+ "type": "string",
1333
+ "nullable": true
1334
+ }
1335
+ }
1336
+ },
1337
+ "headers": {
1338
+ "type": "object",
1339
+ "properties": {
1340
+ "date": {
1341
+ "type": "string",
1342
+ "nullable": true
1343
+ },
1344
+ "in_reply_to": {
1345
+ "type": "string",
1346
+ "nullable": true
1347
+ },
1348
+ "reply_to": {
1349
+ "type": "object",
1350
+ "nullable": true
1351
+ },
1352
+ "message_id": {
1353
+ "type": "string",
1354
+ "nullable": true
1355
+ }
1356
+ },
1357
+ "nullable": true
1358
+ },
1359
+ "inputChatMessage": {
1360
+ "type": "object",
1361
+ "properties": {
1362
+ "role": {
1363
+ "type": "string"
1364
+ },
1365
+ "content": {
1366
+ "type": "string"
1367
+ },
1368
+ "type": {
1369
+ "type": "string"
1370
+ }
1371
+ }
1372
+ },
1373
+ "parameters": {
1374
+ "type": "object",
1375
+ "properties": {
1376
+ "type": {
1377
+ "type": "string",
1378
+ "nullable": true
1379
+ },
1380
+ "properties": {
1381
+ "type": "object",
1382
+ "additionalProperties": {
1383
+ "$ref": "#/components/schemas/property"
1384
+ },
1385
+ "nullable": true
1386
+ },
1387
+ "required": {
1388
+ "type": "array",
1389
+ "items": {
1390
+ "type": "string"
1391
+ },
1392
+ "nullable": true
1393
+ }
1394
+ },
1395
+ "nullable": true
1396
+ },
1397
+ "property": {
1398
+ "type": "object",
1399
+ "properties": {
1400
+ "type": {
1401
+ "type": "string",
1402
+ "nullable": true
1403
+ },
1404
+ "description": {
1405
+ "type": "string",
1406
+ "nullable": true
1407
+ }
1408
+ }
1409
+ },
1410
+ "realtimeAgentsDto": {
1411
+ "type": "object",
1412
+ "properties": {
1413
+ "context": {
1414
+ "type": "string"
1415
+ },
1416
+ "description": {
1417
+ "type": "string"
1418
+ }
1419
+ }
1420
+ },
1421
+ "realtimeSession": {
1422
+ "type": "object",
1423
+ "properties": {
1424
+ "id": {
1425
+ "type": "string",
1426
+ "nullable": true
1427
+ },
1428
+ "object": {
1429
+ "type": "string",
1430
+ "nullable": true
1431
+ },
1432
+ "expires_at": {
1433
+ "type": "integer",
1434
+ "format": "int64",
1435
+ "nullable": true
1436
+ },
1437
+ "input_audio_noise_reduction": {
1438
+ "type": "object",
1439
+ "nullable": true
1440
+ },
1441
+ "turn_detection": {
1442
+ "$ref": "#/components/schemas/turnDetection"
1443
+ },
1444
+ "input_audio_format": {
1445
+ "type": "string",
1446
+ "nullable": true
1447
+ },
1448
+ "input_audio_transcription": {
1449
+ "type": "object",
1450
+ "nullable": true
1451
+ },
1452
+ "client_secret": {
1453
+ "$ref": "#/components/schemas/clientSecret"
1454
+ },
1455
+ "include": {
1456
+ "type": "object",
1457
+ "nullable": true
1458
+ },
1459
+ "model": {
1460
+ "type": "string",
1461
+ "nullable": true
1462
+ },
1463
+ "modalities": {
1464
+ "type": "array",
1465
+ "items": {
1466
+ "type": "string"
1467
+ },
1468
+ "nullable": true
1469
+ },
1470
+ "instructions": {
1471
+ "type": "string",
1472
+ "nullable": true
1473
+ },
1474
+ "voice": {
1475
+ "type": "string",
1476
+ "nullable": true
1477
+ },
1478
+ "output_audio_format": {
1479
+ "type": "string",
1480
+ "nullable": true
1481
+ },
1482
+ "tool_choice": {
1483
+ "type": "string",
1484
+ "nullable": true
1485
+ },
1486
+ "temperature": {
1487
+ "type": "number",
1488
+ "format": "double",
1489
+ "nullable": true
1490
+ },
1491
+ "max_response_output_tokens": {
1492
+ "type": "string",
1493
+ "nullable": true
1494
+ },
1495
+ "tools": {
1496
+ "type": "array",
1497
+ "items": {
1498
+ "$ref": "#/components/schemas/tool"
1499
+ },
1500
+ "nullable": true
1501
+ }
1502
+ }
1503
+ },
1504
+ "simpleResponseDto": {
1505
+ "type": "object",
1506
+ "properties": {
1507
+ "answer": {
1508
+ "type": "string"
1509
+ }
1510
+ }
1511
+ },
1512
+ "slackEvent": {
1513
+ "type": "object",
1514
+ "properties": {
1515
+ "token": {
1516
+ "type": "string",
1517
+ "nullable": true
1518
+ },
1519
+ "team_id": {
1520
+ "type": "string",
1521
+ "nullable": true
1522
+ },
1523
+ "context_team_id": {
1524
+ "type": "string",
1525
+ "nullable": true
1526
+ },
1527
+ "context_enterprise_id": {
1528
+ "type": "object",
1529
+ "nullable": true
1530
+ },
1531
+ "api_app_id": {
1532
+ "type": "string",
1533
+ "nullable": true
1534
+ },
1535
+ "event": {
1536
+ "$ref": "#/components/schemas/event"
1537
+ },
1538
+ "type": {
1539
+ "type": "string",
1540
+ "nullable": true
1541
+ },
1542
+ "event_id": {
1543
+ "type": "string",
1544
+ "nullable": true
1545
+ },
1546
+ "event_time": {
1547
+ "type": "integer",
1548
+ "format": "int32",
1549
+ "nullable": true
1550
+ },
1551
+ "authorizations": {
1552
+ "type": "array",
1553
+ "items": {
1554
+ "$ref": "#/components/schemas/authorization"
1555
+ },
1556
+ "nullable": true
1557
+ },
1558
+ "is_ext_shared_channel": {
1559
+ "type": "boolean",
1560
+ "nullable": true
1561
+ },
1562
+ "event_context": {
1563
+ "type": "string",
1564
+ "nullable": true
1565
+ }
1566
+ }
1567
+ },
1568
+ "to": {
1569
+ "type": "object",
1570
+ "properties": {
1571
+ "address": {
1572
+ "type": "string",
1573
+ "nullable": true
1574
+ },
1575
+ "name": {
1576
+ "type": "string",
1577
+ "nullable": true
1578
+ },
1579
+ "original": {
1580
+ "type": "string",
1581
+ "nullable": true
1582
+ }
1583
+ }
1584
+ },
1585
+ "tool": {
1586
+ "type": "object",
1587
+ "properties": {
1588
+ "name": {
1589
+ "type": "string",
1590
+ "nullable": true
1591
+ },
1592
+ "description": {
1593
+ "type": "string",
1594
+ "nullable": true
1595
+ },
1596
+ "parameters": {
1597
+ "$ref": "#/components/schemas/parameters"
1598
+ },
1599
+ "type": {
1600
+ "type": "string",
1601
+ "nullable": true
1602
+ }
1603
+ }
1604
+ },
1605
+ "turnDetection": {
1606
+ "type": "object",
1607
+ "properties": {
1608
+ "type": {
1609
+ "type": "string",
1610
+ "nullable": true
1611
+ },
1612
+ "threshold": {
1613
+ "type": "number",
1614
+ "format": "double",
1615
+ "nullable": true
1616
+ },
1617
+ "prefix_padding_ms": {
1618
+ "type": "integer",
1619
+ "format": "int32",
1620
+ "nullable": true
1621
+ },
1622
+ "silence_duration_ms": {
1623
+ "type": "integer",
1624
+ "format": "int32",
1625
+ "nullable": true
1626
+ },
1627
+ "create_response": {
1628
+ "type": "boolean",
1629
+ "nullable": true
1630
+ },
1631
+ "interrupt_response": {
1632
+ "type": "boolean",
1633
+ "nullable": true
1634
+ }
1635
+ },
1636
+ "nullable": true
1637
+ }
1638
+ },
1639
+ "securitySchemes": {
1640
+ "Implicit": {
1641
+ "type": "oauth2",
1642
+ "flows": {
1643
+ "implicit": {
1644
+ "authorizationUrl": "https://login.microsoftonline.com/a8533784-aa3c-403b-a61a-1533ecc6e3ed/oauth2/v2.0/authorize",
1645
+ "tokenUrl": "https://login.microsoftonline.com/a8533784-aa3c-403b-a61a-1533ecc6e3ed/oauth2/v2.0/token",
1646
+ "refreshUrl": "https://login.microsoftonline.com/a8533784-aa3c-403b-a61a-1533ecc6e3ed/oauth2/v2.0/token",
1647
+ "scopes": {
1648
+ "api://1cb6ee2c-d1ef-4a71-b341-b8b79c272f22/user_impersonation": "Default function scope"
1649
+ }
1650
+ }
1651
+ }
1652
+ }
1653
+ }
1654
+ }
1655
+ }