@elevasis/core 0.15.0 → 0.16.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.
- package/dist/index.d.ts +1718 -19
- package/dist/index.js +369 -25
- package/dist/organization-model/index.d.ts +1718 -19
- package/dist/organization-model/index.js +369 -25
- package/dist/test-utils/index.d.ts +1108 -371
- package/dist/test-utils/index.js +357 -17
- package/package.json +5 -1
- package/src/__tests__/publish.test.ts +14 -13
- package/src/__tests__/template-core-compatibility.test.ts +4 -4
- package/src/_gen/__tests__/__snapshots__/contracts.md.snap +1109 -882
- package/src/auth/multi-tenancy/index.ts +3 -0
- package/src/auth/multi-tenancy/theme-presets.ts +45 -0
- package/src/auth/multi-tenancy/types.ts +57 -83
- package/src/auth/multi-tenancy/users/api-schemas.ts +165 -194
- package/src/business/acquisition/activity-events.ts +13 -4
- package/src/business/acquisition/api-schemas.test.ts +315 -4
- package/src/business/acquisition/api-schemas.ts +122 -8
- package/src/business/acquisition/build-templates.ts +44 -0
- package/src/business/acquisition/crm-next-action.test.ts +262 -0
- package/src/business/acquisition/crm-next-action.ts +220 -0
- package/src/business/acquisition/crm-priority.test.ts +216 -0
- package/src/business/acquisition/crm-priority.ts +349 -0
- package/src/business/acquisition/crm-state-actions.test.ts +151 -160
- package/src/business/acquisition/deal-ownership.test.ts +351 -0
- package/src/business/acquisition/deal-ownership.ts +120 -0
- package/src/business/acquisition/derive-actions.test.ts +101 -37
- package/src/business/acquisition/derive-actions.ts +102 -87
- package/src/business/acquisition/index.ts +10 -0
- package/src/business/acquisition/types.ts +400 -366
- package/src/business/crm/api-schemas.ts +40 -0
- package/src/business/crm/index.ts +1 -0
- package/src/business/deals/api-schemas.ts +79 -0
- package/src/business/deals/index.ts +1 -0
- package/src/business/projects/types.ts +124 -88
- package/src/execution/core/runner-types.ts +61 -80
- package/src/execution/engine/index.ts +4 -3
- package/src/execution/engine/tools/integration/server/adapters/gmail/gmail-tools.ts +105 -104
- package/src/execution/engine/tools/integration/server/adapters/instantly/instantly-tools.ts +1474 -1473
- package/src/execution/engine/tools/integration/server/adapters/millionverifier/millionverifier-tools.ts +103 -102
- package/src/execution/engine/tools/integration/server/adapters/signature-api/signature-api-tools.ts +182 -179
- package/src/execution/engine/tools/integration/server/adapters/stripe/stripe-tools.ts +310 -309
- package/src/execution/engine/tools/integration/tool.ts +255 -253
- package/src/execution/engine/tools/lead-service-types.ts +939 -924
- package/src/execution/engine/tools/messages.ts +43 -0
- package/src/execution/engine/tools/platform/acquisition/list-tools.ts +6 -5
- package/src/execution/engine/tools/platform/acquisition/types.ts +5 -2
- package/src/execution/engine/tools/platform/email/types.ts +97 -96
- package/src/execution/engine/tools/registry.ts +4 -3
- package/src/execution/engine/tools/tool-maps.ts +3 -1
- package/src/execution/engine/tools/types.ts +234 -233
- package/src/execution/engine/workflow/types.ts +195 -193
- package/src/execution/external/api-schemas.ts +40 -0
- package/src/execution/external/index.ts +1 -0
- package/src/knowledge/README.md +32 -0
- package/src/knowledge/__tests__/queries.test.ts +504 -0
- package/src/knowledge/format.ts +99 -0
- package/src/knowledge/index.ts +5 -0
- package/src/knowledge/queries.ts +256 -0
- package/src/organization-model/__tests__/defaults.test.ts +172 -172
- package/src/organization-model/__tests__/foundation.test.ts +7 -7
- package/src/organization-model/__tests__/icons.test.ts +27 -0
- package/src/organization-model/__tests__/knowledge.test.ts +214 -0
- package/src/organization-model/contracts.ts +17 -15
- package/src/organization-model/defaults.ts +74 -19
- package/src/organization-model/domains/knowledge.ts +53 -0
- package/src/organization-model/domains/navigation.ts +416 -399
- package/src/organization-model/domains/prospecting.ts +204 -1
- package/src/organization-model/domains/sales.test.ts +29 -0
- package/src/organization-model/domains/sales.ts +102 -0
- package/src/organization-model/domains/shared.ts +6 -5
- package/src/organization-model/foundation.ts +10 -6
- package/src/organization-model/graph/build.ts +209 -182
- package/src/organization-model/graph/schema.ts +37 -34
- package/src/organization-model/graph/types.ts +47 -31
- package/src/organization-model/icons.ts +81 -0
- package/src/organization-model/index.ts +8 -3
- package/src/organization-model/organization-model.mdx +1 -1
- package/src/organization-model/published.ts +103 -86
- package/src/organization-model/schema.ts +90 -85
- package/src/organization-model/types.ts +42 -35
- package/src/platform/constants/versions.ts +1 -1
- package/src/platform/index.ts +23 -27
- package/src/platform/registry/index.ts +0 -4
- package/src/platform/registry/resource-registry.ts +0 -77
- package/src/platform/registry/serialized-types.ts +148 -219
- package/src/platform/registry/stats-types.ts +60 -60
- package/src/reference/_generated/contracts.md +829 -595
- package/src/supabase/database.types.ts +2978 -2958
|
@@ -1,1473 +1,1474 @@
|
|
|
1
|
-
import { z } from 'zod'
|
|
2
|
-
import { createIntegrationTool } from '../../../tool'
|
|
3
|
-
import type { Tool } from '../../../../types'
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* @
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
-
|
|
29
|
-
-
|
|
30
|
-
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
* @
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
-
|
|
100
|
-
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
"
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
"
|
|
116
|
-
"
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
*
|
|
139
|
-
*
|
|
140
|
-
*
|
|
141
|
-
*
|
|
142
|
-
* @
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
-
|
|
152
|
-
-
|
|
153
|
-
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
-
|
|
158
|
-
-
|
|
159
|
-
-
|
|
160
|
-
-
|
|
161
|
-
-
|
|
162
|
-
-
|
|
163
|
-
-
|
|
164
|
-
-
|
|
165
|
-
-
|
|
166
|
-
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
"
|
|
177
|
-
"
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
"
|
|
184
|
-
"
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
"
|
|
191
|
-
"
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
.
|
|
199
|
-
.
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
*
|
|
226
|
-
*
|
|
227
|
-
*
|
|
228
|
-
*
|
|
229
|
-
*
|
|
230
|
-
* @
|
|
231
|
-
*
|
|
232
|
-
*
|
|
233
|
-
*
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
-
|
|
243
|
-
-
|
|
244
|
-
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
-
|
|
249
|
-
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
"
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
"
|
|
269
|
-
"
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
"
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
.
|
|
283
|
-
.
|
|
284
|
-
.
|
|
285
|
-
.
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
*
|
|
304
|
-
*
|
|
305
|
-
*
|
|
306
|
-
*
|
|
307
|
-
* @
|
|
308
|
-
*
|
|
309
|
-
*
|
|
310
|
-
*
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
-
|
|
320
|
-
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
-
|
|
329
|
-
-
|
|
330
|
-
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
"
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
"
|
|
342
|
-
"
|
|
343
|
-
"
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
"
|
|
352
|
-
"
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
.
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
*
|
|
385
|
-
*
|
|
386
|
-
*
|
|
387
|
-
*
|
|
388
|
-
* @
|
|
389
|
-
*
|
|
390
|
-
*
|
|
391
|
-
*
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
-
|
|
401
|
-
-
|
|
402
|
-
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
-
|
|
407
|
-
-
|
|
408
|
-
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
"
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
"
|
|
427
|
-
"
|
|
428
|
-
"
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
.
|
|
439
|
-
.
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
}
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
*
|
|
467
|
-
*
|
|
468
|
-
*
|
|
469
|
-
*
|
|
470
|
-
* @
|
|
471
|
-
*
|
|
472
|
-
*
|
|
473
|
-
*
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
-
|
|
483
|
-
-
|
|
484
|
-
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
"
|
|
498
|
-
"
|
|
499
|
-
"
|
|
500
|
-
"
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
}
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
*
|
|
524
|
-
*
|
|
525
|
-
*
|
|
526
|
-
*
|
|
527
|
-
* @
|
|
528
|
-
*
|
|
529
|
-
*
|
|
530
|
-
*
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
-
|
|
540
|
-
-
|
|
541
|
-
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
-
|
|
549
|
-
-
|
|
550
|
-
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
"
|
|
556
|
-
"
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
"
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
}
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
*
|
|
587
|
-
*
|
|
588
|
-
*
|
|
589
|
-
*
|
|
590
|
-
* @
|
|
591
|
-
*
|
|
592
|
-
*
|
|
593
|
-
*
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
-
|
|
603
|
-
-
|
|
604
|
-
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
"
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
}
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
*
|
|
638
|
-
*
|
|
639
|
-
*
|
|
640
|
-
*
|
|
641
|
-
* @
|
|
642
|
-
*
|
|
643
|
-
*
|
|
644
|
-
*
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
-
|
|
654
|
-
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
"
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
}
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
*
|
|
688
|
-
*
|
|
689
|
-
*
|
|
690
|
-
*
|
|
691
|
-
* @
|
|
692
|
-
*
|
|
693
|
-
*
|
|
694
|
-
*
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
-
|
|
704
|
-
-
|
|
705
|
-
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
"
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
}
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
*
|
|
739
|
-
*
|
|
740
|
-
*
|
|
741
|
-
*
|
|
742
|
-
* @
|
|
743
|
-
*
|
|
744
|
-
*
|
|
745
|
-
*
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
-
|
|
755
|
-
-
|
|
756
|
-
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
"
|
|
769
|
-
"
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
"
|
|
776
|
-
"
|
|
777
|
-
"
|
|
778
|
-
"
|
|
779
|
-
"
|
|
780
|
-
"
|
|
781
|
-
"
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
}
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
*
|
|
810
|
-
*
|
|
811
|
-
*
|
|
812
|
-
*
|
|
813
|
-
* @
|
|
814
|
-
*
|
|
815
|
-
*
|
|
816
|
-
*
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
-
|
|
826
|
-
-
|
|
827
|
-
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
"
|
|
843
|
-
"
|
|
844
|
-
"
|
|
845
|
-
"
|
|
846
|
-
"
|
|
847
|
-
"
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
"
|
|
852
|
-
"
|
|
853
|
-
"
|
|
854
|
-
"
|
|
855
|
-
"
|
|
856
|
-
"
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
}
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
*
|
|
890
|
-
*
|
|
891
|
-
*
|
|
892
|
-
*
|
|
893
|
-
* @
|
|
894
|
-
*
|
|
895
|
-
*
|
|
896
|
-
*
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
-
|
|
906
|
-
-
|
|
907
|
-
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
-
|
|
916
|
-
-
|
|
917
|
-
-
|
|
918
|
-
-
|
|
919
|
-
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
"
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
"
|
|
928
|
-
"
|
|
929
|
-
"
|
|
930
|
-
"
|
|
931
|
-
"
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
"
|
|
940
|
-
"
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
.
|
|
956
|
-
.
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
.
|
|
961
|
-
.
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
.
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
}
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
*
|
|
988
|
-
*
|
|
989
|
-
*
|
|
990
|
-
*
|
|
991
|
-
* @
|
|
992
|
-
*
|
|
993
|
-
*
|
|
994
|
-
*
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
-
|
|
1004
|
-
-
|
|
1005
|
-
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
"
|
|
1022
|
-
"
|
|
1023
|
-
"
|
|
1024
|
-
"
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
.
|
|
1035
|
-
.
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
}
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
*
|
|
1062
|
-
*
|
|
1063
|
-
*
|
|
1064
|
-
*
|
|
1065
|
-
* @
|
|
1066
|
-
*
|
|
1067
|
-
*
|
|
1068
|
-
*
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
-
|
|
1078
|
-
-
|
|
1079
|
-
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
-
|
|
1087
|
-
-
|
|
1088
|
-
-
|
|
1089
|
-
-
|
|
1090
|
-
-
|
|
1091
|
-
-
|
|
1092
|
-
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
"
|
|
1098
|
-
"
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
"
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
"
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
"
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
"
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
"
|
|
1126
|
-
"
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
.
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
.
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
}
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
*
|
|
1177
|
-
*
|
|
1178
|
-
*
|
|
1179
|
-
*
|
|
1180
|
-
* @
|
|
1181
|
-
*
|
|
1182
|
-
*
|
|
1183
|
-
*
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
-
|
|
1193
|
-
-
|
|
1194
|
-
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
"
|
|
1207
|
-
"
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
"
|
|
1214
|
-
"
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
}
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
*
|
|
1238
|
-
*
|
|
1239
|
-
*
|
|
1240
|
-
*
|
|
1241
|
-
* @
|
|
1242
|
-
*
|
|
1243
|
-
*
|
|
1244
|
-
*
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
-
|
|
1254
|
-
-
|
|
1255
|
-
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
-
|
|
1260
|
-
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
"
|
|
1266
|
-
"
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
"
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
"
|
|
1281
|
-
"
|
|
1282
|
-
"
|
|
1283
|
-
"
|
|
1284
|
-
"
|
|
1285
|
-
"
|
|
1286
|
-
"
|
|
1287
|
-
"
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
}
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
*
|
|
1325
|
-
*
|
|
1326
|
-
*
|
|
1327
|
-
*
|
|
1328
|
-
* @
|
|
1329
|
-
*
|
|
1330
|
-
*
|
|
1331
|
-
*
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
-
|
|
1341
|
-
-
|
|
1342
|
-
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
-
|
|
1347
|
-
-
|
|
1348
|
-
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
"
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
"
|
|
1369
|
-
"
|
|
1370
|
-
"
|
|
1371
|
-
"
|
|
1372
|
-
"
|
|
1373
|
-
"
|
|
1374
|
-
"
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
|
|
1386
|
-
.
|
|
1387
|
-
.
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
}
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
*
|
|
1417
|
-
*
|
|
1418
|
-
*
|
|
1419
|
-
*
|
|
1420
|
-
* @
|
|
1421
|
-
*
|
|
1422
|
-
*
|
|
1423
|
-
*
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
-
|
|
1433
|
-
-
|
|
1434
|
-
-
|
|
1435
|
-
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
-
|
|
1439
|
-
-
|
|
1440
|
-
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
"
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
|
|
1472
|
-
|
|
1473
|
-
}
|
|
1
|
+
import { z } from 'zod'
|
|
2
|
+
import { createIntegrationTool } from '../../../tool'
|
|
3
|
+
import type { Tool } from '../../../../types'
|
|
4
|
+
import { EmailSchema } from '../../../../../../../platform/utils/validation'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Create Instantly send reply tool
|
|
8
|
+
*
|
|
9
|
+
* Sends a reply to an email thread maintaining proper threading.
|
|
10
|
+
*
|
|
11
|
+
* @param credentialName - Name of credential in credentials table
|
|
12
|
+
* @returns Tool that sends email replies via Instantly
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* const sendReply = createInstantlySendReplyTool('instantly-elevasis')
|
|
16
|
+
*/
|
|
17
|
+
export function createInstantlySendReplyTool(credentialName: string): Tool {
|
|
18
|
+
return createIntegrationTool({
|
|
19
|
+
name: 'instantly_send_reply',
|
|
20
|
+
description: `Send a reply to an email thread via Instantly.ai
|
|
21
|
+
|
|
22
|
+
USE CASES:
|
|
23
|
+
- Send a personalized reply to a prospect who responded to your outreach campaign
|
|
24
|
+
- Maintain email threading for organized conversations
|
|
25
|
+
- Schedule replies for future delivery
|
|
26
|
+
|
|
27
|
+
REQUIRED PARAMETERS:
|
|
28
|
+
- eaccount: Email account that will send the reply (must be connected to workspace)
|
|
29
|
+
- reply_to_uuid: UUID of the email you are replying to (from webhook payload)
|
|
30
|
+
- subject: Subject line of the reply (typically "Re: Original Subject")
|
|
31
|
+
- body: Email body (must provide either text or html)
|
|
32
|
+
|
|
33
|
+
OPTIONAL PARAMETERS:
|
|
34
|
+
- timestamp: ISO timestamp to schedule reply for future
|
|
35
|
+
|
|
36
|
+
EXAMPLE:
|
|
37
|
+
{
|
|
38
|
+
"eaccount": "alex@elevasis.com",
|
|
39
|
+
"reply_to_uuid": "123e4567-e89b-12d3-a456-426614174000",
|
|
40
|
+
"subject": "Re: Automate your client acquisition",
|
|
41
|
+
"body": {
|
|
42
|
+
"text": "Thanks for your interest! Here's my calendar: https://calendly.com/..."
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
OUTPUT:
|
|
47
|
+
{
|
|
48
|
+
"success": true,
|
|
49
|
+
"email_id": "email-abc123",
|
|
50
|
+
"thread_id": "thread-xyz789",
|
|
51
|
+
"sent_at": "2025-12-22T14:30:00Z"
|
|
52
|
+
}`,
|
|
53
|
+
|
|
54
|
+
inputSchema: z.object({
|
|
55
|
+
eaccount: z.string().describe('Email account that will send the reply (must be connected to workspace)'),
|
|
56
|
+
reply_to_uuid: z.string().describe('UUID of the email you are replying to (from webhook payload)'),
|
|
57
|
+
subject: z.string().describe('Subject line of the reply (typically "Re: Original Subject")'),
|
|
58
|
+
body: z
|
|
59
|
+
.object({
|
|
60
|
+
text: z.string().optional().describe('Plain text email body'),
|
|
61
|
+
html: z.string().optional().describe('HTML email body')
|
|
62
|
+
})
|
|
63
|
+
.refine((data) => data.text || data.html, {
|
|
64
|
+
message: 'Must provide either text or html body'
|
|
65
|
+
}),
|
|
66
|
+
timestamp: z.string().optional().describe('ISO timestamp to schedule reply for future (optional)')
|
|
67
|
+
}),
|
|
68
|
+
|
|
69
|
+
outputSchema: z.object({
|
|
70
|
+
success: z.boolean().describe('Whether reply was sent successfully'),
|
|
71
|
+
email_id: z.string().describe('ID of the sent email'),
|
|
72
|
+
thread_id: z.string().describe('Thread ID for conversation tracking'),
|
|
73
|
+
sent_at: z.string().describe('Timestamp when email was sent')
|
|
74
|
+
}),
|
|
75
|
+
|
|
76
|
+
integration: 'instantly' as const,
|
|
77
|
+
method: 'sendReply' as const,
|
|
78
|
+
credentialName
|
|
79
|
+
})
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Create Instantly remove from subsequence tool
|
|
84
|
+
*
|
|
85
|
+
* Removes a lead from a campaign sequence to stop further outreach.
|
|
86
|
+
*
|
|
87
|
+
* @param credentialName - Name of credential in credentials table
|
|
88
|
+
* @returns Tool that removes leads from campaigns
|
|
89
|
+
*
|
|
90
|
+
* @example
|
|
91
|
+
* const removeFromCampaign = createInstantlyRemoveFromSubsequenceTool('instantly-elevasis')
|
|
92
|
+
*/
|
|
93
|
+
export function createInstantlyRemoveFromSubsequenceTool(credentialName: string): Tool {
|
|
94
|
+
return createIntegrationTool({
|
|
95
|
+
name: 'instantly_remove_from_subsequence',
|
|
96
|
+
description: `Remove a lead from an Instantly campaign subsequence
|
|
97
|
+
|
|
98
|
+
USE CASES:
|
|
99
|
+
- Stop a lead from receiving further emails in a campaign
|
|
100
|
+
- Use after positive reply, hard-no, or disqualification
|
|
101
|
+
- Prevent over-emailing engaged prospects
|
|
102
|
+
|
|
103
|
+
REQUIRED PARAMETERS:
|
|
104
|
+
- lead_email: Email address of the lead to remove
|
|
105
|
+
- campaign_id: Campaign ID to remove lead from
|
|
106
|
+
|
|
107
|
+
EXAMPLE:
|
|
108
|
+
{
|
|
109
|
+
"lead_email": "prospect@agency.com",
|
|
110
|
+
"campaign_id": "campaign-123"
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
OUTPUT:
|
|
114
|
+
{
|
|
115
|
+
"success": true,
|
|
116
|
+
"lead_email": "prospect@agency.com",
|
|
117
|
+
"campaign_id": "campaign-123"
|
|
118
|
+
}`,
|
|
119
|
+
|
|
120
|
+
inputSchema: z.object({
|
|
121
|
+
lead_email: EmailSchema.describe('Email address of the lead to remove'),
|
|
122
|
+
campaign_id: z.string().describe('Campaign ID to remove lead from')
|
|
123
|
+
}),
|
|
124
|
+
|
|
125
|
+
outputSchema: z.object({
|
|
126
|
+
success: z.boolean().describe('Whether removal was successful'),
|
|
127
|
+
lead_email: z.string().describe('Email of the removed lead'),
|
|
128
|
+
campaign_id: z.string().describe('Campaign ID lead was removed from')
|
|
129
|
+
}),
|
|
130
|
+
|
|
131
|
+
integration: 'instantly' as const,
|
|
132
|
+
method: 'removeFromSubsequence' as const,
|
|
133
|
+
credentialName
|
|
134
|
+
})
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Create Instantly get emails tool
|
|
139
|
+
*
|
|
140
|
+
* Fetches email data from Instantly workspace with optional filtering and pagination.
|
|
141
|
+
*
|
|
142
|
+
* @param credentialName - Name of credential in credentials table
|
|
143
|
+
* @returns Tool that retrieves email data
|
|
144
|
+
*/
|
|
145
|
+
export function createInstantlyGetEmailsTool(credentialName: string): Tool {
|
|
146
|
+
return createIntegrationTool({
|
|
147
|
+
name: 'instantly_get_emails',
|
|
148
|
+
description: `Get emails from Instantly workspace
|
|
149
|
+
|
|
150
|
+
USE CASES:
|
|
151
|
+
- Fetch a specific email by ID for reply processing
|
|
152
|
+
- Retrieve full email threads by thread ID
|
|
153
|
+
- Filter emails by campaign, lead, or type
|
|
154
|
+
- List recent emails with cursor pagination
|
|
155
|
+
|
|
156
|
+
OPTIONAL PARAMETERS:
|
|
157
|
+
- email_id: Specific email ID to fetch (returns single email)
|
|
158
|
+
- search: Email address OR "thread:{thread_id}" for thread retrieval
|
|
159
|
+
- campaign_id: Filter by campaign UUID
|
|
160
|
+
- lead: Filter by lead email address
|
|
161
|
+
- email_type: Filter by type (received, sent, manual)
|
|
162
|
+
- eaccount: Filter by sending account (comma-separated)
|
|
163
|
+
- sort_order: Sort by creation date (asc, desc; default: desc)
|
|
164
|
+
- preview_only: Return preview only (lighter response)
|
|
165
|
+
- is_unread: Filter by unread status
|
|
166
|
+
- limit: Items per page (1-100)
|
|
167
|
+
- starting_after: Cursor for pagination (from next_starting_after in previous response)
|
|
168
|
+
|
|
169
|
+
EXAMPLE (Single Email):
|
|
170
|
+
{
|
|
171
|
+
"email_id": "email-abc123"
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
EXAMPLE (Thread Retrieval):
|
|
175
|
+
{
|
|
176
|
+
"search": "thread:019a449c-f57a-73b2-91b5-75537ca85008",
|
|
177
|
+
"sort_order": "asc",
|
|
178
|
+
"limit": 50
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
EXAMPLE (Lead Emails in Campaign):
|
|
182
|
+
{
|
|
183
|
+
"lead": "jondoe@example.com",
|
|
184
|
+
"campaign_id": "019a449c-f57a-73b2-91b5-754f1fca9f44",
|
|
185
|
+
"sort_order": "asc"
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
OUTPUT:
|
|
189
|
+
{
|
|
190
|
+
"emails": [...email data...],
|
|
191
|
+
"total_count": 3,
|
|
192
|
+
"next_starting_after": "cursor-token-or-undefined"
|
|
193
|
+
}`,
|
|
194
|
+
|
|
195
|
+
inputSchema: z.object({
|
|
196
|
+
email_id: z.string().optional().describe('Specific email ID to fetch'),
|
|
197
|
+
search: z
|
|
198
|
+
.string()
|
|
199
|
+
.optional()
|
|
200
|
+
.describe('Search query: email address or "thread:{thread_id}" for thread retrieval'),
|
|
201
|
+
campaign_id: z.string().optional().describe('Filter by campaign UUID'),
|
|
202
|
+
lead: z.string().optional().describe('Filter by lead email address'),
|
|
203
|
+
email_type: z.enum(['received', 'sent', 'manual']).optional().describe('Filter by email type'),
|
|
204
|
+
eaccount: z.string().optional().describe('Filter by sending account (comma-separated)'),
|
|
205
|
+
sort_order: z.enum(['asc', 'desc']).optional().describe('Sort order by creation date (default: desc)'),
|
|
206
|
+
preview_only: z.boolean().optional().describe('Return preview only (lighter response)'),
|
|
207
|
+
is_unread: z.boolean().optional().describe('Filter by unread status'),
|
|
208
|
+
limit: z.number().min(1).max(100).optional().describe('Items per page (1-100)'),
|
|
209
|
+
starting_after: z.string().optional().describe('Cursor for pagination (from next_starting_after)')
|
|
210
|
+
}),
|
|
211
|
+
|
|
212
|
+
outputSchema: z.object({
|
|
213
|
+
emails: z.array(z.unknown()).describe('Array of email data'),
|
|
214
|
+
total_count: z.number().describe('Count of emails returned'),
|
|
215
|
+
next_starting_after: z.string().optional().describe('Cursor for next page (undefined = no more)')
|
|
216
|
+
}),
|
|
217
|
+
|
|
218
|
+
integration: 'instantly' as const,
|
|
219
|
+
method: 'getEmails' as const,
|
|
220
|
+
credentialName
|
|
221
|
+
})
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* Create Instantly update interest status tool
|
|
226
|
+
*
|
|
227
|
+
* Updates the interest status of a lead, which can stop email sequences,
|
|
228
|
+
* mark leads as interested, or reset to default status.
|
|
229
|
+
*
|
|
230
|
+
* @param credentialName - Name of credential in credentials table
|
|
231
|
+
* @returns Tool that updates lead interest status
|
|
232
|
+
*
|
|
233
|
+
* @example
|
|
234
|
+
* const updateStatus = createInstantlyUpdateInterestStatusTool('instantly-elevasis')
|
|
235
|
+
*/
|
|
236
|
+
export function createInstantlyUpdateInterestStatusTool(credentialName: string): Tool {
|
|
237
|
+
return createIntegrationTool({
|
|
238
|
+
name: 'instantly_update_interest_status',
|
|
239
|
+
description: `Update interest status of a lead in Instantly
|
|
240
|
+
|
|
241
|
+
USE CASES:
|
|
242
|
+
- Stop email sequence for leads who reply with "unsubscribe" or "not interested" (set interest_value: -1)
|
|
243
|
+
- Mark engaged leads as interested for prioritization (set interest_value: 1)
|
|
244
|
+
- Reset lead status back to default (set interest_value: 0)
|
|
245
|
+
- Comply with opt-out requests to protect sender reputation
|
|
246
|
+
|
|
247
|
+
INTEREST VALUES:
|
|
248
|
+
- 1: Interested - Marks lead as interested
|
|
249
|
+
- 0: Lead (default) - Resets to default status
|
|
250
|
+
- -1: Not Interested - STOPS sequence (no more emails sent)
|
|
251
|
+
|
|
252
|
+
REQUIRED PARAMETERS:
|
|
253
|
+
- lead_email: Email address of the lead
|
|
254
|
+
- interest_value: Status value (1, 0, or -1)
|
|
255
|
+
|
|
256
|
+
OPTIONAL PARAMETERS:
|
|
257
|
+
- campaign_id: Limit status update to specific campaign (UUID)
|
|
258
|
+
- disable_auto_interest: Disable AI auto-tagging for this lead
|
|
259
|
+
|
|
260
|
+
EXAMPLE (Stop Sequence):
|
|
261
|
+
{
|
|
262
|
+
"lead_email": "prospect@agency.com",
|
|
263
|
+
"interest_value": -1
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
EXAMPLE (Mark Interested in Specific Campaign):
|
|
267
|
+
{
|
|
268
|
+
"lead_email": "prospect@agency.com",
|
|
269
|
+
"interest_value": 1,
|
|
270
|
+
"campaign_id": "019bb2e9-5d96-7f1d-9bc1-c0ef73001b43"
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
OUTPUT:
|
|
274
|
+
{
|
|
275
|
+
"success": true,
|
|
276
|
+
"lead_email": "prospect@agency.com"
|
|
277
|
+
}`,
|
|
278
|
+
|
|
279
|
+
inputSchema: z.object({
|
|
280
|
+
lead_email: EmailSchema.describe('Email address of the lead'),
|
|
281
|
+
interest_value: z
|
|
282
|
+
.number()
|
|
283
|
+
.int()
|
|
284
|
+
.min(-1)
|
|
285
|
+
.max(1)
|
|
286
|
+
.describe('Interest status: 1 (interested), 0 (default), -1 (not interested - stops sequence)'),
|
|
287
|
+
campaign_id: z.string().optional().describe('Campaign ID to limit status update to (UUID)'),
|
|
288
|
+
disable_auto_interest: z.boolean().optional().describe('Disable AI auto-tagging for this lead')
|
|
289
|
+
}),
|
|
290
|
+
|
|
291
|
+
outputSchema: z.object({
|
|
292
|
+
success: z.boolean().describe('Whether status update was successful'),
|
|
293
|
+
lead_email: z.string().describe('Email of the updated lead')
|
|
294
|
+
}),
|
|
295
|
+
|
|
296
|
+
integration: 'instantly' as const,
|
|
297
|
+
method: 'updateInterestStatus' as const,
|
|
298
|
+
credentialName
|
|
299
|
+
})
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
/**
|
|
303
|
+
* Create Instantly add to campaign tool
|
|
304
|
+
*
|
|
305
|
+
* Adds leads to an Instantly campaign to begin the email sequence.
|
|
306
|
+
*
|
|
307
|
+
* @param credentialName - Name of credential in credentials table
|
|
308
|
+
* @returns Tool that adds leads to a campaign
|
|
309
|
+
*
|
|
310
|
+
* @example
|
|
311
|
+
* const addToCampaign = createInstantlyAddToCampaignTool('instantly-elevasis')
|
|
312
|
+
*/
|
|
313
|
+
export function createInstantlyAddToCampaignTool(credentialName: string): Tool {
|
|
314
|
+
return createIntegrationTool({
|
|
315
|
+
name: 'instantly_add_to_campaign',
|
|
316
|
+
description: `Add leads to an Instantly campaign
|
|
317
|
+
|
|
318
|
+
USE CASES:
|
|
319
|
+
- Add interested leads to a follow-up campaign after initial outreach
|
|
320
|
+
- Start a drip sequence for leads who requested more information
|
|
321
|
+
- Enroll new leads into automated nurture campaigns
|
|
322
|
+
|
|
323
|
+
REQUIRED PARAMETERS:
|
|
324
|
+
- campaign_id: UUID of the Instantly campaign to add leads to
|
|
325
|
+
- leads: Array of lead objects (at least one required)
|
|
326
|
+
|
|
327
|
+
LEAD OBJECT FIELDS:
|
|
328
|
+
- email: (required) Email address of the lead
|
|
329
|
+
- first_name: (optional) First name for personalization
|
|
330
|
+
- last_name: (optional) Last name for personalization
|
|
331
|
+
- company_name: (optional) Company name for personalization
|
|
332
|
+
|
|
333
|
+
IMPORTANT: When leads are added, they begin receiving the campaign sequence immediately.
|
|
334
|
+
"Day 0" starts at the moment of addition.
|
|
335
|
+
|
|
336
|
+
EXAMPLE:
|
|
337
|
+
{
|
|
338
|
+
"campaign_id": "019bb2e9-5d96-7f1d-9bc1-c0ef73001b43",
|
|
339
|
+
"leads": [
|
|
340
|
+
{
|
|
341
|
+
"email": "prospect@agency.com",
|
|
342
|
+
"first_name": "John",
|
|
343
|
+
"last_name": "Smith",
|
|
344
|
+
"company_name": "Acme Agency"
|
|
345
|
+
}
|
|
346
|
+
]
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
OUTPUT:
|
|
350
|
+
{
|
|
351
|
+
"success": true,
|
|
352
|
+
"added_count": 1,
|
|
353
|
+
"errors": null
|
|
354
|
+
}`,
|
|
355
|
+
|
|
356
|
+
inputSchema: z.object({
|
|
357
|
+
campaign_id: z.string().describe('UUID of the Instantly campaign to add leads to'),
|
|
358
|
+
leads: z
|
|
359
|
+
.array(
|
|
360
|
+
z.object({
|
|
361
|
+
email: EmailSchema.describe('Email address of the lead'),
|
|
362
|
+
first_name: z.string().optional().describe('First name for personalization'),
|
|
363
|
+
last_name: z.string().optional().describe('Last name for personalization'),
|
|
364
|
+
company_name: z.string().optional().describe('Company name for personalization')
|
|
365
|
+
})
|
|
366
|
+
)
|
|
367
|
+
.min(1)
|
|
368
|
+
.describe('Array of leads to add (at least one required)')
|
|
369
|
+
}),
|
|
370
|
+
|
|
371
|
+
outputSchema: z.object({
|
|
372
|
+
success: z.boolean().describe('Whether leads were added successfully'),
|
|
373
|
+
added_count: z.number().describe('Number of leads successfully added'),
|
|
374
|
+
errors: z.array(z.string()).optional().describe('Array of error messages if any failures occurred')
|
|
375
|
+
}),
|
|
376
|
+
|
|
377
|
+
integration: 'instantly' as const,
|
|
378
|
+
method: 'addToCampaign' as const,
|
|
379
|
+
credentialName
|
|
380
|
+
})
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
/**
|
|
384
|
+
* Create Instantly list campaigns tool
|
|
385
|
+
*
|
|
386
|
+
* Lists all campaigns in the workspace with optional filtering and pagination.
|
|
387
|
+
*
|
|
388
|
+
* @param credentialName - Name of credential in credentials table
|
|
389
|
+
* @returns Tool that lists Instantly campaigns
|
|
390
|
+
*
|
|
391
|
+
* @example
|
|
392
|
+
* const listCampaigns = createInstantlyListCampaignsTool('instantly-elevasis')
|
|
393
|
+
*/
|
|
394
|
+
export function createInstantlyListCampaignsTool(credentialName: string): Tool {
|
|
395
|
+
return createIntegrationTool({
|
|
396
|
+
name: 'instantly_list_campaigns',
|
|
397
|
+
description: `List all campaigns in the Instantly workspace
|
|
398
|
+
|
|
399
|
+
USE CASES:
|
|
400
|
+
- Discover available campaigns before adding leads or fetching analytics
|
|
401
|
+
- Filter campaigns by status to find active or paused campaigns
|
|
402
|
+
- Search campaigns by name to locate a specific campaign ID
|
|
403
|
+
- Paginate through large campaign lists using cursor-based pagination
|
|
404
|
+
|
|
405
|
+
OPTIONAL PARAMETERS:
|
|
406
|
+
- limit: Number of campaigns to return per page (default: 10)
|
|
407
|
+
- starting_after: Cursor from previous response for pagination
|
|
408
|
+
- status: Filter by campaign status (e.g. "active", "paused", "completed")
|
|
409
|
+
- search: Search term to filter campaigns by name
|
|
410
|
+
|
|
411
|
+
EXAMPLE (List Active Campaigns):
|
|
412
|
+
{
|
|
413
|
+
"status": "active",
|
|
414
|
+
"limit": 20
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
EXAMPLE (Search by Name):
|
|
418
|
+
{
|
|
419
|
+
"search": "cold outreach Q1"
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
OUTPUT:
|
|
423
|
+
{
|
|
424
|
+
"campaigns": [
|
|
425
|
+
{
|
|
426
|
+
"id": "019bb2e9-5d96-7f1d-9bc1-c0ef73001b43",
|
|
427
|
+
"name": "Cold Outreach Q1",
|
|
428
|
+
"status": "active",
|
|
429
|
+
"created_at": "2025-01-15T09:00:00Z"
|
|
430
|
+
}
|
|
431
|
+
],
|
|
432
|
+
"next_starting_after": "cursor-token"
|
|
433
|
+
}`,
|
|
434
|
+
|
|
435
|
+
inputSchema: z.object({
|
|
436
|
+
limit: z.number().min(1).max(100).optional().describe('Number of campaigns per page (default: 10)'),
|
|
437
|
+
starting_after: z
|
|
438
|
+
.string()
|
|
439
|
+
.optional()
|
|
440
|
+
.describe('Cursor for pagination (from next_starting_after in previous response)'),
|
|
441
|
+
status: z.string().optional().describe('Filter by campaign status (e.g. "active", "paused", "completed")'),
|
|
442
|
+
search: z.string().optional().describe('Search term to filter campaigns by name')
|
|
443
|
+
}),
|
|
444
|
+
|
|
445
|
+
outputSchema: z.object({
|
|
446
|
+
campaigns: z
|
|
447
|
+
.array(
|
|
448
|
+
z.object({
|
|
449
|
+
id: z.string().describe('Campaign UUID'),
|
|
450
|
+
name: z.string().describe('Campaign name'),
|
|
451
|
+
status: z.string().describe('Campaign status'),
|
|
452
|
+
created_at: z.string().describe('Campaign creation timestamp')
|
|
453
|
+
})
|
|
454
|
+
)
|
|
455
|
+
.describe('Array of campaigns'),
|
|
456
|
+
next_starting_after: z.string().optional().describe('Cursor for next page (undefined = no more pages)')
|
|
457
|
+
}),
|
|
458
|
+
|
|
459
|
+
integration: 'instantly' as const,
|
|
460
|
+
method: 'listCampaigns' as const,
|
|
461
|
+
credentialName
|
|
462
|
+
})
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
/**
|
|
466
|
+
* Create Instantly get campaign tool
|
|
467
|
+
*
|
|
468
|
+
* Fetches full details for a single campaign including sequences and configuration.
|
|
469
|
+
*
|
|
470
|
+
* @param credentialName - Name of credential in credentials table
|
|
471
|
+
* @returns Tool that retrieves a single Instantly campaign
|
|
472
|
+
*
|
|
473
|
+
* @example
|
|
474
|
+
* const getCampaign = createInstantlyGetCampaignTool('instantly-elevasis')
|
|
475
|
+
*/
|
|
476
|
+
export function createInstantlyGetCampaignTool(credentialName: string): Tool {
|
|
477
|
+
return createIntegrationTool({
|
|
478
|
+
name: 'instantly_get_campaign',
|
|
479
|
+
description: `Get full details of a specific Instantly campaign
|
|
480
|
+
|
|
481
|
+
USE CASES:
|
|
482
|
+
- Inspect campaign sequences and step configurations before modifying
|
|
483
|
+
- Verify campaign status before activating or pausing
|
|
484
|
+
- Retrieve sending settings such as daily limits and reply handling
|
|
485
|
+
- Confirm the campaign name and metadata before referencing in reports
|
|
486
|
+
|
|
487
|
+
REQUIRED PARAMETERS:
|
|
488
|
+
- campaign_id: UUID of the campaign to retrieve
|
|
489
|
+
|
|
490
|
+
EXAMPLE:
|
|
491
|
+
{
|
|
492
|
+
"campaign_id": "019bb2e9-5d96-7f1d-9bc1-c0ef73001b43"
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
OUTPUT:
|
|
496
|
+
{
|
|
497
|
+
"id": "019bb2e9-5d96-7f1d-9bc1-c0ef73001b43",
|
|
498
|
+
"name": "Cold Outreach Q1",
|
|
499
|
+
"status": "active",
|
|
500
|
+
"sequences": [...],
|
|
501
|
+
"created_at": "2025-01-15T09:00:00Z"
|
|
502
|
+
}`,
|
|
503
|
+
|
|
504
|
+
inputSchema: z.object({
|
|
505
|
+
campaign_id: z.string().describe('UUID of the campaign to retrieve')
|
|
506
|
+
}),
|
|
507
|
+
|
|
508
|
+
outputSchema: z.object({
|
|
509
|
+
id: z.string().describe('Campaign UUID'),
|
|
510
|
+
name: z.string().describe('Campaign name'),
|
|
511
|
+
status: z.string().describe('Campaign status'),
|
|
512
|
+
sequences: z.array(z.unknown()).describe('Campaign sequence steps'),
|
|
513
|
+
created_at: z.string().describe('Campaign creation timestamp')
|
|
514
|
+
}),
|
|
515
|
+
|
|
516
|
+
integration: 'instantly' as const,
|
|
517
|
+
method: 'getCampaign' as const,
|
|
518
|
+
credentialName
|
|
519
|
+
})
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
/**
|
|
523
|
+
* Create Instantly update campaign tool
|
|
524
|
+
*
|
|
525
|
+
* Partially updates a campaign's fields such as name, sequences, or sending limits.
|
|
526
|
+
*
|
|
527
|
+
* @param credentialName - Name of credential in credentials table
|
|
528
|
+
* @returns Tool that updates an Instantly campaign
|
|
529
|
+
*
|
|
530
|
+
* @example
|
|
531
|
+
* const updateCampaign = createInstantlyUpdateCampaignTool('instantly-elevasis')
|
|
532
|
+
*/
|
|
533
|
+
export function createInstantlyUpdateCampaignTool(credentialName: string): Tool {
|
|
534
|
+
return createIntegrationTool({
|
|
535
|
+
name: 'instantly_update_campaign',
|
|
536
|
+
description: `Update fields on an existing Instantly campaign
|
|
537
|
+
|
|
538
|
+
USE CASES:
|
|
539
|
+
- Rename a campaign to reflect updated targeting or messaging
|
|
540
|
+
- Adjust the daily sending limit to control volume
|
|
541
|
+
- Replace or edit campaign sequences and email steps
|
|
542
|
+
- Toggle stop-on-reply to pause the sequence when a lead responds
|
|
543
|
+
|
|
544
|
+
REQUIRED PARAMETERS:
|
|
545
|
+
- campaign_id: UUID of the campaign to update
|
|
546
|
+
|
|
547
|
+
OPTIONAL PARAMETERS (at least one must be provided):
|
|
548
|
+
- name: New campaign name
|
|
549
|
+
- sequences: Full replacement of campaign sequences (array of step objects)
|
|
550
|
+
- daily_limit: Maximum emails to send per day
|
|
551
|
+
- stop_on_reply: Whether to stop sending when a lead replies (true/false)
|
|
552
|
+
|
|
553
|
+
EXAMPLE (Rename and Adjust Limit):
|
|
554
|
+
{
|
|
555
|
+
"campaign_id": "019bb2e9-5d96-7f1d-9bc1-c0ef73001b43",
|
|
556
|
+
"name": "Cold Outreach Q2",
|
|
557
|
+
"daily_limit": 50
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
OUTPUT:
|
|
561
|
+
{
|
|
562
|
+
"success": true,
|
|
563
|
+
"campaign_id": "019bb2e9-5d96-7f1d-9bc1-c0ef73001b43"
|
|
564
|
+
}`,
|
|
565
|
+
|
|
566
|
+
inputSchema: z.object({
|
|
567
|
+
campaign_id: z.string().describe('UUID of the campaign to update'),
|
|
568
|
+
name: z.string().optional().describe('New campaign name'),
|
|
569
|
+
sequences: z.array(z.unknown()).optional().describe('Replacement campaign sequences (array of step objects)'),
|
|
570
|
+
daily_limit: z.number().int().min(1).optional().describe('Maximum emails to send per day'),
|
|
571
|
+
stop_on_reply: z.boolean().optional().describe('Whether to stop the sequence when a lead replies')
|
|
572
|
+
}),
|
|
573
|
+
|
|
574
|
+
outputSchema: z.object({
|
|
575
|
+
success: z.boolean().describe('Whether the update was successful'),
|
|
576
|
+
campaign_id: z.string().describe('UUID of the updated campaign')
|
|
577
|
+
}),
|
|
578
|
+
|
|
579
|
+
integration: 'instantly' as const,
|
|
580
|
+
method: 'updateCampaign' as const,
|
|
581
|
+
credentialName
|
|
582
|
+
})
|
|
583
|
+
}
|
|
584
|
+
|
|
585
|
+
/**
|
|
586
|
+
* Create Instantly pause campaign tool
|
|
587
|
+
*
|
|
588
|
+
* Pauses an active campaign to stop email sends until reactivated.
|
|
589
|
+
*
|
|
590
|
+
* @param credentialName - Name of credential in credentials table
|
|
591
|
+
* @returns Tool that pauses an Instantly campaign
|
|
592
|
+
*
|
|
593
|
+
* @example
|
|
594
|
+
* const pauseCampaign = createInstantlyPauseCampaignTool('instantly-elevasis')
|
|
595
|
+
*/
|
|
596
|
+
export function createInstantlyPauseCampaignTool(credentialName: string): Tool {
|
|
597
|
+
return createIntegrationTool({
|
|
598
|
+
name: 'instantly_pause_campaign',
|
|
599
|
+
description: `Pause an active Instantly campaign
|
|
600
|
+
|
|
601
|
+
USE CASES:
|
|
602
|
+
- Temporarily halt outreach while reviewing campaign performance
|
|
603
|
+
- Pause before making sequence edits to avoid sending stale content
|
|
604
|
+
- Stop sends during public holidays or blackout periods
|
|
605
|
+
- Hold sends when a domain reputation issue is detected
|
|
606
|
+
|
|
607
|
+
REQUIRED PARAMETERS:
|
|
608
|
+
- campaign_id: UUID of the campaign to pause
|
|
609
|
+
|
|
610
|
+
EXAMPLE:
|
|
611
|
+
{
|
|
612
|
+
"campaign_id": "019bb2e9-5d96-7f1d-9bc1-c0ef73001b43"
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
OUTPUT:
|
|
616
|
+
{
|
|
617
|
+
"success": true,
|
|
618
|
+
"campaign_id": "019bb2e9-5d96-7f1d-9bc1-c0ef73001b43"
|
|
619
|
+
}`,
|
|
620
|
+
|
|
621
|
+
inputSchema: z.object({
|
|
622
|
+
campaign_id: z.string().describe('UUID of the campaign to pause')
|
|
623
|
+
}),
|
|
624
|
+
|
|
625
|
+
outputSchema: z.object({
|
|
626
|
+
success: z.boolean().describe('Whether the campaign was paused successfully'),
|
|
627
|
+
campaign_id: z.string().describe('UUID of the paused campaign')
|
|
628
|
+
}),
|
|
629
|
+
|
|
630
|
+
integration: 'instantly' as const,
|
|
631
|
+
method: 'pauseCampaign' as const,
|
|
632
|
+
credentialName
|
|
633
|
+
})
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
/**
|
|
637
|
+
* Create Instantly delete campaign tool
|
|
638
|
+
*
|
|
639
|
+
* Permanently deletes a campaign and all associated data.
|
|
640
|
+
*
|
|
641
|
+
* @param credentialName - Name of credential in credentials table
|
|
642
|
+
* @returns Tool that deletes an Instantly campaign
|
|
643
|
+
*
|
|
644
|
+
* @example
|
|
645
|
+
* const deleteCampaign = createInstantlyDeleteCampaignTool('instantly-elevasis')
|
|
646
|
+
*/
|
|
647
|
+
export function createInstantlyDeleteCampaignTool(credentialName: string): Tool {
|
|
648
|
+
return createIntegrationTool({
|
|
649
|
+
name: 'instantly_delete_campaign',
|
|
650
|
+
description: `Permanently delete an Instantly campaign
|
|
651
|
+
|
|
652
|
+
USE CASES:
|
|
653
|
+
- Clean up test or draft campaigns after diagnostic runs
|
|
654
|
+
- Remove campaigns that are no longer needed
|
|
655
|
+
- Delete accidentally created campaigns
|
|
656
|
+
|
|
657
|
+
REQUIRED PARAMETERS:
|
|
658
|
+
- campaign_id: UUID of the campaign to delete
|
|
659
|
+
|
|
660
|
+
EXAMPLE:
|
|
661
|
+
{
|
|
662
|
+
"campaign_id": "019bb2e9-5d96-7f1d-9bc1-c0ef73001b43"
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
OUTPUT:
|
|
666
|
+
{
|
|
667
|
+
"success": true,
|
|
668
|
+
"campaign_id": "019bb2e9-5d96-7f1d-9bc1-c0ef73001b43"
|
|
669
|
+
}`,
|
|
670
|
+
|
|
671
|
+
inputSchema: z.object({
|
|
672
|
+
campaign_id: z.string().describe('UUID of the campaign to delete')
|
|
673
|
+
}),
|
|
674
|
+
|
|
675
|
+
outputSchema: z.object({
|
|
676
|
+
success: z.boolean().describe('Whether the campaign was deleted successfully'),
|
|
677
|
+
campaign_id: z.string().describe('UUID of the deleted campaign')
|
|
678
|
+
}),
|
|
679
|
+
|
|
680
|
+
integration: 'instantly' as const,
|
|
681
|
+
method: 'deleteCampaign' as const,
|
|
682
|
+
credentialName
|
|
683
|
+
})
|
|
684
|
+
}
|
|
685
|
+
|
|
686
|
+
/**
|
|
687
|
+
* Create Instantly activate campaign tool
|
|
688
|
+
*
|
|
689
|
+
* Activates or resumes a paused or draft campaign to begin sending.
|
|
690
|
+
*
|
|
691
|
+
* @param credentialName - Name of credential in credentials table
|
|
692
|
+
* @returns Tool that activates an Instantly campaign
|
|
693
|
+
*
|
|
694
|
+
* @example
|
|
695
|
+
* const activateCampaign = createInstantlyActivateCampaignTool('instantly-elevasis')
|
|
696
|
+
*/
|
|
697
|
+
export function createInstantlyActivateCampaignTool(credentialName: string): Tool {
|
|
698
|
+
return createIntegrationTool({
|
|
699
|
+
name: 'instantly_activate_campaign',
|
|
700
|
+
description: `Activate or resume an Instantly campaign
|
|
701
|
+
|
|
702
|
+
USE CASES:
|
|
703
|
+
- Launch a newly created campaign to begin sending to enrolled leads
|
|
704
|
+
- Resume a paused campaign after completing edits or reviews
|
|
705
|
+
- Re-activate a campaign after resolving domain reputation issues
|
|
706
|
+
- Start scheduled outreach at the beginning of a new period
|
|
707
|
+
|
|
708
|
+
REQUIRED PARAMETERS:
|
|
709
|
+
- campaign_id: UUID of the campaign to activate
|
|
710
|
+
|
|
711
|
+
EXAMPLE:
|
|
712
|
+
{
|
|
713
|
+
"campaign_id": "019bb2e9-5d96-7f1d-9bc1-c0ef73001b43"
|
|
714
|
+
}
|
|
715
|
+
|
|
716
|
+
OUTPUT:
|
|
717
|
+
{
|
|
718
|
+
"success": true,
|
|
719
|
+
"campaign_id": "019bb2e9-5d96-7f1d-9bc1-c0ef73001b43"
|
|
720
|
+
}`,
|
|
721
|
+
|
|
722
|
+
inputSchema: z.object({
|
|
723
|
+
campaign_id: z.string().describe('UUID of the campaign to activate')
|
|
724
|
+
}),
|
|
725
|
+
|
|
726
|
+
outputSchema: z.object({
|
|
727
|
+
success: z.boolean().describe('Whether the campaign was activated successfully'),
|
|
728
|
+
campaign_id: z.string().describe('UUID of the activated campaign')
|
|
729
|
+
}),
|
|
730
|
+
|
|
731
|
+
integration: 'instantly' as const,
|
|
732
|
+
method: 'activateCampaign' as const,
|
|
733
|
+
credentialName
|
|
734
|
+
})
|
|
735
|
+
}
|
|
736
|
+
|
|
737
|
+
/**
|
|
738
|
+
* Create Instantly get campaign analytics tool
|
|
739
|
+
*
|
|
740
|
+
* Retrieves aggregate engagement statistics for a campaign.
|
|
741
|
+
*
|
|
742
|
+
* @param credentialName - Name of credential in credentials table
|
|
743
|
+
* @returns Tool that fetches campaign-level analytics
|
|
744
|
+
*
|
|
745
|
+
* @example
|
|
746
|
+
* const getAnalytics = createInstantlyGetCampaignAnalyticsTool('instantly-elevasis')
|
|
747
|
+
*/
|
|
748
|
+
export function createInstantlyGetCampaignAnalyticsTool(credentialName: string): Tool {
|
|
749
|
+
return createIntegrationTool({
|
|
750
|
+
name: 'instantly_get_campaign_analytics',
|
|
751
|
+
description: `Get aggregate analytics for an Instantly campaign
|
|
752
|
+
|
|
753
|
+
USE CASES:
|
|
754
|
+
- Review overall campaign performance including open rate, reply rate, and bounce rate
|
|
755
|
+
- Compare send volume against replies to evaluate outreach effectiveness
|
|
756
|
+
- Monitor unsubscribes to maintain sender reputation
|
|
757
|
+
- Scope analytics to a date range for period-specific reporting
|
|
758
|
+
|
|
759
|
+
REQUIRED PARAMETERS:
|
|
760
|
+
- campaign_id: UUID of the campaign
|
|
761
|
+
|
|
762
|
+
OPTIONAL PARAMETERS:
|
|
763
|
+
- start_date: ISO date string to filter analytics from (e.g. "2025-01-01")
|
|
764
|
+
- end_date: ISO date string to filter analytics to (e.g. "2025-03-31")
|
|
765
|
+
|
|
766
|
+
EXAMPLE:
|
|
767
|
+
{
|
|
768
|
+
"campaign_id": "019bb2e9-5d96-7f1d-9bc1-c0ef73001b43",
|
|
769
|
+
"start_date": "2025-01-01",
|
|
770
|
+
"end_date": "2025-03-31"
|
|
771
|
+
}
|
|
772
|
+
|
|
773
|
+
OUTPUT:
|
|
774
|
+
{
|
|
775
|
+
"campaign_id": "019bb2e9-5d96-7f1d-9bc1-c0ef73001b43",
|
|
776
|
+
"sent": 450,
|
|
777
|
+
"opened": 180,
|
|
778
|
+
"unique_opened": 160,
|
|
779
|
+
"replied": 35,
|
|
780
|
+
"unique_replied": 30,
|
|
781
|
+
"bounced": 5,
|
|
782
|
+
"unsubscribed": 2
|
|
783
|
+
}`,
|
|
784
|
+
|
|
785
|
+
inputSchema: z.object({
|
|
786
|
+
campaign_id: z.string().describe('UUID of the campaign to fetch analytics for'),
|
|
787
|
+
start_date: z.string().optional().describe('Start date for analytics range (ISO date string, e.g. "2025-01-01")'),
|
|
788
|
+
end_date: z.string().optional().describe('End date for analytics range (ISO date string, e.g. "2025-03-31")')
|
|
789
|
+
}),
|
|
790
|
+
|
|
791
|
+
outputSchema: z.object({
|
|
792
|
+
campaign_id: z.string().describe('Campaign UUID'),
|
|
793
|
+
sent: z.number().describe('Total emails sent'),
|
|
794
|
+
opened: z.number().describe('Total open events'),
|
|
795
|
+
unique_opened: z.number().describe('Unique leads who opened'),
|
|
796
|
+
replied: z.number().describe('Total reply events'),
|
|
797
|
+
unique_replied: z.number().describe('Unique leads who replied'),
|
|
798
|
+
bounced: z.number().describe('Total bounced emails'),
|
|
799
|
+
unsubscribed: z.number().describe('Total unsubscribes')
|
|
800
|
+
}),
|
|
801
|
+
|
|
802
|
+
integration: 'instantly' as const,
|
|
803
|
+
method: 'getCampaignAnalytics' as const,
|
|
804
|
+
credentialName
|
|
805
|
+
})
|
|
806
|
+
}
|
|
807
|
+
|
|
808
|
+
/**
|
|
809
|
+
* Create Instantly get step analytics tool
|
|
810
|
+
*
|
|
811
|
+
* Retrieves per-step and per-variant analytics for a campaign sequence.
|
|
812
|
+
*
|
|
813
|
+
* @param credentialName - Name of credential in credentials table
|
|
814
|
+
* @returns Tool that fetches step-level analytics
|
|
815
|
+
*
|
|
816
|
+
* @example
|
|
817
|
+
* const getStepAnalytics = createInstantlyGetStepAnalyticsTool('instantly-elevasis')
|
|
818
|
+
*/
|
|
819
|
+
export function createInstantlyGetStepAnalyticsTool(credentialName: string): Tool {
|
|
820
|
+
return createIntegrationTool({
|
|
821
|
+
name: 'instantly_get_step_analytics',
|
|
822
|
+
description: `Get per-step and per-variant analytics for an Instantly campaign
|
|
823
|
+
|
|
824
|
+
USE CASES:
|
|
825
|
+
- Identify which sequence step has the highest reply rate
|
|
826
|
+
- Compare A/B subject line variants to determine the winning version
|
|
827
|
+
- Diagnose a drop-off point where prospects stop engaging
|
|
828
|
+
- Optimize multi-step sequences based on step-level performance data
|
|
829
|
+
|
|
830
|
+
REQUIRED PARAMETERS:
|
|
831
|
+
- campaign_id: UUID of the campaign
|
|
832
|
+
|
|
833
|
+
EXAMPLE:
|
|
834
|
+
{
|
|
835
|
+
"campaign_id": "019bb2e9-5d96-7f1d-9bc1-c0ef73001b43"
|
|
836
|
+
}
|
|
837
|
+
|
|
838
|
+
OUTPUT:
|
|
839
|
+
{
|
|
840
|
+
"steps": [
|
|
841
|
+
{
|
|
842
|
+
"step": "1",
|
|
843
|
+
"variant": "A",
|
|
844
|
+
"sent": 200,
|
|
845
|
+
"opened": 90,
|
|
846
|
+
"unique_opened": 80,
|
|
847
|
+
"replies": 20,
|
|
848
|
+
"unique_replies": 18
|
|
849
|
+
},
|
|
850
|
+
{
|
|
851
|
+
"step": "2",
|
|
852
|
+
"variant": "A",
|
|
853
|
+
"sent": 160,
|
|
854
|
+
"opened": 55,
|
|
855
|
+
"unique_opened": 50,
|
|
856
|
+
"replies": 10,
|
|
857
|
+
"unique_replies": 9
|
|
858
|
+
}
|
|
859
|
+
]
|
|
860
|
+
}`,
|
|
861
|
+
|
|
862
|
+
inputSchema: z.object({
|
|
863
|
+
campaign_id: z.string().describe('UUID of the campaign to fetch step analytics for')
|
|
864
|
+
}),
|
|
865
|
+
|
|
866
|
+
outputSchema: z.object({
|
|
867
|
+
steps: z
|
|
868
|
+
.array(
|
|
869
|
+
z.object({
|
|
870
|
+
step: z.string().describe('Step number in the sequence'),
|
|
871
|
+
variant: z.string().describe('Variant label (e.g. "A", "B")'),
|
|
872
|
+
sent: z.number().describe('Emails sent for this step/variant'),
|
|
873
|
+
opened: z.number().describe('Total open events'),
|
|
874
|
+
unique_opened: z.number().describe('Unique leads who opened'),
|
|
875
|
+
replies: z.number().describe('Total reply events'),
|
|
876
|
+
unique_replies: z.number().describe('Unique leads who replied')
|
|
877
|
+
})
|
|
878
|
+
)
|
|
879
|
+
.describe('Per-step, per-variant analytics entries')
|
|
880
|
+
}),
|
|
881
|
+
|
|
882
|
+
integration: 'instantly' as const,
|
|
883
|
+
method: 'getStepAnalytics' as const,
|
|
884
|
+
credentialName
|
|
885
|
+
})
|
|
886
|
+
}
|
|
887
|
+
|
|
888
|
+
/**
|
|
889
|
+
* Create Instantly bulk add leads tool
|
|
890
|
+
*
|
|
891
|
+
* Adds up to 1000 leads to a campaign in a single request.
|
|
892
|
+
*
|
|
893
|
+
* @param credentialName - Name of credential in credentials table
|
|
894
|
+
* @returns Tool that bulk-uploads leads to an Instantly campaign
|
|
895
|
+
*
|
|
896
|
+
* @example
|
|
897
|
+
* const bulkAddLeads = createInstantlyBulkAddLeadsTool('instantly-elevasis')
|
|
898
|
+
*/
|
|
899
|
+
export function createInstantlyBulkAddLeadsTool(credentialName: string): Tool {
|
|
900
|
+
return createIntegrationTool({
|
|
901
|
+
name: 'instantly_bulk_add_leads',
|
|
902
|
+
description: `Bulk upload up to 1000 leads to an Instantly campaign
|
|
903
|
+
|
|
904
|
+
USE CASES:
|
|
905
|
+
- Import a large list of qualified prospects into a campaign at once
|
|
906
|
+
- Enroll leads exported from a CRM or enrichment tool into outreach
|
|
907
|
+
- Upload leads with custom variables for deep personalization
|
|
908
|
+
- Add leads with website and company data for context-aware sequences
|
|
909
|
+
|
|
910
|
+
REQUIRED PARAMETERS:
|
|
911
|
+
- campaign_id: UUID of the campaign to add leads to
|
|
912
|
+
- leads: Array of lead objects (1–1000 leads)
|
|
913
|
+
|
|
914
|
+
LEAD OBJECT FIELDS:
|
|
915
|
+
- email: (required) Email address of the lead
|
|
916
|
+
- first_name: (optional) First name for personalization
|
|
917
|
+
- last_name: (optional) Last name for personalization
|
|
918
|
+
- company_name: (optional) Company name for personalization
|
|
919
|
+
- website: (optional) Company website URL
|
|
920
|
+
- custom_variables: (optional) Key-value map of custom merge fields
|
|
921
|
+
|
|
922
|
+
EXAMPLE:
|
|
923
|
+
{
|
|
924
|
+
"campaign_id": "019bb2e9-5d96-7f1d-9bc1-c0ef73001b43",
|
|
925
|
+
"leads": [
|
|
926
|
+
{
|
|
927
|
+
"email": "ceo@agency.com",
|
|
928
|
+
"first_name": "Sarah",
|
|
929
|
+
"last_name": "Chen",
|
|
930
|
+
"company_name": "Growth Agency",
|
|
931
|
+
"website": "https://growthagency.com",
|
|
932
|
+
"custom_variables": { "pain_point": "manual lead gen" }
|
|
933
|
+
}
|
|
934
|
+
]
|
|
935
|
+
}
|
|
936
|
+
|
|
937
|
+
OUTPUT:
|
|
938
|
+
{
|
|
939
|
+
"success": true,
|
|
940
|
+
"added_count": 1,
|
|
941
|
+
"failed_count": 0
|
|
942
|
+
}`,
|
|
943
|
+
|
|
944
|
+
inputSchema: z.object({
|
|
945
|
+
campaign_id: z.string().describe('UUID of the campaign to add leads to'),
|
|
946
|
+
leads: z
|
|
947
|
+
.array(
|
|
948
|
+
z.object({
|
|
949
|
+
email: EmailSchema.describe('Email address of the lead'),
|
|
950
|
+
first_name: z.string().optional().describe('First name for personalization'),
|
|
951
|
+
last_name: z.string().optional().describe('Last name for personalization'),
|
|
952
|
+
company_name: z.string().optional().describe('Company name for personalization'),
|
|
953
|
+
website: z.string().optional().describe('Company website URL'),
|
|
954
|
+
custom_variables: z
|
|
955
|
+
.record(z.string(), z.string())
|
|
956
|
+
.optional()
|
|
957
|
+
.describe('Key-value map of custom merge field values')
|
|
958
|
+
})
|
|
959
|
+
)
|
|
960
|
+
.min(1)
|
|
961
|
+
.max(1000)
|
|
962
|
+
.describe('Array of leads to upload (1–1000)')
|
|
963
|
+
}),
|
|
964
|
+
|
|
965
|
+
outputSchema: z.object({
|
|
966
|
+
success: z.boolean().describe('True if all leads were added without errors'),
|
|
967
|
+
added_count: z.number().describe('Number of leads successfully added'),
|
|
968
|
+
failed_count: z.number().describe('Number of leads that failed to add'),
|
|
969
|
+
errors: z
|
|
970
|
+
.array(
|
|
971
|
+
z.object({
|
|
972
|
+
email: z.string().describe('Email of the lead that failed'),
|
|
973
|
+
error: z.string().describe('Error message for this lead')
|
|
974
|
+
})
|
|
975
|
+
)
|
|
976
|
+
.optional()
|
|
977
|
+
.describe('Per-lead error details when failures occurred')
|
|
978
|
+
}),
|
|
979
|
+
|
|
980
|
+
integration: 'instantly' as const,
|
|
981
|
+
method: 'bulkAddLeads' as const,
|
|
982
|
+
credentialName
|
|
983
|
+
})
|
|
984
|
+
}
|
|
985
|
+
|
|
986
|
+
/**
|
|
987
|
+
* Create Instantly get account health tool
|
|
988
|
+
*
|
|
989
|
+
* Lists email sending accounts with warmup status and health scores.
|
|
990
|
+
*
|
|
991
|
+
* @param credentialName - Name of credential in credentials table
|
|
992
|
+
* @returns Tool that retrieves account health data
|
|
993
|
+
*
|
|
994
|
+
* @example
|
|
995
|
+
* const getAccountHealth = createInstantlyGetAccountHealthTool('instantly-elevasis')
|
|
996
|
+
*/
|
|
997
|
+
export function createInstantlyGetAccountHealthTool(credentialName: string): Tool {
|
|
998
|
+
return createIntegrationTool({
|
|
999
|
+
name: 'instantly_get_account_health',
|
|
1000
|
+
description: `List email accounts with health status and warmup information
|
|
1001
|
+
|
|
1002
|
+
USE CASES:
|
|
1003
|
+
- Audit all connected sending accounts before launching a campaign
|
|
1004
|
+
- Identify accounts with low health scores that may cause deliverability issues
|
|
1005
|
+
- Verify warmup status to ensure accounts are ready for full sending volume
|
|
1006
|
+
- Monitor account portfolio health as part of regular sender hygiene checks
|
|
1007
|
+
|
|
1008
|
+
OPTIONAL PARAMETERS:
|
|
1009
|
+
- limit: Number of accounts to return per page
|
|
1010
|
+
- starting_after: Cursor from previous response for pagination
|
|
1011
|
+
|
|
1012
|
+
EXAMPLE:
|
|
1013
|
+
{
|
|
1014
|
+
"limit": 20
|
|
1015
|
+
}
|
|
1016
|
+
|
|
1017
|
+
OUTPUT:
|
|
1018
|
+
{
|
|
1019
|
+
"accounts": [
|
|
1020
|
+
{
|
|
1021
|
+
"id": "acct-abc123",
|
|
1022
|
+
"email": "alex@elevasis.com",
|
|
1023
|
+
"status": "active",
|
|
1024
|
+
"warmup_enabled": true,
|
|
1025
|
+
"health_score": 92
|
|
1026
|
+
}
|
|
1027
|
+
],
|
|
1028
|
+
"next_starting_after": "cursor-token"
|
|
1029
|
+
}`,
|
|
1030
|
+
|
|
1031
|
+
inputSchema: z.object({
|
|
1032
|
+
limit: z.number().min(1).max(100).optional().describe('Number of accounts per page'),
|
|
1033
|
+
starting_after: z
|
|
1034
|
+
.string()
|
|
1035
|
+
.optional()
|
|
1036
|
+
.describe('Cursor for pagination (from next_starting_after in previous response)')
|
|
1037
|
+
}),
|
|
1038
|
+
|
|
1039
|
+
outputSchema: z.object({
|
|
1040
|
+
accounts: z
|
|
1041
|
+
.array(
|
|
1042
|
+
z.object({
|
|
1043
|
+
id: z.string().describe('Account ID'),
|
|
1044
|
+
email: z.string().describe('Sending email address'),
|
|
1045
|
+
status: z.string().describe('Account status'),
|
|
1046
|
+
warmup_enabled: z.boolean().describe('Whether warmup is active for this account'),
|
|
1047
|
+
health_score: z.number().optional().describe('Health score (0–100)')
|
|
1048
|
+
})
|
|
1049
|
+
)
|
|
1050
|
+
.describe('Array of sending accounts with health data'),
|
|
1051
|
+
next_starting_after: z.string().optional().describe('Cursor for next page (undefined = no more pages)')
|
|
1052
|
+
}),
|
|
1053
|
+
|
|
1054
|
+
integration: 'instantly' as const,
|
|
1055
|
+
method: 'getAccountHealth' as const,
|
|
1056
|
+
credentialName
|
|
1057
|
+
})
|
|
1058
|
+
}
|
|
1059
|
+
|
|
1060
|
+
/**
|
|
1061
|
+
* Create Instantly create campaign tool
|
|
1062
|
+
*
|
|
1063
|
+
* Creates a new campaign in Instantly with optional sequences and sending configuration.
|
|
1064
|
+
*
|
|
1065
|
+
* @param credentialName - Name of credential in credentials table
|
|
1066
|
+
* @returns Tool that creates a new Instantly campaign
|
|
1067
|
+
*
|
|
1068
|
+
* @example
|
|
1069
|
+
* const createCampaign = createInstantlyCreateCampaignTool('instantly-elevasis')
|
|
1070
|
+
*/
|
|
1071
|
+
export function createInstantlyCreateCampaignTool(credentialName: string): Tool {
|
|
1072
|
+
return createIntegrationTool({
|
|
1073
|
+
name: 'instantly_create_campaign',
|
|
1074
|
+
description: `Create a new Instantly campaign
|
|
1075
|
+
|
|
1076
|
+
USE CASES:
|
|
1077
|
+
- Set up a new cold outreach campaign with custom sequences
|
|
1078
|
+
- Create a campaign with predefined email steps and A/B variants
|
|
1079
|
+
- Configure sending limits and reply handling at creation time
|
|
1080
|
+
- Prepare a campaign shell to be populated with leads and activated later
|
|
1081
|
+
|
|
1082
|
+
REQUIRED PARAMETERS:
|
|
1083
|
+
- name: Display name of the new campaign
|
|
1084
|
+
|
|
1085
|
+
OPTIONAL PARAMETERS:
|
|
1086
|
+
- sequences: Array of sequence objects with email steps and optional A/B variants
|
|
1087
|
+
- email_list: Array of sending account emails to use for the campaign
|
|
1088
|
+
- daily_limit: Maximum emails to send per day
|
|
1089
|
+
- stop_on_reply: Whether to stop the sequence when a lead replies
|
|
1090
|
+
- stop_on_auto_reply: Whether to stop on auto-replies
|
|
1091
|
+
- track_opens: Whether to track email opens
|
|
1092
|
+
- track_clicks: Whether to track link clicks
|
|
1093
|
+
- text_only: Whether to send text-only emails (no HTML)
|
|
1094
|
+
|
|
1095
|
+
EXAMPLE (Simple Campaign):
|
|
1096
|
+
{
|
|
1097
|
+
"name": "Cold Outreach Q2 2025",
|
|
1098
|
+
"daily_limit": 50,
|
|
1099
|
+
"stop_on_reply": true
|
|
1100
|
+
}
|
|
1101
|
+
|
|
1102
|
+
EXAMPLE (Campaign with Sequence):
|
|
1103
|
+
{
|
|
1104
|
+
"name": "Agency Outreach",
|
|
1105
|
+
"sequences": [
|
|
1106
|
+
{
|
|
1107
|
+
"steps": [
|
|
1108
|
+
{
|
|
1109
|
+
"subject": "Quick question about {{company_name}}",
|
|
1110
|
+
"body": "Hi {{first_name}}, I noticed..."
|
|
1111
|
+
},
|
|
1112
|
+
{
|
|
1113
|
+
"subject": "Following up",
|
|
1114
|
+
"body": "Hi {{first_name}}, just wanted to circle back..."
|
|
1115
|
+
}
|
|
1116
|
+
]
|
|
1117
|
+
}
|
|
1118
|
+
],
|
|
1119
|
+
"daily_limit": 30,
|
|
1120
|
+
"stop_on_reply": true
|
|
1121
|
+
}
|
|
1122
|
+
|
|
1123
|
+
OUTPUT:
|
|
1124
|
+
{
|
|
1125
|
+
"success": true,
|
|
1126
|
+
"campaign_id": "019bb2e9-5d96-7f1d-9bc1-c0ef73001b43",
|
|
1127
|
+
"name": "Cold Outreach Q2 2025"
|
|
1128
|
+
}`,
|
|
1129
|
+
|
|
1130
|
+
inputSchema: z.object({
|
|
1131
|
+
name: z.string().describe('Display name of the new campaign'),
|
|
1132
|
+
sequences: z
|
|
1133
|
+
.array(
|
|
1134
|
+
z.object({
|
|
1135
|
+
steps: z.array(
|
|
1136
|
+
z.object({
|
|
1137
|
+
subject: z.string().describe('Email subject line for this step'),
|
|
1138
|
+
body: z.string().describe('Email body for this step'),
|
|
1139
|
+
variants: z
|
|
1140
|
+
.array(
|
|
1141
|
+
z.object({
|
|
1142
|
+
subject: z.string().describe('A/B variant subject line'),
|
|
1143
|
+
body: z.string().describe('A/B variant body')
|
|
1144
|
+
})
|
|
1145
|
+
)
|
|
1146
|
+
.optional()
|
|
1147
|
+
.describe('A/B test variants for this step')
|
|
1148
|
+
})
|
|
1149
|
+
)
|
|
1150
|
+
})
|
|
1151
|
+
)
|
|
1152
|
+
.optional()
|
|
1153
|
+
.describe('Campaign sequences with email steps'),
|
|
1154
|
+
email_list: z.array(z.string()).optional().describe('Sending account emails to use for the campaign'),
|
|
1155
|
+
daily_limit: z.number().int().min(1).optional().describe('Maximum emails to send per day'),
|
|
1156
|
+
stop_on_reply: z.boolean().optional().describe('Whether to stop the sequence when a lead replies'),
|
|
1157
|
+
stop_on_auto_reply: z.boolean().optional().describe('Whether to stop the sequence on auto-replies'),
|
|
1158
|
+
track_opens: z.boolean().optional().describe('Whether to track email opens'),
|
|
1159
|
+
track_clicks: z.boolean().optional().describe('Whether to track link clicks'),
|
|
1160
|
+
text_only: z.boolean().optional().describe('Whether to send text-only emails (no HTML)')
|
|
1161
|
+
}),
|
|
1162
|
+
|
|
1163
|
+
outputSchema: z.object({
|
|
1164
|
+
success: z.boolean().describe('Whether the campaign was created successfully'),
|
|
1165
|
+
campaign_id: z.string().describe('UUID of the newly created campaign'),
|
|
1166
|
+
name: z.string().describe('Name of the created campaign')
|
|
1167
|
+
}),
|
|
1168
|
+
|
|
1169
|
+
integration: 'instantly' as const,
|
|
1170
|
+
method: 'createCampaign' as const,
|
|
1171
|
+
credentialName
|
|
1172
|
+
})
|
|
1173
|
+
}
|
|
1174
|
+
|
|
1175
|
+
/**
|
|
1176
|
+
* Create Instantly create inbox test tool
|
|
1177
|
+
*
|
|
1178
|
+
* Initiates an inbox placement test to diagnose deliverability for a sending account.
|
|
1179
|
+
*
|
|
1180
|
+
* @param credentialName - Name of credential in credentials table
|
|
1181
|
+
* @returns Tool that creates an Instantly inbox placement test
|
|
1182
|
+
*
|
|
1183
|
+
* @example
|
|
1184
|
+
* const createInboxTest = createInstantlyCreateInboxTestTool('instantly-elevasis')
|
|
1185
|
+
*/
|
|
1186
|
+
export function createInstantlyCreateInboxTestTool(credentialName: string): Tool {
|
|
1187
|
+
return createIntegrationTool({
|
|
1188
|
+
name: 'instantly_create_inbox_test',
|
|
1189
|
+
description: `Create an inbox placement test for an Instantly sending account
|
|
1190
|
+
|
|
1191
|
+
USE CASES:
|
|
1192
|
+
- Verify deliverability before launching a high-volume campaign
|
|
1193
|
+
- Diagnose spam filtering issues on a specific sending account
|
|
1194
|
+
- Test whether custom subject lines land in inbox or spam
|
|
1195
|
+
- Monitor placement across Gmail, Outlook, and other major providers
|
|
1196
|
+
|
|
1197
|
+
REQUIRED PARAMETERS:
|
|
1198
|
+
- email_account: The sending account to test (must be connected to workspace)
|
|
1199
|
+
|
|
1200
|
+
OPTIONAL PARAMETERS:
|
|
1201
|
+
- subject: Custom subject line to use in the test email
|
|
1202
|
+
- body: Custom body text to use in the test email
|
|
1203
|
+
|
|
1204
|
+
EXAMPLE:
|
|
1205
|
+
{
|
|
1206
|
+
"email_account": "alex@elevasis.com",
|
|
1207
|
+
"subject": "Quick question about your agency",
|
|
1208
|
+
"body": "Hi, I wanted to reach out about..."
|
|
1209
|
+
}
|
|
1210
|
+
|
|
1211
|
+
OUTPUT:
|
|
1212
|
+
{
|
|
1213
|
+
"success": true,
|
|
1214
|
+
"test_id": "test-abc123",
|
|
1215
|
+
"status": "pending"
|
|
1216
|
+
}`,
|
|
1217
|
+
|
|
1218
|
+
inputSchema: z.object({
|
|
1219
|
+
email_account: z.string().describe('Sending account email address to test (must be connected to workspace)'),
|
|
1220
|
+
subject: z.string().optional().describe('Custom subject line for the test email'),
|
|
1221
|
+
body: z.string().optional().describe('Custom body text for the test email')
|
|
1222
|
+
}),
|
|
1223
|
+
|
|
1224
|
+
outputSchema: z.object({
|
|
1225
|
+
success: z.boolean().describe('Whether the test was created successfully'),
|
|
1226
|
+
test_id: z.string().describe('Unique ID of the inbox placement test'),
|
|
1227
|
+
status: z.string().describe('Initial test status (e.g. "pending")')
|
|
1228
|
+
}),
|
|
1229
|
+
|
|
1230
|
+
integration: 'instantly' as const,
|
|
1231
|
+
method: 'createInboxTest' as const,
|
|
1232
|
+
credentialName
|
|
1233
|
+
})
|
|
1234
|
+
}
|
|
1235
|
+
|
|
1236
|
+
/**
|
|
1237
|
+
* Create Instantly get daily campaign analytics tool
|
|
1238
|
+
*
|
|
1239
|
+
* Retrieves day-by-day engagement breakdown for campaigns.
|
|
1240
|
+
*
|
|
1241
|
+
* @param credentialName - Name of credential in credentials table
|
|
1242
|
+
* @returns Tool that fetches daily campaign analytics
|
|
1243
|
+
*
|
|
1244
|
+
* @example
|
|
1245
|
+
* const getDailyAnalytics = createInstantlyGetDailyCampaignAnalyticsTool('instantly-elevasis')
|
|
1246
|
+
*/
|
|
1247
|
+
export function createInstantlyGetDailyCampaignAnalyticsTool(credentialName: string): Tool {
|
|
1248
|
+
return createIntegrationTool({
|
|
1249
|
+
name: 'instantly_get_daily_campaign_analytics',
|
|
1250
|
+
description: `Get day-by-day analytics breakdown for Instantly campaigns
|
|
1251
|
+
|
|
1252
|
+
USE CASES:
|
|
1253
|
+
- Analyze send and open trends over a date range to identify patterns
|
|
1254
|
+
- Spot peak engagement days to optimize future send scheduling
|
|
1255
|
+
- Compare daily click and reply volumes across a campaign period
|
|
1256
|
+
- Get cross-campaign aggregate metrics when no campaign_id is specified
|
|
1257
|
+
|
|
1258
|
+
OPTIONAL PARAMETERS:
|
|
1259
|
+
- campaign_id: Filter analytics to a specific campaign UUID (omit for all campaigns)
|
|
1260
|
+
- start_date: Start of date range (ISO date, e.g. "2025-01-01")
|
|
1261
|
+
- end_date: End of date range (ISO date, e.g. "2025-03-31")
|
|
1262
|
+
|
|
1263
|
+
EXAMPLE (Single Campaign):
|
|
1264
|
+
{
|
|
1265
|
+
"campaign_id": "019bb2e9-5d96-7f1d-9bc1-c0ef73001b43",
|
|
1266
|
+
"start_date": "2025-01-01",
|
|
1267
|
+
"end_date": "2025-01-31"
|
|
1268
|
+
}
|
|
1269
|
+
|
|
1270
|
+
EXAMPLE (All Campaigns):
|
|
1271
|
+
{
|
|
1272
|
+
"start_date": "2025-01-01",
|
|
1273
|
+
"end_date": "2025-01-31"
|
|
1274
|
+
}
|
|
1275
|
+
|
|
1276
|
+
OUTPUT:
|
|
1277
|
+
{
|
|
1278
|
+
"data": [
|
|
1279
|
+
{
|
|
1280
|
+
"date": "2025-01-15",
|
|
1281
|
+
"sent": 120,
|
|
1282
|
+
"opened": 48,
|
|
1283
|
+
"unique_opened": 42,
|
|
1284
|
+
"replied": 8,
|
|
1285
|
+
"unique_replied": 7,
|
|
1286
|
+
"bounced": 1,
|
|
1287
|
+
"clicks": 12,
|
|
1288
|
+
"unique_clicks": 10
|
|
1289
|
+
}
|
|
1290
|
+
]
|
|
1291
|
+
}`,
|
|
1292
|
+
|
|
1293
|
+
inputSchema: z.object({
|
|
1294
|
+
campaign_id: z.string().optional().describe('Campaign UUID to filter analytics (omit to get all campaigns)'),
|
|
1295
|
+
start_date: z.string().optional().describe('Start of date range (ISO date, e.g. "2025-01-01")'),
|
|
1296
|
+
end_date: z.string().optional().describe('End of date range (ISO date, e.g. "2025-03-31")')
|
|
1297
|
+
}),
|
|
1298
|
+
|
|
1299
|
+
outputSchema: z.object({
|
|
1300
|
+
data: z
|
|
1301
|
+
.array(
|
|
1302
|
+
z.object({
|
|
1303
|
+
date: z.string().describe('Date (YYYY-MM-DD)'),
|
|
1304
|
+
sent: z.number().describe('Emails sent on this date'),
|
|
1305
|
+
opened: z.number().describe('Total open events'),
|
|
1306
|
+
unique_opened: z.number().describe('Unique leads who opened'),
|
|
1307
|
+
replied: z.number().describe('Total reply events'),
|
|
1308
|
+
unique_replied: z.number().describe('Unique leads who replied'),
|
|
1309
|
+
bounced: z.number().describe('Emails bounced'),
|
|
1310
|
+
clicks: z.number().describe('Total link click events'),
|
|
1311
|
+
unique_clicks: z.number().describe('Unique leads who clicked')
|
|
1312
|
+
})
|
|
1313
|
+
)
|
|
1314
|
+
.describe('Array of daily analytics entries')
|
|
1315
|
+
}),
|
|
1316
|
+
|
|
1317
|
+
integration: 'instantly' as const,
|
|
1318
|
+
method: 'getDailyCampaignAnalytics' as const,
|
|
1319
|
+
credentialName
|
|
1320
|
+
})
|
|
1321
|
+
}
|
|
1322
|
+
|
|
1323
|
+
/**
|
|
1324
|
+
* Create Instantly list leads tool
|
|
1325
|
+
*
|
|
1326
|
+
* Lists leads with optional filtering by campaign or email and cursor pagination.
|
|
1327
|
+
*
|
|
1328
|
+
* @param credentialName - Name of credential in credentials table
|
|
1329
|
+
* @returns Tool that lists Instantly leads
|
|
1330
|
+
*
|
|
1331
|
+
* @example
|
|
1332
|
+
* const listLeads = createInstantlyListLeadsTool('instantly-elevasis')
|
|
1333
|
+
*/
|
|
1334
|
+
export function createInstantlyListLeadsTool(credentialName: string): Tool {
|
|
1335
|
+
return createIntegrationTool({
|
|
1336
|
+
name: 'instantly_list_leads',
|
|
1337
|
+
description: `List leads in Instantly with optional filtering and pagination
|
|
1338
|
+
|
|
1339
|
+
USE CASES:
|
|
1340
|
+
- Retrieve all leads enrolled in a specific campaign for auditing
|
|
1341
|
+
- Look up a specific lead by email address to check their status
|
|
1342
|
+
- Paginate through a large lead list using cursor-based pagination
|
|
1343
|
+
- Review lead metadata including status, timestamps, and campaign assignment
|
|
1344
|
+
|
|
1345
|
+
OPTIONAL PARAMETERS:
|
|
1346
|
+
- campaign_id: Filter leads by campaign UUID
|
|
1347
|
+
- email: Filter by specific lead email address
|
|
1348
|
+
- limit: Number of leads per page
|
|
1349
|
+
- starting_after: Cursor from previous response for pagination
|
|
1350
|
+
|
|
1351
|
+
NOTE: This uses a POST endpoint per Instantly API design (complex filter arguments).
|
|
1352
|
+
|
|
1353
|
+
EXAMPLE (Campaign Leads):
|
|
1354
|
+
{
|
|
1355
|
+
"campaign_id": "019bb2e9-5d96-7f1d-9bc1-c0ef73001b43",
|
|
1356
|
+
"limit": 50
|
|
1357
|
+
}
|
|
1358
|
+
|
|
1359
|
+
EXAMPLE (Single Lead Lookup):
|
|
1360
|
+
{
|
|
1361
|
+
"email": "prospect@agency.com"
|
|
1362
|
+
}
|
|
1363
|
+
|
|
1364
|
+
OUTPUT:
|
|
1365
|
+
{
|
|
1366
|
+
"items": [
|
|
1367
|
+
{
|
|
1368
|
+
"id": "lead-abc123",
|
|
1369
|
+
"email": "prospect@agency.com",
|
|
1370
|
+
"first_name": "John",
|
|
1371
|
+
"last_name": "Smith",
|
|
1372
|
+
"company_name": "Acme Agency",
|
|
1373
|
+
"status": "active",
|
|
1374
|
+
"campaign_id": "019bb2e9-5d96-7f1d-9bc1-c0ef73001b43",
|
|
1375
|
+
"timestamp_created": "2025-01-15T09:00:00Z"
|
|
1376
|
+
}
|
|
1377
|
+
],
|
|
1378
|
+
"next_starting_after": "cursor-token"
|
|
1379
|
+
}`,
|
|
1380
|
+
|
|
1381
|
+
inputSchema: z.object({
|
|
1382
|
+
campaign_id: z.string().optional().describe('Filter leads by campaign UUID'),
|
|
1383
|
+
email: z.string().optional().describe('Filter by specific lead email address'),
|
|
1384
|
+
limit: z.number().min(1).max(100).optional().describe('Number of leads per page'),
|
|
1385
|
+
starting_after: z
|
|
1386
|
+
.string()
|
|
1387
|
+
.optional()
|
|
1388
|
+
.describe('Cursor for pagination (from next_starting_after in previous response)')
|
|
1389
|
+
}),
|
|
1390
|
+
|
|
1391
|
+
outputSchema: z.object({
|
|
1392
|
+
items: z
|
|
1393
|
+
.array(
|
|
1394
|
+
z.object({
|
|
1395
|
+
id: z.string().describe('Lead ID'),
|
|
1396
|
+
email: z.string().describe('Lead email address'),
|
|
1397
|
+
first_name: z.string().optional().describe('Lead first name'),
|
|
1398
|
+
last_name: z.string().optional().describe('Lead last name'),
|
|
1399
|
+
company_name: z.string().optional().describe('Lead company name'),
|
|
1400
|
+
status: z.string().describe('Lead status in campaign'),
|
|
1401
|
+
campaign_id: z.string().optional().describe('Campaign this lead belongs to'),
|
|
1402
|
+
timestamp_created: z.string().optional().describe('Lead creation timestamp')
|
|
1403
|
+
})
|
|
1404
|
+
)
|
|
1405
|
+
.describe('Array of leads'),
|
|
1406
|
+
next_starting_after: z.string().optional().describe('Cursor for next page (undefined = no more pages)')
|
|
1407
|
+
}),
|
|
1408
|
+
|
|
1409
|
+
integration: 'instantly' as const,
|
|
1410
|
+
method: 'listLeads' as const,
|
|
1411
|
+
credentialName
|
|
1412
|
+
})
|
|
1413
|
+
}
|
|
1414
|
+
|
|
1415
|
+
/**
|
|
1416
|
+
* Create Instantly bulk delete leads tool
|
|
1417
|
+
*
|
|
1418
|
+
* Deletes leads in bulk by IDs, campaign, or list with an optional limit.
|
|
1419
|
+
*
|
|
1420
|
+
* @param credentialName - Name of credential in credentials table
|
|
1421
|
+
* @returns Tool that bulk-deletes Instantly leads
|
|
1422
|
+
*
|
|
1423
|
+
* @example
|
|
1424
|
+
* const bulkDeleteLeads = createInstantlyBulkDeleteLeadsTool('instantly-elevasis')
|
|
1425
|
+
*/
|
|
1426
|
+
export function createInstantlyBulkDeleteLeadsTool(credentialName: string): Tool {
|
|
1427
|
+
return createIntegrationTool({
|
|
1428
|
+
name: 'instantly_bulk_delete_leads',
|
|
1429
|
+
description: `Bulk delete leads from Instantly by IDs, campaign, or list
|
|
1430
|
+
|
|
1431
|
+
USE CASES:
|
|
1432
|
+
- Remove a batch of disqualified leads from a campaign at once
|
|
1433
|
+
- Clean up leads from a completed campaign before archiving
|
|
1434
|
+
- Delete leads from a specific list to maintain database hygiene
|
|
1435
|
+
- Remove a set of specific leads by their IDs after a data audit
|
|
1436
|
+
|
|
1437
|
+
OPTIONAL PARAMETERS (at least one filter recommended):
|
|
1438
|
+
- ids: Array of specific lead IDs to delete
|
|
1439
|
+
- campaign_id: Delete all leads from this campaign
|
|
1440
|
+
- list_id: Delete all leads from this list
|
|
1441
|
+
- limit: Maximum number of leads to delete in this operation (1-10000)
|
|
1442
|
+
|
|
1443
|
+
EXAMPLE (Delete by IDs):
|
|
1444
|
+
{
|
|
1445
|
+
"ids": ["lead-abc123", "lead-def456"]
|
|
1446
|
+
}
|
|
1447
|
+
|
|
1448
|
+
EXAMPLE (Delete from Campaign):
|
|
1449
|
+
{
|
|
1450
|
+
"campaign_id": "019bb2e9-5d96-7f1d-9bc1-c0ef73001b43",
|
|
1451
|
+
"limit": 100
|
|
1452
|
+
}
|
|
1453
|
+
|
|
1454
|
+
OUTPUT:
|
|
1455
|
+
{
|
|
1456
|
+
"deleted_count": 42
|
|
1457
|
+
}`,
|
|
1458
|
+
|
|
1459
|
+
inputSchema: z.object({
|
|
1460
|
+
ids: z.array(z.string()).optional().describe('Specific lead IDs to delete'),
|
|
1461
|
+
campaign_id: z.string().optional().describe('Delete leads from this campaign'),
|
|
1462
|
+
list_id: z.string().optional().describe('Delete leads from this list'),
|
|
1463
|
+
limit: z.number().int().min(1).optional().describe('Maximum number of leads to delete')
|
|
1464
|
+
}),
|
|
1465
|
+
|
|
1466
|
+
outputSchema: z.object({
|
|
1467
|
+
deleted_count: z.number().describe('Number of leads deleted')
|
|
1468
|
+
}),
|
|
1469
|
+
|
|
1470
|
+
integration: 'instantly' as const,
|
|
1471
|
+
method: 'bulkDeleteLeads' as const,
|
|
1472
|
+
credentialName
|
|
1473
|
+
})
|
|
1474
|
+
}
|