@firedrill-tools/resend 0.1.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.
Files changed (65) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +198 -0
  3. package/firedrill/agent.target.json +16 -0
  4. package/firedrill/baseline.scenario.json +1687 -0
  5. package/firedrill/conformance.suite.json +19 -0
  6. package/firedrill/contacts-outage.scenario.json +11 -0
  7. package/firedrill/quota-exhausted.scenario.json +17 -0
  8. package/firedrill/rate-limited.scenario.json +11 -0
  9. package/firedrill/resend-audience.drill.json +407 -0
  10. package/firedrill/resend-contacts-outage.drill.json +63 -0
  11. package/firedrill/resend-denied.drill.json +68 -0
  12. package/firedrill/resend-domains-and-keys.drill.json +307 -0
  13. package/firedrill/resend-email-flow.drill.json +286 -0
  14. package/firedrill/resend-fresh-install.drill.json +73 -0
  15. package/firedrill/resend-invalid-key.drill.json +803 -0
  16. package/firedrill/resend-large-page.drill.json +53 -0
  17. package/firedrill/resend-quota-exhausted.drill.json +82 -0
  18. package/firedrill/resend-rate-limited.drill.json +81 -0
  19. package/firedrill/resend-restricted-key.drill.json +441 -0
  20. package/firedrill/resend-tight-limits.drill.json +163 -0
  21. package/firedrill/tight-limits.scenario.json +16 -0
  22. package/firedrill/tools/resend/app/assets/ATTRIBUTION.md +30 -0
  23. package/firedrill/tools/resend/app/assets/fonts/Inter-OFL.txt +93 -0
  24. package/firedrill/tools/resend/app/assets/fonts/JetBrainsMono-OFL.txt +93 -0
  25. package/firedrill/tools/resend/app/assets/fonts/inter-latin-wght-normal.woff2 +0 -0
  26. package/firedrill/tools/resend/app/assets/fonts/jetbrains-mono-latin-400-normal.woff2 +0 -0
  27. package/firedrill/tools/resend/app/assets/resend-icon-white.svg +3 -0
  28. package/firedrill/tools/resend/app/assets/resend-wordmark-white.svg +3 -0
  29. package/firedrill/tools/resend/app/assets/resend.svg +3 -0
  30. package/firedrill/tools/resend/app/site/app.js +90 -0
  31. package/firedrill/tools/resend/app/site/assets/fonts/inter-latin-wght-normal.woff2 +0 -0
  32. package/firedrill/tools/resend/app/site/assets/fonts/jetbrains-mono-latin-400-normal.woff2 +0 -0
  33. package/firedrill/tools/resend/app/site/assets/resend-icon-white.svg +3 -0
  34. package/firedrill/tools/resend/app/site/assets/resend-wordmark-white.svg +3 -0
  35. package/firedrill/tools/resend/app/site/assets/resend.svg +3 -0
  36. package/firedrill/tools/resend/app/site/contact-panel.js +86 -0
  37. package/firedrill/tools/resend/app/site/icons.js +70 -0
  38. package/firedrill/tools/resend/app/site/index.html +56 -0
  39. package/firedrill/tools/resend/app/site/list.js +41 -0
  40. package/firedrill/tools/resend/app/site/styles.css +67 -0
  41. package/firedrill/tools/resend/app/site/ui.js +259 -0
  42. package/firedrill/tools/resend/app/site/view-audience.js +160 -0
  43. package/firedrill/tools/resend/app/site/view-domains.js +106 -0
  44. package/firedrill/tools/resend/app/site/view-email-detail.js +126 -0
  45. package/firedrill/tools/resend/app/site/view-emails.js +83 -0
  46. package/firedrill/tools/resend/app/site/view-keys.js +91 -0
  47. package/firedrill/tools/resend/app/site/views.css +141 -0
  48. package/firedrill/tools/resend/behavior.mjs +114 -0
  49. package/firedrill/tools/resend/lib/check.mjs +75 -0
  50. package/firedrill/tools/resend/lib/core.mjs +112 -0
  51. package/firedrill/tools/resend/lib/json-depth.mjs +45 -0
  52. package/firedrill/tools/resend/lib/page.mjs +66 -0
  53. package/firedrill/tools/resend/lib/time.mjs +60 -0
  54. package/firedrill/tools/resend/lib/wire.mjs +98 -0
  55. package/firedrill/tools/resend/ops/contacts.mjs +199 -0
  56. package/firedrill/tools/resend/ops/domains.mjs +125 -0
  57. package/firedrill/tools/resend/ops/email-model.mjs +100 -0
  58. package/firedrill/tools/resend/ops/emails.mjs +139 -0
  59. package/firedrill/tools/resend/ops/keys-segments.mjs +97 -0
  60. package/firedrill/tools/resend/resend.tool.json +4804 -0
  61. package/firedrill/world.json +2148 -0
  62. package/firedrill.json +5 -0
  63. package/package.json +62 -0
  64. package/starter.json +1686 -0
  65. package/test/conformance.mjs +480 -0
@@ -0,0 +1,4804 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "module": "./behavior.mjs",
4
+ "ui": {
5
+ "root": "app/site",
6
+ "entry": "index.html"
7
+ },
8
+ "manifest": {
9
+ "schemaVersion": 1,
10
+ "id": "resend",
11
+ "version": "0.1.1",
12
+ "engine": ">=0.1.0 <0.2.0",
13
+ "capabilities": [
14
+ "clock.read",
15
+ "event.emit",
16
+ "random.draw",
17
+ "state.read",
18
+ "state.write"
19
+ ],
20
+ "state": [
21
+ {
22
+ "namespace": "api-keys",
23
+ "schema": {
24
+ "type": "object",
25
+ "required": [
26
+ "id",
27
+ "name",
28
+ "permission",
29
+ "domainId",
30
+ "tokenPreview",
31
+ "createdAtUs",
32
+ "lastUsedAtUs"
33
+ ],
34
+ "properties": {
35
+ "id": {
36
+ "type": "string",
37
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
38
+ },
39
+ "name": {
40
+ "type": "string",
41
+ "minLength": 1,
42
+ "maxLength": 50
43
+ },
44
+ "permission": {
45
+ "type": "string",
46
+ "enum": [
47
+ "full_access",
48
+ "sending_access"
49
+ ]
50
+ },
51
+ "domainId": {
52
+ "anyOf": [
53
+ {
54
+ "type": "string",
55
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
56
+ },
57
+ {
58
+ "type": "null"
59
+ }
60
+ ]
61
+ },
62
+ "tokenPreview": {
63
+ "type": "string",
64
+ "pattern": "^re_[0-9A-Za-z]{6}$"
65
+ },
66
+ "createdAtUs": {
67
+ "type": "integer",
68
+ "minimum": 0
69
+ },
70
+ "lastUsedAtUs": {
71
+ "anyOf": [
72
+ {
73
+ "type": "integer",
74
+ "minimum": 0
75
+ },
76
+ {
77
+ "type": "null"
78
+ }
79
+ ]
80
+ }
81
+ },
82
+ "additionalProperties": false
83
+ }
84
+ },
85
+ {
86
+ "namespace": "contact-emails",
87
+ "schema": {
88
+ "type": "object",
89
+ "required": [
90
+ "contactId"
91
+ ],
92
+ "properties": {
93
+ "contactId": {
94
+ "type": "string",
95
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
96
+ }
97
+ },
98
+ "additionalProperties": false
99
+ }
100
+ },
101
+ {
102
+ "namespace": "contact-segments",
103
+ "schema": {
104
+ "type": "object",
105
+ "required": [
106
+ "segmentId",
107
+ "contactId"
108
+ ],
109
+ "properties": {
110
+ "segmentId": {
111
+ "type": "string",
112
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
113
+ },
114
+ "contactId": {
115
+ "type": "string",
116
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
117
+ }
118
+ },
119
+ "additionalProperties": false
120
+ }
121
+ },
122
+ {
123
+ "namespace": "contacts",
124
+ "schema": {
125
+ "type": "object",
126
+ "required": [
127
+ "id",
128
+ "email",
129
+ "firstName",
130
+ "lastName",
131
+ "unsubscribed",
132
+ "properties",
133
+ "createdAtUs"
134
+ ],
135
+ "properties": {
136
+ "id": {
137
+ "type": "string",
138
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
139
+ },
140
+ "email": {
141
+ "type": "string",
142
+ "minLength": 3,
143
+ "maxLength": 320
144
+ },
145
+ "firstName": {
146
+ "anyOf": [
147
+ {
148
+ "type": "string",
149
+ "maxLength": 100
150
+ },
151
+ {
152
+ "type": "null"
153
+ }
154
+ ]
155
+ },
156
+ "lastName": {
157
+ "anyOf": [
158
+ {
159
+ "type": "string",
160
+ "maxLength": 100
161
+ },
162
+ {
163
+ "type": "null"
164
+ }
165
+ ]
166
+ },
167
+ "unsubscribed": {
168
+ "type": "boolean"
169
+ },
170
+ "properties": {
171
+ "type": "object",
172
+ "maxProperties": 20,
173
+ "propertyNames": {
174
+ "pattern": "^[a-z][a-z0-9_]{0,49}$"
175
+ },
176
+ "additionalProperties": {
177
+ "anyOf": [
178
+ {
179
+ "type": "string",
180
+ "maxLength": 500
181
+ },
182
+ {
183
+ "type": "number"
184
+ },
185
+ {
186
+ "type": "null"
187
+ }
188
+ ]
189
+ }
190
+ },
191
+ "createdAtUs": {
192
+ "type": "integer",
193
+ "minimum": 0
194
+ }
195
+ },
196
+ "additionalProperties": false
197
+ }
198
+ },
199
+ {
200
+ "namespace": "domain-names",
201
+ "schema": {
202
+ "type": "object",
203
+ "required": [
204
+ "domainId"
205
+ ],
206
+ "properties": {
207
+ "domainId": {
208
+ "type": "string",
209
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
210
+ }
211
+ },
212
+ "additionalProperties": false
213
+ }
214
+ },
215
+ {
216
+ "namespace": "domains",
217
+ "schema": {
218
+ "type": "object",
219
+ "required": [
220
+ "id",
221
+ "name",
222
+ "region",
223
+ "status",
224
+ "openTracking",
225
+ "clickTracking",
226
+ "tls",
227
+ "customReturnPath",
228
+ "capabilities",
229
+ "records",
230
+ "createdAtUs"
231
+ ],
232
+ "properties": {
233
+ "id": {
234
+ "type": "string",
235
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
236
+ },
237
+ "name": {
238
+ "type": "string",
239
+ "minLength": 4,
240
+ "maxLength": 253
241
+ },
242
+ "region": {
243
+ "type": "string",
244
+ "enum": [
245
+ "us-east-1",
246
+ "eu-west-1",
247
+ "sa-east-1",
248
+ "ap-northeast-1"
249
+ ]
250
+ },
251
+ "status": {
252
+ "type": "string",
253
+ "enum": [
254
+ "not_started",
255
+ "pending",
256
+ "verified",
257
+ "failed"
258
+ ]
259
+ },
260
+ "openTracking": {
261
+ "type": "boolean"
262
+ },
263
+ "clickTracking": {
264
+ "type": "boolean"
265
+ },
266
+ "tls": {
267
+ "type": "string",
268
+ "enum": [
269
+ "opportunistic",
270
+ "enforced"
271
+ ]
272
+ },
273
+ "customReturnPath": {
274
+ "type": "string",
275
+ "minLength": 1,
276
+ "maxLength": 63
277
+ },
278
+ "capabilities": {
279
+ "type": "object",
280
+ "required": [
281
+ "sending",
282
+ "receiving"
283
+ ],
284
+ "properties": {
285
+ "sending": {
286
+ "type": "string",
287
+ "enum": [
288
+ "enabled",
289
+ "disabled"
290
+ ]
291
+ },
292
+ "receiving": {
293
+ "type": "string",
294
+ "enum": [
295
+ "enabled",
296
+ "disabled"
297
+ ]
298
+ }
299
+ },
300
+ "additionalProperties": false
301
+ },
302
+ "records": {
303
+ "type": "array",
304
+ "items": {
305
+ "type": "object",
306
+ "required": [
307
+ "record",
308
+ "name",
309
+ "type",
310
+ "ttl",
311
+ "status",
312
+ "value",
313
+ "priority"
314
+ ],
315
+ "properties": {
316
+ "record": {
317
+ "type": "string",
318
+ "enum": [
319
+ "SPF",
320
+ "DKIM",
321
+ "Receiving"
322
+ ]
323
+ },
324
+ "name": {
325
+ "type": "string",
326
+ "minLength": 1,
327
+ "maxLength": 320
328
+ },
329
+ "type": {
330
+ "type": "string",
331
+ "enum": [
332
+ "MX",
333
+ "TXT"
334
+ ]
335
+ },
336
+ "ttl": {
337
+ "type": "string",
338
+ "enum": [
339
+ "Auto"
340
+ ]
341
+ },
342
+ "status": {
343
+ "type": "string",
344
+ "enum": [
345
+ "not_started",
346
+ "pending",
347
+ "verified",
348
+ "failed"
349
+ ]
350
+ },
351
+ "value": {
352
+ "type": "string",
353
+ "minLength": 1,
354
+ "maxLength": 1024
355
+ },
356
+ "priority": {
357
+ "anyOf": [
358
+ {
359
+ "type": "integer",
360
+ "minimum": 0,
361
+ "maximum": 65535
362
+ },
363
+ {
364
+ "type": "null"
365
+ }
366
+ ]
367
+ }
368
+ },
369
+ "additionalProperties": false
370
+ },
371
+ "minItems": 2,
372
+ "maxItems": 4
373
+ },
374
+ "createdAtUs": {
375
+ "type": "integer",
376
+ "minimum": 0
377
+ }
378
+ },
379
+ "additionalProperties": false
380
+ }
381
+ },
382
+ {
383
+ "namespace": "emails",
384
+ "schema": {
385
+ "type": "object",
386
+ "required": [
387
+ "id",
388
+ "from",
389
+ "to",
390
+ "cc",
391
+ "bcc",
392
+ "replyTo",
393
+ "subject",
394
+ "html",
395
+ "text",
396
+ "headers",
397
+ "tags",
398
+ "createdAtUs",
399
+ "scheduledAtUs",
400
+ "status",
401
+ "apiKeyId",
402
+ "batchId"
403
+ ],
404
+ "properties": {
405
+ "id": {
406
+ "type": "string",
407
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
408
+ },
409
+ "from": {
410
+ "type": "string",
411
+ "minLength": 1,
412
+ "maxLength": 320
413
+ },
414
+ "to": {
415
+ "type": "array",
416
+ "items": {
417
+ "type": "string",
418
+ "minLength": 1,
419
+ "maxLength": 320
420
+ },
421
+ "minItems": 1,
422
+ "maxItems": 50
423
+ },
424
+ "cc": {
425
+ "type": "array",
426
+ "items": {
427
+ "type": "string",
428
+ "minLength": 1,
429
+ "maxLength": 320
430
+ },
431
+ "maxItems": 50
432
+ },
433
+ "bcc": {
434
+ "type": "array",
435
+ "items": {
436
+ "type": "string",
437
+ "minLength": 1,
438
+ "maxLength": 320
439
+ },
440
+ "maxItems": 50
441
+ },
442
+ "replyTo": {
443
+ "type": "array",
444
+ "items": {
445
+ "type": "string",
446
+ "minLength": 1,
447
+ "maxLength": 320
448
+ },
449
+ "maxItems": 50
450
+ },
451
+ "subject": {
452
+ "type": "string",
453
+ "minLength": 1,
454
+ "maxLength": 998
455
+ },
456
+ "html": {
457
+ "anyOf": [
458
+ {
459
+ "type": "string",
460
+ "maxLength": 512000
461
+ },
462
+ {
463
+ "type": "null"
464
+ }
465
+ ]
466
+ },
467
+ "text": {
468
+ "anyOf": [
469
+ {
470
+ "type": "string",
471
+ "maxLength": 512000
472
+ },
473
+ {
474
+ "type": "null"
475
+ }
476
+ ]
477
+ },
478
+ "headers": {
479
+ "type": "object",
480
+ "additionalProperties": {
481
+ "type": "string",
482
+ "maxLength": 998
483
+ },
484
+ "maxProperties": 30
485
+ },
486
+ "tags": {
487
+ "type": "array",
488
+ "items": {
489
+ "type": "object",
490
+ "required": [
491
+ "name",
492
+ "value"
493
+ ],
494
+ "properties": {
495
+ "name": {
496
+ "type": "string",
497
+ "minLength": 1,
498
+ "maxLength": 256
499
+ },
500
+ "value": {
501
+ "type": "string",
502
+ "minLength": 1,
503
+ "maxLength": 256
504
+ }
505
+ },
506
+ "additionalProperties": false
507
+ },
508
+ "maxItems": 10
509
+ },
510
+ "createdAtUs": {
511
+ "type": "integer",
512
+ "minimum": 0
513
+ },
514
+ "scheduledAtUs": {
515
+ "anyOf": [
516
+ {
517
+ "type": "integer",
518
+ "minimum": 0
519
+ },
520
+ {
521
+ "type": "null"
522
+ }
523
+ ]
524
+ },
525
+ "status": {
526
+ "type": "string",
527
+ "enum": [
528
+ "delivered",
529
+ "bounced",
530
+ "scheduled",
531
+ "canceled",
532
+ "sent"
533
+ ]
534
+ },
535
+ "apiKeyId": {
536
+ "type": "string",
537
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
538
+ },
539
+ "batchId": {
540
+ "anyOf": [
541
+ {
542
+ "type": "string",
543
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
544
+ },
545
+ {
546
+ "type": "null"
547
+ }
548
+ ]
549
+ }
550
+ },
551
+ "additionalProperties": false
552
+ }
553
+ },
554
+ {
555
+ "namespace": "meta",
556
+ "schema": {
557
+ "anyOf": [
558
+ {
559
+ "type": "object",
560
+ "required": [
561
+ "name",
562
+ "defaultApiKeyId",
563
+ "dailyQuota",
564
+ "plan"
565
+ ],
566
+ "properties": {
567
+ "name": {
568
+ "type": "string",
569
+ "minLength": 1,
570
+ "maxLength": 100
571
+ },
572
+ "defaultApiKeyId": {
573
+ "type": "string",
574
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
575
+ },
576
+ "dailyQuota": {
577
+ "type": "integer",
578
+ "minimum": 1,
579
+ "maximum": 100000
580
+ },
581
+ "plan": {
582
+ "type": "string",
583
+ "enum": [
584
+ "free",
585
+ "pro",
586
+ "scale"
587
+ ]
588
+ }
589
+ },
590
+ "additionalProperties": false
591
+ },
592
+ {
593
+ "type": "object",
594
+ "required": [
595
+ "day",
596
+ "sent"
597
+ ],
598
+ "properties": {
599
+ "day": {
600
+ "type": "string",
601
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
602
+ },
603
+ "sent": {
604
+ "type": "integer",
605
+ "minimum": 0
606
+ }
607
+ },
608
+ "additionalProperties": false
609
+ },
610
+ {
611
+ "type": "object",
612
+ "required": [
613
+ "emails",
614
+ "domains",
615
+ "apiKeys",
616
+ "segments",
617
+ "contacts"
618
+ ],
619
+ "properties": {
620
+ "emails": {
621
+ "type": "integer",
622
+ "minimum": 0
623
+ },
624
+ "domains": {
625
+ "type": "integer",
626
+ "minimum": 0
627
+ },
628
+ "apiKeys": {
629
+ "type": "integer",
630
+ "minimum": 0
631
+ },
632
+ "segments": {
633
+ "type": "integer",
634
+ "minimum": 0
635
+ },
636
+ "contacts": {
637
+ "type": "integer",
638
+ "minimum": 0
639
+ }
640
+ },
641
+ "additionalProperties": false
642
+ },
643
+ {
644
+ "type": "object",
645
+ "required": [
646
+ "maxScanRows"
647
+ ],
648
+ "properties": {
649
+ "maxScanRows": {
650
+ "type": "integer",
651
+ "minimum": 1,
652
+ "maximum": 10000
653
+ }
654
+ },
655
+ "additionalProperties": false
656
+ }
657
+ ]
658
+ }
659
+ },
660
+ {
661
+ "namespace": "segment-members",
662
+ "schema": {
663
+ "type": "object",
664
+ "required": [
665
+ "segmentId",
666
+ "contactId",
667
+ "addedAtUs"
668
+ ],
669
+ "properties": {
670
+ "segmentId": {
671
+ "type": "string",
672
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
673
+ },
674
+ "contactId": {
675
+ "type": "string",
676
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
677
+ },
678
+ "addedAtUs": {
679
+ "type": "integer",
680
+ "minimum": 0
681
+ }
682
+ },
683
+ "additionalProperties": false
684
+ }
685
+ },
686
+ {
687
+ "namespace": "segments",
688
+ "schema": {
689
+ "type": "object",
690
+ "required": [
691
+ "id",
692
+ "name",
693
+ "createdAtUs"
694
+ ],
695
+ "properties": {
696
+ "id": {
697
+ "type": "string",
698
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
699
+ },
700
+ "name": {
701
+ "type": "string",
702
+ "minLength": 1,
703
+ "maxLength": 100
704
+ },
705
+ "createdAtUs": {
706
+ "type": "integer",
707
+ "minimum": 0
708
+ }
709
+ },
710
+ "additionalProperties": false
711
+ }
712
+ }
713
+ ],
714
+ "operations": [
715
+ {
716
+ "id": "api_keys.create",
717
+ "description": "Create an API key; the token is returned once (POST /api-keys).",
718
+ "inputSchema": {
719
+ "type": "object",
720
+ "required": [],
721
+ "properties": {
722
+ "name": {
723
+ "anyOf": [
724
+ {
725
+ "type": "string",
726
+ "maxLength": 1000
727
+ },
728
+ {
729
+ "type": "null"
730
+ }
731
+ ]
732
+ },
733
+ "permission": {
734
+ "anyOf": [
735
+ {
736
+ "type": "string",
737
+ "maxLength": 100
738
+ },
739
+ {
740
+ "type": "null"
741
+ }
742
+ ]
743
+ },
744
+ "domainId": {
745
+ "anyOf": [
746
+ {
747
+ "type": "string",
748
+ "maxLength": 512
749
+ },
750
+ {
751
+ "type": "null"
752
+ }
753
+ ]
754
+ },
755
+ "idempotencyKey": {
756
+ "type": "string",
757
+ "maxLength": 4096
758
+ }
759
+ },
760
+ "additionalProperties": false
761
+ },
762
+ "outputSchema": {
763
+ "type": "object",
764
+ "required": [
765
+ "id",
766
+ "token"
767
+ ],
768
+ "properties": {
769
+ "id": {
770
+ "type": "string",
771
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
772
+ },
773
+ "token": {
774
+ "type": "string",
775
+ "pattern": "^re_[0-9A-Za-z]{32}$"
776
+ }
777
+ },
778
+ "additionalProperties": false
779
+ },
780
+ "declaredErrors": [
781
+ "INVALID_API_KEY",
782
+ "INVALID_IDEMPOTENCY_KEY",
783
+ "MISSING_REQUIRED_FIELD",
784
+ "RESTRICTED_API_KEY",
785
+ "VALIDATION_ERROR"
786
+ ],
787
+ "idempotency": "optional",
788
+ "fidelity": "behavioral",
789
+ "mcp": {
790
+ "name": "create-api-key"
791
+ }
792
+ },
793
+ {
794
+ "id": "api_keys.list",
795
+ "description": "List API keys newest first (GET /api-keys).",
796
+ "inputSchema": {
797
+ "type": "object",
798
+ "required": [],
799
+ "properties": {
800
+ "limit": {
801
+ "anyOf": [
802
+ {
803
+ "type": "integer"
804
+ },
805
+ {
806
+ "type": "string",
807
+ "maxLength": 32
808
+ }
809
+ ]
810
+ },
811
+ "after": {
812
+ "type": "string",
813
+ "maxLength": 512
814
+ },
815
+ "before": {
816
+ "type": "string",
817
+ "maxLength": 512
818
+ }
819
+ },
820
+ "additionalProperties": false
821
+ },
822
+ "outputSchema": {
823
+ "type": "object",
824
+ "required": [
825
+ "object",
826
+ "has_more",
827
+ "data"
828
+ ],
829
+ "properties": {
830
+ "object": {
831
+ "type": "string",
832
+ "enum": [
833
+ "list"
834
+ ]
835
+ },
836
+ "has_more": {
837
+ "type": "boolean"
838
+ },
839
+ "data": {
840
+ "type": "array",
841
+ "items": {
842
+ "type": "object",
843
+ "required": [
844
+ "id",
845
+ "name",
846
+ "created_at",
847
+ "last_used_at"
848
+ ],
849
+ "properties": {
850
+ "id": {
851
+ "type": "string",
852
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
853
+ },
854
+ "name": {
855
+ "type": "string"
856
+ },
857
+ "created_at": {
858
+ "type": "string",
859
+ "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}\\.\\d{6}\\+00$"
860
+ },
861
+ "last_used_at": {
862
+ "anyOf": [
863
+ {
864
+ "type": "string",
865
+ "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}\\.\\d{6}\\+00$"
866
+ },
867
+ {
868
+ "type": "null"
869
+ }
870
+ ]
871
+ }
872
+ },
873
+ "additionalProperties": false
874
+ }
875
+ }
876
+ },
877
+ "additionalProperties": false
878
+ },
879
+ "declaredErrors": [
880
+ "APPLICATION_ERROR",
881
+ "INVALID_API_KEY",
882
+ "RESTRICTED_API_KEY",
883
+ "VALIDATION_ERROR"
884
+ ],
885
+ "idempotency": "none",
886
+ "fidelity": "stateful",
887
+ "mcp": {
888
+ "name": "list-api-keys"
889
+ }
890
+ },
891
+ {
892
+ "id": "api_keys.remove",
893
+ "description": "Remove an API key (DELETE /api-keys/{api_key_id}).",
894
+ "inputSchema": {
895
+ "type": "object",
896
+ "required": [
897
+ "id"
898
+ ],
899
+ "properties": {
900
+ "id": {
901
+ "type": "string",
902
+ "maxLength": 512
903
+ },
904
+ "idempotencyKey": {
905
+ "type": "string",
906
+ "maxLength": 4096
907
+ }
908
+ },
909
+ "additionalProperties": false
910
+ },
911
+ "outputSchema": {
912
+ "type": "object",
913
+ "required": [
914
+ "object",
915
+ "id",
916
+ "deleted"
917
+ ],
918
+ "properties": {
919
+ "object": {
920
+ "type": "string",
921
+ "enum": [
922
+ "api_key"
923
+ ]
924
+ },
925
+ "id": {
926
+ "type": "string",
927
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
928
+ },
929
+ "deleted": {
930
+ "type": "boolean",
931
+ "enum": [
932
+ true
933
+ ]
934
+ }
935
+ },
936
+ "additionalProperties": false
937
+ },
938
+ "declaredErrors": [
939
+ "INVALID_API_KEY",
940
+ "INVALID_IDEMPOTENCY_KEY",
941
+ "INVALID_PARAMETER",
942
+ "NOT_FOUND",
943
+ "RESTRICTED_API_KEY",
944
+ "VALIDATION_ERROR"
945
+ ],
946
+ "idempotency": "optional",
947
+ "fidelity": "stateful",
948
+ "mcp": {
949
+ "name": "remove-api-key"
950
+ }
951
+ },
952
+ {
953
+ "id": "contacts.add_segment",
954
+ "description": "Add a contact to a segment (POST /contacts/{contact_id}/segments/{segment_id}).",
955
+ "inputSchema": {
956
+ "type": "object",
957
+ "required": [],
958
+ "properties": {
959
+ "contactId": {
960
+ "type": "string",
961
+ "maxLength": 512
962
+ },
963
+ "email": {
964
+ "type": "string",
965
+ "maxLength": 1000
966
+ },
967
+ "segmentId": {
968
+ "type": "string",
969
+ "maxLength": 512
970
+ },
971
+ "idempotencyKey": {
972
+ "type": "string",
973
+ "maxLength": 4096
974
+ }
975
+ },
976
+ "additionalProperties": false
977
+ },
978
+ "outputSchema": {
979
+ "type": "object",
980
+ "required": [
981
+ "object",
982
+ "contact_id",
983
+ "segment_id"
984
+ ],
985
+ "properties": {
986
+ "object": {
987
+ "type": "string",
988
+ "enum": [
989
+ "contact_segment"
990
+ ]
991
+ },
992
+ "contact_id": {
993
+ "type": "string",
994
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
995
+ },
996
+ "segment_id": {
997
+ "type": "string",
998
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
999
+ }
1000
+ },
1001
+ "additionalProperties": false
1002
+ },
1003
+ "declaredErrors": [
1004
+ "INVALID_API_KEY",
1005
+ "INVALID_IDEMPOTENCY_KEY",
1006
+ "INVALID_PARAMETER",
1007
+ "MISSING_REQUIRED_FIELD",
1008
+ "NOT_FOUND",
1009
+ "RESTRICTED_API_KEY"
1010
+ ],
1011
+ "idempotency": "optional",
1012
+ "fidelity": "stateful",
1013
+ "mcp": {
1014
+ "name": "add-contact-to-segment"
1015
+ }
1016
+ },
1017
+ {
1018
+ "id": "contacts.create",
1019
+ "description": "Create a contact, optionally in segments (POST /contacts).",
1020
+ "inputSchema": {
1021
+ "type": "object",
1022
+ "required": [],
1023
+ "properties": {
1024
+ "email": {
1025
+ "anyOf": [
1026
+ {
1027
+ "type": "string",
1028
+ "maxLength": 1000
1029
+ },
1030
+ {
1031
+ "type": "null"
1032
+ }
1033
+ ]
1034
+ },
1035
+ "firstName": {
1036
+ "anyOf": [
1037
+ {
1038
+ "type": "string",
1039
+ "maxLength": 1000
1040
+ },
1041
+ {
1042
+ "type": "null"
1043
+ }
1044
+ ]
1045
+ },
1046
+ "lastName": {
1047
+ "anyOf": [
1048
+ {
1049
+ "type": "string",
1050
+ "maxLength": 1000
1051
+ },
1052
+ {
1053
+ "type": "null"
1054
+ }
1055
+ ]
1056
+ },
1057
+ "unsubscribed": {
1058
+ "anyOf": [
1059
+ {
1060
+ "type": "boolean"
1061
+ },
1062
+ {
1063
+ "type": "null"
1064
+ }
1065
+ ]
1066
+ },
1067
+ "properties": {
1068
+ "anyOf": [
1069
+ {
1070
+ "type": "object",
1071
+ "maxProperties": 1000,
1072
+ "additionalProperties": {
1073
+ "anyOf": [
1074
+ {
1075
+ "type": "string",
1076
+ "maxLength": 10000
1077
+ },
1078
+ {
1079
+ "type": "number"
1080
+ },
1081
+ {
1082
+ "type": "null"
1083
+ }
1084
+ ]
1085
+ }
1086
+ },
1087
+ {
1088
+ "type": "null"
1089
+ }
1090
+ ]
1091
+ },
1092
+ "segmentIds": {
1093
+ "anyOf": [
1094
+ {
1095
+ "type": "array",
1096
+ "items": {
1097
+ "type": "string",
1098
+ "maxLength": 512
1099
+ },
1100
+ "maxItems": 1000
1101
+ },
1102
+ {
1103
+ "type": "null"
1104
+ }
1105
+ ]
1106
+ },
1107
+ "topics": {
1108
+ "anyOf": [
1109
+ {
1110
+ "type": "array",
1111
+ "items": {},
1112
+ "maxItems": 1000
1113
+ },
1114
+ {
1115
+ "type": "null"
1116
+ }
1117
+ ]
1118
+ },
1119
+ "audienceId": {
1120
+ "anyOf": [
1121
+ {
1122
+ "type": "string",
1123
+ "maxLength": 512
1124
+ },
1125
+ {
1126
+ "type": "null"
1127
+ }
1128
+ ]
1129
+ },
1130
+ "idempotencyKey": {
1131
+ "type": "string",
1132
+ "maxLength": 4096
1133
+ }
1134
+ },
1135
+ "additionalProperties": false
1136
+ },
1137
+ "outputSchema": {
1138
+ "type": "object",
1139
+ "required": [
1140
+ "object",
1141
+ "id"
1142
+ ],
1143
+ "properties": {
1144
+ "object": {
1145
+ "type": "string",
1146
+ "enum": [
1147
+ "contact"
1148
+ ]
1149
+ },
1150
+ "id": {
1151
+ "type": "string",
1152
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
1153
+ }
1154
+ },
1155
+ "additionalProperties": false
1156
+ },
1157
+ "declaredErrors": [
1158
+ "APPLICATION_ERROR",
1159
+ "INVALID_API_KEY",
1160
+ "INVALID_IDEMPOTENCY_KEY",
1161
+ "MISSING_REQUIRED_FIELD",
1162
+ "RESTRICTED_API_KEY",
1163
+ "VALIDATION_ERROR"
1164
+ ],
1165
+ "idempotency": "optional",
1166
+ "fidelity": "behavioral",
1167
+ "mcp": {
1168
+ "name": "create-contact"
1169
+ }
1170
+ },
1171
+ {
1172
+ "id": "contacts.get",
1173
+ "description": "Retrieve a contact by id or e-mail (GET /contacts/{id}).",
1174
+ "inputSchema": {
1175
+ "type": "object",
1176
+ "required": [],
1177
+ "properties": {
1178
+ "id": {
1179
+ "type": "string",
1180
+ "maxLength": 512
1181
+ },
1182
+ "email": {
1183
+ "type": "string",
1184
+ "maxLength": 1000
1185
+ }
1186
+ },
1187
+ "additionalProperties": false
1188
+ },
1189
+ "outputSchema": {
1190
+ "type": "object",
1191
+ "required": [
1192
+ "object",
1193
+ "id",
1194
+ "email",
1195
+ "first_name",
1196
+ "last_name",
1197
+ "created_at",
1198
+ "unsubscribed",
1199
+ "properties"
1200
+ ],
1201
+ "properties": {
1202
+ "object": {
1203
+ "type": "string",
1204
+ "enum": [
1205
+ "contact"
1206
+ ]
1207
+ },
1208
+ "id": {
1209
+ "type": "string",
1210
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
1211
+ },
1212
+ "email": {
1213
+ "type": "string"
1214
+ },
1215
+ "first_name": {
1216
+ "anyOf": [
1217
+ {
1218
+ "type": "string"
1219
+ },
1220
+ {
1221
+ "type": "null"
1222
+ }
1223
+ ]
1224
+ },
1225
+ "last_name": {
1226
+ "anyOf": [
1227
+ {
1228
+ "type": "string"
1229
+ },
1230
+ {
1231
+ "type": "null"
1232
+ }
1233
+ ]
1234
+ },
1235
+ "created_at": {
1236
+ "type": "string",
1237
+ "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}\\.\\d{6}\\+00$"
1238
+ },
1239
+ "unsubscribed": {
1240
+ "type": "boolean"
1241
+ },
1242
+ "properties": {
1243
+ "type": "object",
1244
+ "additionalProperties": {
1245
+ "anyOf": [
1246
+ {
1247
+ "type": "string"
1248
+ },
1249
+ {
1250
+ "type": "number"
1251
+ },
1252
+ {
1253
+ "type": "null"
1254
+ }
1255
+ ]
1256
+ }
1257
+ }
1258
+ },
1259
+ "additionalProperties": false
1260
+ },
1261
+ "declaredErrors": [
1262
+ "INVALID_API_KEY",
1263
+ "INVALID_PARAMETER",
1264
+ "MISSING_REQUIRED_FIELD",
1265
+ "NOT_FOUND",
1266
+ "RESTRICTED_API_KEY"
1267
+ ],
1268
+ "idempotency": "none",
1269
+ "fidelity": "stateful",
1270
+ "mcp": {
1271
+ "name": "get-contact"
1272
+ }
1273
+ },
1274
+ {
1275
+ "id": "contacts.list",
1276
+ "description": "List contacts newest first, optionally in one segment (GET /contacts).",
1277
+ "inputSchema": {
1278
+ "type": "object",
1279
+ "required": [],
1280
+ "properties": {
1281
+ "limit": {
1282
+ "anyOf": [
1283
+ {
1284
+ "type": "integer"
1285
+ },
1286
+ {
1287
+ "type": "string",
1288
+ "maxLength": 32
1289
+ }
1290
+ ]
1291
+ },
1292
+ "after": {
1293
+ "type": "string",
1294
+ "maxLength": 512
1295
+ },
1296
+ "before": {
1297
+ "type": "string",
1298
+ "maxLength": 512
1299
+ },
1300
+ "segmentId": {
1301
+ "type": "string",
1302
+ "maxLength": 512
1303
+ },
1304
+ "query": {
1305
+ "type": "string",
1306
+ "maxLength": 1000
1307
+ }
1308
+ },
1309
+ "additionalProperties": false
1310
+ },
1311
+ "outputSchema": {
1312
+ "type": "object",
1313
+ "required": [
1314
+ "object",
1315
+ "has_more",
1316
+ "data"
1317
+ ],
1318
+ "properties": {
1319
+ "object": {
1320
+ "type": "string",
1321
+ "enum": [
1322
+ "list"
1323
+ ]
1324
+ },
1325
+ "has_more": {
1326
+ "type": "boolean"
1327
+ },
1328
+ "data": {
1329
+ "type": "array",
1330
+ "items": {
1331
+ "type": "object",
1332
+ "required": [
1333
+ "id",
1334
+ "email",
1335
+ "first_name",
1336
+ "last_name",
1337
+ "created_at",
1338
+ "unsubscribed"
1339
+ ],
1340
+ "properties": {
1341
+ "id": {
1342
+ "type": "string",
1343
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
1344
+ },
1345
+ "email": {
1346
+ "type": "string"
1347
+ },
1348
+ "first_name": {
1349
+ "anyOf": [
1350
+ {
1351
+ "type": "string"
1352
+ },
1353
+ {
1354
+ "type": "null"
1355
+ }
1356
+ ]
1357
+ },
1358
+ "last_name": {
1359
+ "anyOf": [
1360
+ {
1361
+ "type": "string"
1362
+ },
1363
+ {
1364
+ "type": "null"
1365
+ }
1366
+ ]
1367
+ },
1368
+ "created_at": {
1369
+ "type": "string",
1370
+ "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}\\.\\d{6}\\+00$"
1371
+ },
1372
+ "unsubscribed": {
1373
+ "type": "boolean"
1374
+ }
1375
+ },
1376
+ "additionalProperties": false
1377
+ }
1378
+ }
1379
+ },
1380
+ "additionalProperties": false
1381
+ },
1382
+ "declaredErrors": [
1383
+ "APPLICATION_ERROR",
1384
+ "INVALID_API_KEY",
1385
+ "INVALID_PARAMETER",
1386
+ "NOT_FOUND",
1387
+ "RESTRICTED_API_KEY",
1388
+ "VALIDATION_ERROR"
1389
+ ],
1390
+ "idempotency": "none",
1391
+ "fidelity": "behavioral",
1392
+ "mcp": {
1393
+ "name": "list-contacts"
1394
+ }
1395
+ },
1396
+ {
1397
+ "id": "contacts.list_segments",
1398
+ "description": "List the segments of a contact (GET /contacts/{contact_id}/segments).",
1399
+ "inputSchema": {
1400
+ "type": "object",
1401
+ "required": [],
1402
+ "properties": {
1403
+ "contactId": {
1404
+ "type": "string",
1405
+ "maxLength": 512
1406
+ },
1407
+ "email": {
1408
+ "type": "string",
1409
+ "maxLength": 1000
1410
+ },
1411
+ "limit": {
1412
+ "anyOf": [
1413
+ {
1414
+ "type": "integer"
1415
+ },
1416
+ {
1417
+ "type": "string",
1418
+ "maxLength": 32
1419
+ }
1420
+ ]
1421
+ },
1422
+ "after": {
1423
+ "type": "string",
1424
+ "maxLength": 512
1425
+ },
1426
+ "before": {
1427
+ "type": "string",
1428
+ "maxLength": 512
1429
+ }
1430
+ },
1431
+ "additionalProperties": false
1432
+ },
1433
+ "outputSchema": {
1434
+ "type": "object",
1435
+ "required": [
1436
+ "object",
1437
+ "has_more",
1438
+ "data"
1439
+ ],
1440
+ "properties": {
1441
+ "object": {
1442
+ "type": "string",
1443
+ "enum": [
1444
+ "list"
1445
+ ]
1446
+ },
1447
+ "has_more": {
1448
+ "type": "boolean"
1449
+ },
1450
+ "data": {
1451
+ "type": "array",
1452
+ "items": {
1453
+ "type": "object",
1454
+ "required": [
1455
+ "id",
1456
+ "name",
1457
+ "created_at"
1458
+ ],
1459
+ "properties": {
1460
+ "id": {
1461
+ "type": "string",
1462
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
1463
+ },
1464
+ "name": {
1465
+ "type": "string"
1466
+ },
1467
+ "created_at": {
1468
+ "type": "string",
1469
+ "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}\\.\\d{6}\\+00$"
1470
+ }
1471
+ },
1472
+ "additionalProperties": false
1473
+ }
1474
+ }
1475
+ },
1476
+ "additionalProperties": false
1477
+ },
1478
+ "declaredErrors": [
1479
+ "APPLICATION_ERROR",
1480
+ "INVALID_API_KEY",
1481
+ "INVALID_PARAMETER",
1482
+ "MISSING_REQUIRED_FIELD",
1483
+ "NOT_FOUND",
1484
+ "RESTRICTED_API_KEY",
1485
+ "VALIDATION_ERROR"
1486
+ ],
1487
+ "idempotency": "none",
1488
+ "fidelity": "stateful",
1489
+ "mcp": {
1490
+ "name": "list-contact-segments"
1491
+ }
1492
+ },
1493
+ {
1494
+ "id": "contacts.remove",
1495
+ "description": "Remove a contact by id or e-mail (DELETE /contacts/{id}).",
1496
+ "inputSchema": {
1497
+ "type": "object",
1498
+ "required": [],
1499
+ "properties": {
1500
+ "id": {
1501
+ "type": "string",
1502
+ "maxLength": 512
1503
+ },
1504
+ "email": {
1505
+ "type": "string",
1506
+ "maxLength": 1000
1507
+ },
1508
+ "idempotencyKey": {
1509
+ "type": "string",
1510
+ "maxLength": 4096
1511
+ }
1512
+ },
1513
+ "additionalProperties": false
1514
+ },
1515
+ "outputSchema": {
1516
+ "type": "object",
1517
+ "required": [
1518
+ "object",
1519
+ "id",
1520
+ "deleted"
1521
+ ],
1522
+ "properties": {
1523
+ "object": {
1524
+ "type": "string",
1525
+ "enum": [
1526
+ "contact"
1527
+ ]
1528
+ },
1529
+ "id": {
1530
+ "type": "string",
1531
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
1532
+ },
1533
+ "deleted": {
1534
+ "type": "boolean",
1535
+ "enum": [
1536
+ true
1537
+ ]
1538
+ }
1539
+ },
1540
+ "additionalProperties": false
1541
+ },
1542
+ "declaredErrors": [
1543
+ "APPLICATION_ERROR",
1544
+ "INVALID_API_KEY",
1545
+ "INVALID_IDEMPOTENCY_KEY",
1546
+ "INVALID_PARAMETER",
1547
+ "MISSING_REQUIRED_FIELD",
1548
+ "NOT_FOUND",
1549
+ "RESTRICTED_API_KEY"
1550
+ ],
1551
+ "idempotency": "optional",
1552
+ "fidelity": "stateful",
1553
+ "mcp": {
1554
+ "name": "remove-contact"
1555
+ }
1556
+ },
1557
+ {
1558
+ "id": "contacts.remove_segment",
1559
+ "description": "Remove a contact from a segment (DELETE /contacts/{contact_id}/segments/{segment_id}).",
1560
+ "inputSchema": {
1561
+ "type": "object",
1562
+ "required": [],
1563
+ "properties": {
1564
+ "contactId": {
1565
+ "type": "string",
1566
+ "maxLength": 512
1567
+ },
1568
+ "email": {
1569
+ "type": "string",
1570
+ "maxLength": 1000
1571
+ },
1572
+ "segmentId": {
1573
+ "type": "string",
1574
+ "maxLength": 512
1575
+ },
1576
+ "idempotencyKey": {
1577
+ "type": "string",
1578
+ "maxLength": 4096
1579
+ }
1580
+ },
1581
+ "additionalProperties": false
1582
+ },
1583
+ "outputSchema": {
1584
+ "type": "object",
1585
+ "required": [
1586
+ "object",
1587
+ "contact_id",
1588
+ "segment_id",
1589
+ "deleted"
1590
+ ],
1591
+ "properties": {
1592
+ "object": {
1593
+ "type": "string",
1594
+ "enum": [
1595
+ "contact_segment"
1596
+ ]
1597
+ },
1598
+ "contact_id": {
1599
+ "type": "string",
1600
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
1601
+ },
1602
+ "segment_id": {
1603
+ "type": "string",
1604
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
1605
+ },
1606
+ "deleted": {
1607
+ "type": "boolean",
1608
+ "enum": [
1609
+ true
1610
+ ]
1611
+ }
1612
+ },
1613
+ "additionalProperties": false
1614
+ },
1615
+ "declaredErrors": [
1616
+ "INVALID_API_KEY",
1617
+ "INVALID_IDEMPOTENCY_KEY",
1618
+ "INVALID_PARAMETER",
1619
+ "MISSING_REQUIRED_FIELD",
1620
+ "NOT_FOUND",
1621
+ "RESTRICTED_API_KEY"
1622
+ ],
1623
+ "idempotency": "optional",
1624
+ "fidelity": "stateful",
1625
+ "mcp": {
1626
+ "name": "remove-contact-from-segment"
1627
+ }
1628
+ },
1629
+ {
1630
+ "id": "contacts.update",
1631
+ "description": "Update a contact by id or e-mail (PATCH /contacts/{id}).",
1632
+ "inputSchema": {
1633
+ "type": "object",
1634
+ "required": [],
1635
+ "properties": {
1636
+ "id": {
1637
+ "type": "string",
1638
+ "maxLength": 512
1639
+ },
1640
+ "email": {
1641
+ "type": "string",
1642
+ "maxLength": 1000
1643
+ },
1644
+ "firstName": {
1645
+ "anyOf": [
1646
+ {
1647
+ "type": "string",
1648
+ "maxLength": 1000
1649
+ },
1650
+ {
1651
+ "type": "null"
1652
+ }
1653
+ ]
1654
+ },
1655
+ "lastName": {
1656
+ "anyOf": [
1657
+ {
1658
+ "type": "string",
1659
+ "maxLength": 1000
1660
+ },
1661
+ {
1662
+ "type": "null"
1663
+ }
1664
+ ]
1665
+ },
1666
+ "unsubscribed": {
1667
+ "anyOf": [
1668
+ {
1669
+ "type": "boolean"
1670
+ },
1671
+ {
1672
+ "type": "null"
1673
+ }
1674
+ ]
1675
+ },
1676
+ "properties": {
1677
+ "anyOf": [
1678
+ {
1679
+ "type": "object",
1680
+ "maxProperties": 1000,
1681
+ "additionalProperties": {
1682
+ "anyOf": [
1683
+ {
1684
+ "type": "string",
1685
+ "maxLength": 10000
1686
+ },
1687
+ {
1688
+ "type": "number"
1689
+ },
1690
+ {
1691
+ "type": "null"
1692
+ }
1693
+ ]
1694
+ }
1695
+ },
1696
+ {
1697
+ "type": "null"
1698
+ }
1699
+ ]
1700
+ },
1701
+ "newEmail": {
1702
+ "anyOf": [
1703
+ {
1704
+ "type": "string",
1705
+ "maxLength": 1000
1706
+ },
1707
+ {
1708
+ "type": "null"
1709
+ }
1710
+ ]
1711
+ },
1712
+ "idempotencyKey": {
1713
+ "type": "string",
1714
+ "maxLength": 4096
1715
+ }
1716
+ },
1717
+ "additionalProperties": false
1718
+ },
1719
+ "outputSchema": {
1720
+ "type": "object",
1721
+ "required": [
1722
+ "object",
1723
+ "id"
1724
+ ],
1725
+ "properties": {
1726
+ "object": {
1727
+ "type": "string",
1728
+ "enum": [
1729
+ "contact"
1730
+ ]
1731
+ },
1732
+ "id": {
1733
+ "type": "string",
1734
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
1735
+ }
1736
+ },
1737
+ "additionalProperties": false
1738
+ },
1739
+ "declaredErrors": [
1740
+ "INVALID_API_KEY",
1741
+ "INVALID_IDEMPOTENCY_KEY",
1742
+ "INVALID_PARAMETER",
1743
+ "MISSING_REQUIRED_FIELD",
1744
+ "NOT_FOUND",
1745
+ "RESTRICTED_API_KEY",
1746
+ "VALIDATION_ERROR"
1747
+ ],
1748
+ "idempotency": "optional",
1749
+ "fidelity": "behavioral",
1750
+ "mcp": {
1751
+ "name": "update-contact"
1752
+ }
1753
+ },
1754
+ {
1755
+ "id": "domains.create",
1756
+ "description": "Add a sending domain and generate its DNS records (POST /domains).",
1757
+ "inputSchema": {
1758
+ "type": "object",
1759
+ "required": [],
1760
+ "properties": {
1761
+ "name": {
1762
+ "anyOf": [
1763
+ {
1764
+ "type": "string",
1765
+ "maxLength": 1000
1766
+ },
1767
+ {
1768
+ "type": "null"
1769
+ }
1770
+ ]
1771
+ },
1772
+ "region": {
1773
+ "anyOf": [
1774
+ {
1775
+ "type": "string",
1776
+ "maxLength": 100
1777
+ },
1778
+ {
1779
+ "type": "null"
1780
+ }
1781
+ ]
1782
+ },
1783
+ "customReturnPath": {
1784
+ "anyOf": [
1785
+ {
1786
+ "type": "string",
1787
+ "maxLength": 1000
1788
+ },
1789
+ {
1790
+ "type": "null"
1791
+ }
1792
+ ]
1793
+ },
1794
+ "openTracking": {
1795
+ "anyOf": [
1796
+ {
1797
+ "type": "boolean"
1798
+ },
1799
+ {
1800
+ "type": "null"
1801
+ }
1802
+ ]
1803
+ },
1804
+ "clickTracking": {
1805
+ "anyOf": [
1806
+ {
1807
+ "type": "boolean"
1808
+ },
1809
+ {
1810
+ "type": "null"
1811
+ }
1812
+ ]
1813
+ },
1814
+ "tls": {
1815
+ "anyOf": [
1816
+ {
1817
+ "type": "string",
1818
+ "maxLength": 100
1819
+ },
1820
+ {
1821
+ "type": "null"
1822
+ }
1823
+ ]
1824
+ },
1825
+ "trackingSubdomain": {
1826
+ "anyOf": [
1827
+ {
1828
+ "type": "string",
1829
+ "maxLength": 1000
1830
+ },
1831
+ {
1832
+ "type": "null"
1833
+ }
1834
+ ]
1835
+ },
1836
+ "capabilities": {
1837
+ "anyOf": [
1838
+ {
1839
+ "type": "object",
1840
+ "maxProperties": 100,
1841
+ "additionalProperties": {
1842
+ "type": "string",
1843
+ "maxLength": 100
1844
+ }
1845
+ },
1846
+ {
1847
+ "type": "null"
1848
+ }
1849
+ ]
1850
+ },
1851
+ "idempotencyKey": {
1852
+ "type": "string",
1853
+ "maxLength": 4096
1854
+ }
1855
+ },
1856
+ "additionalProperties": false
1857
+ },
1858
+ "outputSchema": {
1859
+ "type": "object",
1860
+ "required": [
1861
+ "id",
1862
+ "name",
1863
+ "status",
1864
+ "created_at",
1865
+ "region",
1866
+ "open_tracking",
1867
+ "click_tracking",
1868
+ "capabilities",
1869
+ "records"
1870
+ ],
1871
+ "properties": {
1872
+ "id": {
1873
+ "type": "string",
1874
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
1875
+ },
1876
+ "name": {
1877
+ "type": "string"
1878
+ },
1879
+ "status": {
1880
+ "type": "string"
1881
+ },
1882
+ "created_at": {
1883
+ "type": "string",
1884
+ "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}\\.\\d{6}\\+00$"
1885
+ },
1886
+ "region": {
1887
+ "type": "string"
1888
+ },
1889
+ "open_tracking": {
1890
+ "type": "boolean"
1891
+ },
1892
+ "click_tracking": {
1893
+ "type": "boolean"
1894
+ },
1895
+ "capabilities": {
1896
+ "type": "object",
1897
+ "required": [
1898
+ "sending",
1899
+ "receiving"
1900
+ ],
1901
+ "properties": {
1902
+ "sending": {
1903
+ "type": "string",
1904
+ "enum": [
1905
+ "enabled",
1906
+ "disabled"
1907
+ ]
1908
+ },
1909
+ "receiving": {
1910
+ "type": "string",
1911
+ "enum": [
1912
+ "enabled",
1913
+ "disabled"
1914
+ ]
1915
+ }
1916
+ },
1917
+ "additionalProperties": false
1918
+ },
1919
+ "records": {
1920
+ "type": "array",
1921
+ "items": {
1922
+ "type": "object",
1923
+ "required": [
1924
+ "record",
1925
+ "name",
1926
+ "type",
1927
+ "ttl",
1928
+ "status",
1929
+ "value"
1930
+ ],
1931
+ "properties": {
1932
+ "record": {
1933
+ "type": "string"
1934
+ },
1935
+ "name": {
1936
+ "type": "string"
1937
+ },
1938
+ "type": {
1939
+ "type": "string"
1940
+ },
1941
+ "ttl": {
1942
+ "type": "string"
1943
+ },
1944
+ "status": {
1945
+ "type": "string"
1946
+ },
1947
+ "value": {
1948
+ "type": "string"
1949
+ },
1950
+ "priority": {
1951
+ "type": "integer"
1952
+ }
1953
+ },
1954
+ "additionalProperties": false
1955
+ }
1956
+ }
1957
+ },
1958
+ "additionalProperties": false
1959
+ },
1960
+ "declaredErrors": [
1961
+ "INVALID_API_KEY",
1962
+ "INVALID_IDEMPOTENCY_KEY",
1963
+ "MISSING_REQUIRED_FIELD",
1964
+ "RESTRICTED_API_KEY",
1965
+ "VALIDATION_ERROR"
1966
+ ],
1967
+ "idempotency": "optional",
1968
+ "fidelity": "behavioral",
1969
+ "mcp": {
1970
+ "name": "create-domain"
1971
+ }
1972
+ },
1973
+ {
1974
+ "id": "domains.get",
1975
+ "description": "Retrieve a domain with its DNS records (GET /domains/{domain_id}).",
1976
+ "inputSchema": {
1977
+ "type": "object",
1978
+ "required": [
1979
+ "id"
1980
+ ],
1981
+ "properties": {
1982
+ "id": {
1983
+ "type": "string",
1984
+ "maxLength": 512
1985
+ }
1986
+ },
1987
+ "additionalProperties": false
1988
+ },
1989
+ "outputSchema": {
1990
+ "type": "object",
1991
+ "required": [
1992
+ "object",
1993
+ "id",
1994
+ "name",
1995
+ "status",
1996
+ "created_at",
1997
+ "region",
1998
+ "open_tracking",
1999
+ "click_tracking",
2000
+ "capabilities",
2001
+ "records"
2002
+ ],
2003
+ "properties": {
2004
+ "object": {
2005
+ "type": "string",
2006
+ "enum": [
2007
+ "domain"
2008
+ ]
2009
+ },
2010
+ "id": {
2011
+ "type": "string",
2012
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
2013
+ },
2014
+ "name": {
2015
+ "type": "string"
2016
+ },
2017
+ "status": {
2018
+ "type": "string"
2019
+ },
2020
+ "created_at": {
2021
+ "type": "string",
2022
+ "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}\\.\\d{6}\\+00$"
2023
+ },
2024
+ "region": {
2025
+ "type": "string"
2026
+ },
2027
+ "open_tracking": {
2028
+ "type": "boolean"
2029
+ },
2030
+ "click_tracking": {
2031
+ "type": "boolean"
2032
+ },
2033
+ "capabilities": {
2034
+ "type": "object",
2035
+ "required": [
2036
+ "sending",
2037
+ "receiving"
2038
+ ],
2039
+ "properties": {
2040
+ "sending": {
2041
+ "type": "string",
2042
+ "enum": [
2043
+ "enabled",
2044
+ "disabled"
2045
+ ]
2046
+ },
2047
+ "receiving": {
2048
+ "type": "string",
2049
+ "enum": [
2050
+ "enabled",
2051
+ "disabled"
2052
+ ]
2053
+ }
2054
+ },
2055
+ "additionalProperties": false
2056
+ },
2057
+ "records": {
2058
+ "type": "array",
2059
+ "items": {
2060
+ "type": "object",
2061
+ "required": [
2062
+ "record",
2063
+ "name",
2064
+ "type",
2065
+ "ttl",
2066
+ "status",
2067
+ "value"
2068
+ ],
2069
+ "properties": {
2070
+ "record": {
2071
+ "type": "string"
2072
+ },
2073
+ "name": {
2074
+ "type": "string"
2075
+ },
2076
+ "type": {
2077
+ "type": "string"
2078
+ },
2079
+ "ttl": {
2080
+ "type": "string"
2081
+ },
2082
+ "status": {
2083
+ "type": "string"
2084
+ },
2085
+ "value": {
2086
+ "type": "string"
2087
+ },
2088
+ "priority": {
2089
+ "type": "integer"
2090
+ }
2091
+ },
2092
+ "additionalProperties": false
2093
+ }
2094
+ }
2095
+ },
2096
+ "additionalProperties": false
2097
+ },
2098
+ "declaredErrors": [
2099
+ "INVALID_API_KEY",
2100
+ "INVALID_PARAMETER",
2101
+ "NOT_FOUND",
2102
+ "RESTRICTED_API_KEY"
2103
+ ],
2104
+ "idempotency": "none",
2105
+ "fidelity": "stateful",
2106
+ "mcp": {
2107
+ "name": "get-domain"
2108
+ }
2109
+ },
2110
+ {
2111
+ "id": "domains.list",
2112
+ "description": "List domains newest first (GET /domains).",
2113
+ "inputSchema": {
2114
+ "type": "object",
2115
+ "required": [],
2116
+ "properties": {
2117
+ "limit": {
2118
+ "anyOf": [
2119
+ {
2120
+ "type": "integer"
2121
+ },
2122
+ {
2123
+ "type": "string",
2124
+ "maxLength": 32
2125
+ }
2126
+ ]
2127
+ },
2128
+ "after": {
2129
+ "type": "string",
2130
+ "maxLength": 512
2131
+ },
2132
+ "before": {
2133
+ "type": "string",
2134
+ "maxLength": 512
2135
+ }
2136
+ },
2137
+ "additionalProperties": false
2138
+ },
2139
+ "outputSchema": {
2140
+ "type": "object",
2141
+ "required": [
2142
+ "object",
2143
+ "has_more",
2144
+ "data"
2145
+ ],
2146
+ "properties": {
2147
+ "object": {
2148
+ "type": "string",
2149
+ "enum": [
2150
+ "list"
2151
+ ]
2152
+ },
2153
+ "has_more": {
2154
+ "type": "boolean"
2155
+ },
2156
+ "data": {
2157
+ "type": "array",
2158
+ "items": {
2159
+ "type": "object",
2160
+ "required": [
2161
+ "id",
2162
+ "name",
2163
+ "status",
2164
+ "created_at",
2165
+ "region",
2166
+ "open_tracking",
2167
+ "click_tracking",
2168
+ "capabilities"
2169
+ ],
2170
+ "properties": {
2171
+ "id": {
2172
+ "type": "string",
2173
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
2174
+ },
2175
+ "name": {
2176
+ "type": "string"
2177
+ },
2178
+ "status": {
2179
+ "type": "string"
2180
+ },
2181
+ "created_at": {
2182
+ "type": "string",
2183
+ "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}\\.\\d{6}\\+00$"
2184
+ },
2185
+ "region": {
2186
+ "type": "string"
2187
+ },
2188
+ "open_tracking": {
2189
+ "type": "boolean"
2190
+ },
2191
+ "click_tracking": {
2192
+ "type": "boolean"
2193
+ },
2194
+ "capabilities": {
2195
+ "type": "object",
2196
+ "required": [
2197
+ "sending",
2198
+ "receiving"
2199
+ ],
2200
+ "properties": {
2201
+ "sending": {
2202
+ "type": "string",
2203
+ "enum": [
2204
+ "enabled",
2205
+ "disabled"
2206
+ ]
2207
+ },
2208
+ "receiving": {
2209
+ "type": "string",
2210
+ "enum": [
2211
+ "enabled",
2212
+ "disabled"
2213
+ ]
2214
+ }
2215
+ },
2216
+ "additionalProperties": false
2217
+ }
2218
+ },
2219
+ "additionalProperties": false
2220
+ }
2221
+ }
2222
+ },
2223
+ "additionalProperties": false
2224
+ },
2225
+ "declaredErrors": [
2226
+ "APPLICATION_ERROR",
2227
+ "INVALID_API_KEY",
2228
+ "RESTRICTED_API_KEY",
2229
+ "VALIDATION_ERROR"
2230
+ ],
2231
+ "idempotency": "none",
2232
+ "fidelity": "stateful",
2233
+ "mcp": {
2234
+ "name": "list-domains"
2235
+ }
2236
+ },
2237
+ {
2238
+ "id": "domains.remove",
2239
+ "description": "Remove a domain (DELETE /domains/{domain_id}).",
2240
+ "inputSchema": {
2241
+ "type": "object",
2242
+ "required": [
2243
+ "id"
2244
+ ],
2245
+ "properties": {
2246
+ "id": {
2247
+ "type": "string",
2248
+ "maxLength": 512
2249
+ },
2250
+ "idempotencyKey": {
2251
+ "type": "string",
2252
+ "maxLength": 4096
2253
+ }
2254
+ },
2255
+ "additionalProperties": false
2256
+ },
2257
+ "outputSchema": {
2258
+ "type": "object",
2259
+ "required": [
2260
+ "object",
2261
+ "id",
2262
+ "deleted"
2263
+ ],
2264
+ "properties": {
2265
+ "object": {
2266
+ "type": "string",
2267
+ "enum": [
2268
+ "domain"
2269
+ ]
2270
+ },
2271
+ "id": {
2272
+ "type": "string",
2273
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
2274
+ },
2275
+ "deleted": {
2276
+ "type": "boolean",
2277
+ "enum": [
2278
+ true
2279
+ ]
2280
+ }
2281
+ },
2282
+ "additionalProperties": false
2283
+ },
2284
+ "declaredErrors": [
2285
+ "INVALID_API_KEY",
2286
+ "INVALID_IDEMPOTENCY_KEY",
2287
+ "INVALID_PARAMETER",
2288
+ "NOT_FOUND",
2289
+ "RESTRICTED_API_KEY"
2290
+ ],
2291
+ "idempotency": "optional",
2292
+ "fidelity": "stateful",
2293
+ "mcp": {
2294
+ "name": "remove-domain"
2295
+ }
2296
+ },
2297
+ {
2298
+ "id": "domains.verify",
2299
+ "description": "Verify a domain's DNS records (synthetic, instant; POST /domains/{domain_id}/verify).",
2300
+ "inputSchema": {
2301
+ "type": "object",
2302
+ "required": [
2303
+ "id"
2304
+ ],
2305
+ "properties": {
2306
+ "id": {
2307
+ "type": "string",
2308
+ "maxLength": 512
2309
+ },
2310
+ "idempotencyKey": {
2311
+ "type": "string",
2312
+ "maxLength": 4096
2313
+ }
2314
+ },
2315
+ "additionalProperties": false
2316
+ },
2317
+ "outputSchema": {
2318
+ "type": "object",
2319
+ "required": [
2320
+ "object",
2321
+ "id"
2322
+ ],
2323
+ "properties": {
2324
+ "object": {
2325
+ "type": "string",
2326
+ "enum": [
2327
+ "domain"
2328
+ ]
2329
+ },
2330
+ "id": {
2331
+ "type": "string",
2332
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
2333
+ }
2334
+ },
2335
+ "additionalProperties": false
2336
+ },
2337
+ "declaredErrors": [
2338
+ "INVALID_API_KEY",
2339
+ "INVALID_IDEMPOTENCY_KEY",
2340
+ "INVALID_PARAMETER",
2341
+ "NOT_FOUND",
2342
+ "RESTRICTED_API_KEY"
2343
+ ],
2344
+ "idempotency": "optional",
2345
+ "fidelity": "behavioral",
2346
+ "mcp": {
2347
+ "name": "verify-domain"
2348
+ }
2349
+ },
2350
+ {
2351
+ "id": "emails.cancel",
2352
+ "description": "Cancel a scheduled email (POST /emails/{email_id}/cancel).",
2353
+ "inputSchema": {
2354
+ "type": "object",
2355
+ "required": [
2356
+ "id"
2357
+ ],
2358
+ "properties": {
2359
+ "id": {
2360
+ "type": "string",
2361
+ "maxLength": 512
2362
+ },
2363
+ "idempotencyKey": {
2364
+ "type": "string",
2365
+ "maxLength": 4096
2366
+ }
2367
+ },
2368
+ "additionalProperties": false
2369
+ },
2370
+ "outputSchema": {
2371
+ "type": "object",
2372
+ "required": [
2373
+ "object",
2374
+ "id"
2375
+ ],
2376
+ "properties": {
2377
+ "object": {
2378
+ "type": "string",
2379
+ "enum": [
2380
+ "email"
2381
+ ]
2382
+ },
2383
+ "id": {
2384
+ "type": "string",
2385
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
2386
+ }
2387
+ },
2388
+ "additionalProperties": false
2389
+ },
2390
+ "declaredErrors": [
2391
+ "INVALID_API_KEY",
2392
+ "INVALID_IDEMPOTENCY_KEY",
2393
+ "INVALID_PARAMETER",
2394
+ "NOT_FOUND",
2395
+ "RESTRICTED_API_KEY",
2396
+ "VALIDATION_ERROR"
2397
+ ],
2398
+ "idempotency": "optional",
2399
+ "fidelity": "behavioral",
2400
+ "mcp": {
2401
+ "name": "cancel-email"
2402
+ }
2403
+ },
2404
+ {
2405
+ "id": "emails.get",
2406
+ "description": "Retrieve one email (GET /emails/{email_id}).",
2407
+ "inputSchema": {
2408
+ "type": "object",
2409
+ "required": [
2410
+ "id"
2411
+ ],
2412
+ "properties": {
2413
+ "id": {
2414
+ "type": "string",
2415
+ "maxLength": 512
2416
+ }
2417
+ },
2418
+ "additionalProperties": false
2419
+ },
2420
+ "outputSchema": {
2421
+ "type": "object",
2422
+ "required": [
2423
+ "object",
2424
+ "id",
2425
+ "to",
2426
+ "from",
2427
+ "created_at",
2428
+ "subject",
2429
+ "bcc",
2430
+ "cc",
2431
+ "reply_to",
2432
+ "last_event",
2433
+ "scheduled_at",
2434
+ "html",
2435
+ "text",
2436
+ "tags"
2437
+ ],
2438
+ "properties": {
2439
+ "object": {
2440
+ "type": "string",
2441
+ "enum": [
2442
+ "email"
2443
+ ]
2444
+ },
2445
+ "id": {
2446
+ "type": "string",
2447
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
2448
+ },
2449
+ "to": {
2450
+ "type": "array",
2451
+ "items": {
2452
+ "type": "string"
2453
+ }
2454
+ },
2455
+ "from": {
2456
+ "type": "string"
2457
+ },
2458
+ "created_at": {
2459
+ "type": "string",
2460
+ "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}\\.\\d{6}\\+00$"
2461
+ },
2462
+ "subject": {
2463
+ "type": "string"
2464
+ },
2465
+ "bcc": {
2466
+ "type": "array",
2467
+ "items": {
2468
+ "type": "string"
2469
+ }
2470
+ },
2471
+ "cc": {
2472
+ "type": "array",
2473
+ "items": {
2474
+ "type": "string"
2475
+ }
2476
+ },
2477
+ "reply_to": {
2478
+ "type": "array",
2479
+ "items": {
2480
+ "type": "string"
2481
+ }
2482
+ },
2483
+ "last_event": {
2484
+ "type": "string",
2485
+ "enum": [
2486
+ "delivered",
2487
+ "bounced",
2488
+ "scheduled",
2489
+ "canceled",
2490
+ "sent"
2491
+ ]
2492
+ },
2493
+ "scheduled_at": {
2494
+ "anyOf": [
2495
+ {
2496
+ "type": "string",
2497
+ "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}\\.\\d{6}\\+00$"
2498
+ },
2499
+ {
2500
+ "type": "null"
2501
+ }
2502
+ ]
2503
+ },
2504
+ "html": {
2505
+ "anyOf": [
2506
+ {
2507
+ "type": "string"
2508
+ },
2509
+ {
2510
+ "type": "null"
2511
+ }
2512
+ ]
2513
+ },
2514
+ "text": {
2515
+ "anyOf": [
2516
+ {
2517
+ "type": "string"
2518
+ },
2519
+ {
2520
+ "type": "null"
2521
+ }
2522
+ ]
2523
+ },
2524
+ "tags": {
2525
+ "type": "array",
2526
+ "items": {
2527
+ "type": "object",
2528
+ "required": [
2529
+ "name",
2530
+ "value"
2531
+ ],
2532
+ "properties": {
2533
+ "name": {
2534
+ "type": "string",
2535
+ "minLength": 1,
2536
+ "maxLength": 256
2537
+ },
2538
+ "value": {
2539
+ "type": "string",
2540
+ "minLength": 1,
2541
+ "maxLength": 256
2542
+ }
2543
+ },
2544
+ "additionalProperties": false
2545
+ }
2546
+ }
2547
+ },
2548
+ "additionalProperties": false
2549
+ },
2550
+ "declaredErrors": [
2551
+ "INVALID_API_KEY",
2552
+ "INVALID_PARAMETER",
2553
+ "NOT_FOUND",
2554
+ "RESTRICTED_API_KEY"
2555
+ ],
2556
+ "idempotency": "none",
2557
+ "fidelity": "stateful",
2558
+ "mcp": {
2559
+ "name": "get-email"
2560
+ }
2561
+ },
2562
+ {
2563
+ "id": "emails.list",
2564
+ "description": "List sent emails newest first with cursor pagination (GET /emails).",
2565
+ "inputSchema": {
2566
+ "type": "object",
2567
+ "required": [],
2568
+ "properties": {
2569
+ "limit": {
2570
+ "anyOf": [
2571
+ {
2572
+ "type": "integer"
2573
+ },
2574
+ {
2575
+ "type": "string",
2576
+ "maxLength": 32
2577
+ }
2578
+ ]
2579
+ },
2580
+ "after": {
2581
+ "type": "string",
2582
+ "maxLength": 512
2583
+ },
2584
+ "before": {
2585
+ "type": "string",
2586
+ "maxLength": 512
2587
+ },
2588
+ "query": {
2589
+ "type": "string",
2590
+ "maxLength": 1000
2591
+ },
2592
+ "status": {
2593
+ "type": "string",
2594
+ "maxLength": 64
2595
+ }
2596
+ },
2597
+ "additionalProperties": false
2598
+ },
2599
+ "outputSchema": {
2600
+ "type": "object",
2601
+ "required": [
2602
+ "object",
2603
+ "has_more",
2604
+ "data"
2605
+ ],
2606
+ "properties": {
2607
+ "object": {
2608
+ "type": "string",
2609
+ "enum": [
2610
+ "list"
2611
+ ]
2612
+ },
2613
+ "has_more": {
2614
+ "type": "boolean"
2615
+ },
2616
+ "data": {
2617
+ "type": "array",
2618
+ "items": {
2619
+ "type": "object",
2620
+ "required": [
2621
+ "object",
2622
+ "id",
2623
+ "to",
2624
+ "from",
2625
+ "created_at",
2626
+ "subject",
2627
+ "bcc",
2628
+ "cc",
2629
+ "reply_to",
2630
+ "last_event",
2631
+ "scheduled_at"
2632
+ ],
2633
+ "properties": {
2634
+ "object": {
2635
+ "type": "string",
2636
+ "enum": [
2637
+ "email"
2638
+ ]
2639
+ },
2640
+ "id": {
2641
+ "type": "string",
2642
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
2643
+ },
2644
+ "to": {
2645
+ "type": "array",
2646
+ "items": {
2647
+ "type": "string"
2648
+ }
2649
+ },
2650
+ "from": {
2651
+ "type": "string"
2652
+ },
2653
+ "created_at": {
2654
+ "type": "string",
2655
+ "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}\\.\\d{6}\\+00$"
2656
+ },
2657
+ "subject": {
2658
+ "type": "string"
2659
+ },
2660
+ "bcc": {
2661
+ "type": "array",
2662
+ "items": {
2663
+ "type": "string"
2664
+ }
2665
+ },
2666
+ "cc": {
2667
+ "type": "array",
2668
+ "items": {
2669
+ "type": "string"
2670
+ }
2671
+ },
2672
+ "reply_to": {
2673
+ "type": "array",
2674
+ "items": {
2675
+ "type": "string"
2676
+ }
2677
+ },
2678
+ "last_event": {
2679
+ "type": "string",
2680
+ "enum": [
2681
+ "delivered",
2682
+ "bounced",
2683
+ "scheduled",
2684
+ "canceled",
2685
+ "sent"
2686
+ ]
2687
+ },
2688
+ "scheduled_at": {
2689
+ "anyOf": [
2690
+ {
2691
+ "type": "string",
2692
+ "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}\\.\\d{6}\\+00$"
2693
+ },
2694
+ {
2695
+ "type": "null"
2696
+ }
2697
+ ]
2698
+ }
2699
+ },
2700
+ "additionalProperties": false
2701
+ }
2702
+ }
2703
+ },
2704
+ "additionalProperties": false
2705
+ },
2706
+ "declaredErrors": [
2707
+ "APPLICATION_ERROR",
2708
+ "INVALID_API_KEY",
2709
+ "RESTRICTED_API_KEY",
2710
+ "VALIDATION_ERROR"
2711
+ ],
2712
+ "idempotency": "none",
2713
+ "fidelity": "behavioral",
2714
+ "mcp": {
2715
+ "name": "list-emails"
2716
+ }
2717
+ },
2718
+ {
2719
+ "id": "emails.send",
2720
+ "description": "Send one email synchronously (synthetic delivery; POST /emails).",
2721
+ "inputSchema": {
2722
+ "type": "object",
2723
+ "required": [],
2724
+ "properties": {
2725
+ "from": {
2726
+ "anyOf": [
2727
+ {
2728
+ "type": "string",
2729
+ "maxLength": 1000
2730
+ },
2731
+ {
2732
+ "type": "null"
2733
+ }
2734
+ ]
2735
+ },
2736
+ "to": {
2737
+ "anyOf": [
2738
+ {
2739
+ "anyOf": [
2740
+ {
2741
+ "type": "string",
2742
+ "maxLength": 1000
2743
+ },
2744
+ {
2745
+ "type": "array",
2746
+ "items": {
2747
+ "type": "string",
2748
+ "maxLength": 1000
2749
+ },
2750
+ "maxItems": 1000
2751
+ }
2752
+ ]
2753
+ },
2754
+ {
2755
+ "type": "null"
2756
+ }
2757
+ ]
2758
+ },
2759
+ "subject": {
2760
+ "anyOf": [
2761
+ {
2762
+ "type": "string",
2763
+ "maxLength": 100000
2764
+ },
2765
+ {
2766
+ "type": "null"
2767
+ }
2768
+ ]
2769
+ },
2770
+ "html": {
2771
+ "anyOf": [
2772
+ {
2773
+ "type": "string",
2774
+ "maxLength": 2000000
2775
+ },
2776
+ {
2777
+ "type": "null"
2778
+ }
2779
+ ]
2780
+ },
2781
+ "text": {
2782
+ "anyOf": [
2783
+ {
2784
+ "type": "string",
2785
+ "maxLength": 2000000
2786
+ },
2787
+ {
2788
+ "type": "null"
2789
+ }
2790
+ ]
2791
+ },
2792
+ "cc": {
2793
+ "anyOf": [
2794
+ {
2795
+ "anyOf": [
2796
+ {
2797
+ "type": "string",
2798
+ "maxLength": 1000
2799
+ },
2800
+ {
2801
+ "type": "array",
2802
+ "items": {
2803
+ "type": "string",
2804
+ "maxLength": 1000
2805
+ },
2806
+ "maxItems": 1000
2807
+ }
2808
+ ]
2809
+ },
2810
+ {
2811
+ "type": "null"
2812
+ }
2813
+ ]
2814
+ },
2815
+ "bcc": {
2816
+ "anyOf": [
2817
+ {
2818
+ "anyOf": [
2819
+ {
2820
+ "type": "string",
2821
+ "maxLength": 1000
2822
+ },
2823
+ {
2824
+ "type": "array",
2825
+ "items": {
2826
+ "type": "string",
2827
+ "maxLength": 1000
2828
+ },
2829
+ "maxItems": 1000
2830
+ }
2831
+ ]
2832
+ },
2833
+ {
2834
+ "type": "null"
2835
+ }
2836
+ ]
2837
+ },
2838
+ "replyTo": {
2839
+ "anyOf": [
2840
+ {
2841
+ "anyOf": [
2842
+ {
2843
+ "type": "string",
2844
+ "maxLength": 1000
2845
+ },
2846
+ {
2847
+ "type": "array",
2848
+ "items": {
2849
+ "type": "string",
2850
+ "maxLength": 1000
2851
+ },
2852
+ "maxItems": 1000
2853
+ }
2854
+ ]
2855
+ },
2856
+ {
2857
+ "type": "null"
2858
+ }
2859
+ ]
2860
+ },
2861
+ "scheduledAt": {
2862
+ "anyOf": [
2863
+ {
2864
+ "type": "string",
2865
+ "maxLength": 100
2866
+ },
2867
+ {
2868
+ "type": "null"
2869
+ }
2870
+ ]
2871
+ },
2872
+ "headers": {
2873
+ "anyOf": [
2874
+ {
2875
+ "type": "object",
2876
+ "maxProperties": 1000,
2877
+ "additionalProperties": {
2878
+ "type": "string",
2879
+ "maxLength": 100000
2880
+ }
2881
+ },
2882
+ {
2883
+ "type": "null"
2884
+ }
2885
+ ]
2886
+ },
2887
+ "tags": {
2888
+ "anyOf": [
2889
+ {
2890
+ "type": "array",
2891
+ "items": {
2892
+ "type": "object"
2893
+ },
2894
+ "maxItems": 1000
2895
+ },
2896
+ {
2897
+ "type": "null"
2898
+ }
2899
+ ]
2900
+ },
2901
+ "attachments": {
2902
+ "anyOf": [
2903
+ {
2904
+ "type": "array",
2905
+ "items": {},
2906
+ "maxItems": 1000
2907
+ },
2908
+ {
2909
+ "type": "null"
2910
+ }
2911
+ ]
2912
+ },
2913
+ "template": {
2914
+ "anyOf": [
2915
+ {
2916
+ "type": "object"
2917
+ },
2918
+ {
2919
+ "type": "null"
2920
+ }
2921
+ ]
2922
+ },
2923
+ "topicId": {
2924
+ "anyOf": [
2925
+ {
2926
+ "type": "string",
2927
+ "maxLength": 1000
2928
+ },
2929
+ {
2930
+ "type": "null"
2931
+ }
2932
+ ]
2933
+ },
2934
+ "idempotencyKey": {
2935
+ "type": "string",
2936
+ "maxLength": 4096
2937
+ }
2938
+ },
2939
+ "additionalProperties": false
2940
+ },
2941
+ "outputSchema": {
2942
+ "type": "object",
2943
+ "required": [
2944
+ "id"
2945
+ ],
2946
+ "properties": {
2947
+ "id": {
2948
+ "type": "string",
2949
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
2950
+ }
2951
+ },
2952
+ "additionalProperties": false
2953
+ },
2954
+ "declaredErrors": [
2955
+ "DAILY_QUOTA_EXCEEDED",
2956
+ "DOMAIN_NOT_VERIFIED",
2957
+ "INVALID_API_KEY",
2958
+ "INVALID_IDEMPOTENCY_KEY",
2959
+ "MISSING_REQUIRED_FIELD",
2960
+ "RATE_LIMIT_EXCEEDED",
2961
+ "VALIDATION_ERROR"
2962
+ ],
2963
+ "idempotency": "optional",
2964
+ "fidelity": "behavioral",
2965
+ "mcp": {
2966
+ "name": "send-email"
2967
+ }
2968
+ },
2969
+ {
2970
+ "id": "emails.send_batch",
2971
+ "description": "Send up to 100 emails atomically (POST /emails/batch).",
2972
+ "inputSchema": {
2973
+ "type": "object",
2974
+ "required": [],
2975
+ "properties": {
2976
+ "emails": {
2977
+ "type": "array",
2978
+ "items": {
2979
+ "type": "object",
2980
+ "required": [],
2981
+ "properties": {
2982
+ "from": {
2983
+ "anyOf": [
2984
+ {
2985
+ "type": "string",
2986
+ "maxLength": 1000
2987
+ },
2988
+ {
2989
+ "type": "null"
2990
+ }
2991
+ ]
2992
+ },
2993
+ "to": {
2994
+ "anyOf": [
2995
+ {
2996
+ "anyOf": [
2997
+ {
2998
+ "type": "string",
2999
+ "maxLength": 1000
3000
+ },
3001
+ {
3002
+ "type": "array",
3003
+ "items": {
3004
+ "type": "string",
3005
+ "maxLength": 1000
3006
+ },
3007
+ "maxItems": 1000
3008
+ }
3009
+ ]
3010
+ },
3011
+ {
3012
+ "type": "null"
3013
+ }
3014
+ ]
3015
+ },
3016
+ "subject": {
3017
+ "anyOf": [
3018
+ {
3019
+ "type": "string",
3020
+ "maxLength": 100000
3021
+ },
3022
+ {
3023
+ "type": "null"
3024
+ }
3025
+ ]
3026
+ },
3027
+ "html": {
3028
+ "anyOf": [
3029
+ {
3030
+ "type": "string",
3031
+ "maxLength": 2000000
3032
+ },
3033
+ {
3034
+ "type": "null"
3035
+ }
3036
+ ]
3037
+ },
3038
+ "text": {
3039
+ "anyOf": [
3040
+ {
3041
+ "type": "string",
3042
+ "maxLength": 2000000
3043
+ },
3044
+ {
3045
+ "type": "null"
3046
+ }
3047
+ ]
3048
+ },
3049
+ "cc": {
3050
+ "anyOf": [
3051
+ {
3052
+ "anyOf": [
3053
+ {
3054
+ "type": "string",
3055
+ "maxLength": 1000
3056
+ },
3057
+ {
3058
+ "type": "array",
3059
+ "items": {
3060
+ "type": "string",
3061
+ "maxLength": 1000
3062
+ },
3063
+ "maxItems": 1000
3064
+ }
3065
+ ]
3066
+ },
3067
+ {
3068
+ "type": "null"
3069
+ }
3070
+ ]
3071
+ },
3072
+ "bcc": {
3073
+ "anyOf": [
3074
+ {
3075
+ "anyOf": [
3076
+ {
3077
+ "type": "string",
3078
+ "maxLength": 1000
3079
+ },
3080
+ {
3081
+ "type": "array",
3082
+ "items": {
3083
+ "type": "string",
3084
+ "maxLength": 1000
3085
+ },
3086
+ "maxItems": 1000
3087
+ }
3088
+ ]
3089
+ },
3090
+ {
3091
+ "type": "null"
3092
+ }
3093
+ ]
3094
+ },
3095
+ "replyTo": {
3096
+ "anyOf": [
3097
+ {
3098
+ "anyOf": [
3099
+ {
3100
+ "type": "string",
3101
+ "maxLength": 1000
3102
+ },
3103
+ {
3104
+ "type": "array",
3105
+ "items": {
3106
+ "type": "string",
3107
+ "maxLength": 1000
3108
+ },
3109
+ "maxItems": 1000
3110
+ }
3111
+ ]
3112
+ },
3113
+ {
3114
+ "type": "null"
3115
+ }
3116
+ ]
3117
+ },
3118
+ "scheduledAt": {
3119
+ "anyOf": [
3120
+ {
3121
+ "type": "string",
3122
+ "maxLength": 100
3123
+ },
3124
+ {
3125
+ "type": "null"
3126
+ }
3127
+ ]
3128
+ },
3129
+ "headers": {
3130
+ "anyOf": [
3131
+ {
3132
+ "type": "object",
3133
+ "maxProperties": 1000,
3134
+ "additionalProperties": {
3135
+ "type": "string",
3136
+ "maxLength": 100000
3137
+ }
3138
+ },
3139
+ {
3140
+ "type": "null"
3141
+ }
3142
+ ]
3143
+ },
3144
+ "tags": {
3145
+ "anyOf": [
3146
+ {
3147
+ "type": "array",
3148
+ "items": {
3149
+ "type": "object"
3150
+ },
3151
+ "maxItems": 1000
3152
+ },
3153
+ {
3154
+ "type": "null"
3155
+ }
3156
+ ]
3157
+ },
3158
+ "attachments": {
3159
+ "anyOf": [
3160
+ {
3161
+ "type": "array",
3162
+ "items": {},
3163
+ "maxItems": 1000
3164
+ },
3165
+ {
3166
+ "type": "null"
3167
+ }
3168
+ ]
3169
+ },
3170
+ "template": {
3171
+ "anyOf": [
3172
+ {
3173
+ "type": "object"
3174
+ },
3175
+ {
3176
+ "type": "null"
3177
+ }
3178
+ ]
3179
+ },
3180
+ "topicId": {
3181
+ "anyOf": [
3182
+ {
3183
+ "type": "string",
3184
+ "maxLength": 1000
3185
+ },
3186
+ {
3187
+ "type": "null"
3188
+ }
3189
+ ]
3190
+ }
3191
+ },
3192
+ "additionalProperties": false
3193
+ },
3194
+ "maxItems": 1000
3195
+ },
3196
+ "batchValidation": {
3197
+ "type": "string",
3198
+ "maxLength": 1000
3199
+ },
3200
+ "idempotencyKey": {
3201
+ "type": "string",
3202
+ "maxLength": 4096
3203
+ }
3204
+ },
3205
+ "additionalProperties": false
3206
+ },
3207
+ "outputSchema": {
3208
+ "type": "object",
3209
+ "required": [
3210
+ "data"
3211
+ ],
3212
+ "properties": {
3213
+ "data": {
3214
+ "type": "array",
3215
+ "items": {
3216
+ "type": "object",
3217
+ "required": [
3218
+ "id"
3219
+ ],
3220
+ "properties": {
3221
+ "id": {
3222
+ "type": "string",
3223
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
3224
+ }
3225
+ },
3226
+ "additionalProperties": false
3227
+ }
3228
+ }
3229
+ },
3230
+ "additionalProperties": false
3231
+ },
3232
+ "declaredErrors": [
3233
+ "DAILY_QUOTA_EXCEEDED",
3234
+ "DOMAIN_NOT_VERIFIED",
3235
+ "INVALID_API_KEY",
3236
+ "INVALID_IDEMPOTENCY_KEY",
3237
+ "MISSING_REQUIRED_FIELD",
3238
+ "RATE_LIMIT_EXCEEDED",
3239
+ "VALIDATION_ERROR"
3240
+ ],
3241
+ "idempotency": "optional",
3242
+ "fidelity": "behavioral",
3243
+ "mcp": {
3244
+ "name": "send-batch-emails"
3245
+ }
3246
+ },
3247
+ {
3248
+ "id": "emails.update",
3249
+ "description": "Reschedule a scheduled email (PATCH /emails/{email_id}).",
3250
+ "inputSchema": {
3251
+ "type": "object",
3252
+ "required": [
3253
+ "id"
3254
+ ],
3255
+ "properties": {
3256
+ "id": {
3257
+ "type": "string",
3258
+ "maxLength": 512
3259
+ },
3260
+ "scheduledAt": {
3261
+ "anyOf": [
3262
+ {
3263
+ "type": "string",
3264
+ "maxLength": 100
3265
+ },
3266
+ {
3267
+ "type": "null"
3268
+ }
3269
+ ]
3270
+ },
3271
+ "idempotencyKey": {
3272
+ "type": "string",
3273
+ "maxLength": 4096
3274
+ }
3275
+ },
3276
+ "additionalProperties": false
3277
+ },
3278
+ "outputSchema": {
3279
+ "type": "object",
3280
+ "required": [
3281
+ "object",
3282
+ "id"
3283
+ ],
3284
+ "properties": {
3285
+ "object": {
3286
+ "type": "string",
3287
+ "enum": [
3288
+ "email"
3289
+ ]
3290
+ },
3291
+ "id": {
3292
+ "type": "string",
3293
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
3294
+ }
3295
+ },
3296
+ "additionalProperties": false
3297
+ },
3298
+ "declaredErrors": [
3299
+ "INVALID_API_KEY",
3300
+ "INVALID_IDEMPOTENCY_KEY",
3301
+ "INVALID_PARAMETER",
3302
+ "MISSING_REQUIRED_FIELD",
3303
+ "NOT_FOUND",
3304
+ "RESTRICTED_API_KEY",
3305
+ "VALIDATION_ERROR"
3306
+ ],
3307
+ "idempotency": "optional",
3308
+ "fidelity": "behavioral",
3309
+ "mcp": {
3310
+ "name": "update-email"
3311
+ }
3312
+ },
3313
+ {
3314
+ "id": "segments.create",
3315
+ "description": "Create a segment (POST /segments).",
3316
+ "inputSchema": {
3317
+ "type": "object",
3318
+ "required": [],
3319
+ "properties": {
3320
+ "name": {
3321
+ "anyOf": [
3322
+ {
3323
+ "type": "string",
3324
+ "maxLength": 1000
3325
+ },
3326
+ {
3327
+ "type": "null"
3328
+ }
3329
+ ]
3330
+ },
3331
+ "filter": {},
3332
+ "audienceId": {
3333
+ "anyOf": [
3334
+ {
3335
+ "type": "string",
3336
+ "maxLength": 512
3337
+ },
3338
+ {
3339
+ "type": "null"
3340
+ }
3341
+ ]
3342
+ },
3343
+ "idempotencyKey": {
3344
+ "type": "string",
3345
+ "maxLength": 4096
3346
+ }
3347
+ },
3348
+ "additionalProperties": false
3349
+ },
3350
+ "outputSchema": {
3351
+ "type": "object",
3352
+ "required": [
3353
+ "object",
3354
+ "id",
3355
+ "name"
3356
+ ],
3357
+ "properties": {
3358
+ "object": {
3359
+ "type": "string",
3360
+ "enum": [
3361
+ "segment"
3362
+ ]
3363
+ },
3364
+ "id": {
3365
+ "type": "string",
3366
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
3367
+ },
3368
+ "name": {
3369
+ "type": "string"
3370
+ }
3371
+ },
3372
+ "additionalProperties": false
3373
+ },
3374
+ "declaredErrors": [
3375
+ "INVALID_API_KEY",
3376
+ "INVALID_IDEMPOTENCY_KEY",
3377
+ "MISSING_REQUIRED_FIELD",
3378
+ "RESTRICTED_API_KEY",
3379
+ "VALIDATION_ERROR"
3380
+ ],
3381
+ "idempotency": "optional",
3382
+ "fidelity": "stateful",
3383
+ "mcp": {
3384
+ "name": "create-segment"
3385
+ }
3386
+ },
3387
+ {
3388
+ "id": "segments.list",
3389
+ "description": "List segments newest first (GET /segments).",
3390
+ "inputSchema": {
3391
+ "type": "object",
3392
+ "required": [],
3393
+ "properties": {
3394
+ "limit": {
3395
+ "anyOf": [
3396
+ {
3397
+ "type": "integer"
3398
+ },
3399
+ {
3400
+ "type": "string",
3401
+ "maxLength": 32
3402
+ }
3403
+ ]
3404
+ },
3405
+ "after": {
3406
+ "type": "string",
3407
+ "maxLength": 512
3408
+ },
3409
+ "before": {
3410
+ "type": "string",
3411
+ "maxLength": 512
3412
+ }
3413
+ },
3414
+ "additionalProperties": false
3415
+ },
3416
+ "outputSchema": {
3417
+ "type": "object",
3418
+ "required": [
3419
+ "object",
3420
+ "has_more",
3421
+ "data"
3422
+ ],
3423
+ "properties": {
3424
+ "object": {
3425
+ "type": "string",
3426
+ "enum": [
3427
+ "list"
3428
+ ]
3429
+ },
3430
+ "has_more": {
3431
+ "type": "boolean"
3432
+ },
3433
+ "data": {
3434
+ "type": "array",
3435
+ "items": {
3436
+ "type": "object",
3437
+ "required": [
3438
+ "id",
3439
+ "name",
3440
+ "created_at"
3441
+ ],
3442
+ "properties": {
3443
+ "id": {
3444
+ "type": "string",
3445
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
3446
+ },
3447
+ "name": {
3448
+ "type": "string"
3449
+ },
3450
+ "created_at": {
3451
+ "type": "string",
3452
+ "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}\\.\\d{6}\\+00$"
3453
+ }
3454
+ },
3455
+ "additionalProperties": false
3456
+ }
3457
+ }
3458
+ },
3459
+ "additionalProperties": false
3460
+ },
3461
+ "declaredErrors": [
3462
+ "APPLICATION_ERROR",
3463
+ "INVALID_API_KEY",
3464
+ "RESTRICTED_API_KEY",
3465
+ "VALIDATION_ERROR"
3466
+ ],
3467
+ "idempotency": "none",
3468
+ "fidelity": "stateful",
3469
+ "mcp": {
3470
+ "name": "list-segments"
3471
+ }
3472
+ },
3473
+ {
3474
+ "id": "segments.remove",
3475
+ "description": "Remove a segment and its memberships (DELETE /segments/{id}).",
3476
+ "inputSchema": {
3477
+ "type": "object",
3478
+ "required": [
3479
+ "id"
3480
+ ],
3481
+ "properties": {
3482
+ "id": {
3483
+ "type": "string",
3484
+ "maxLength": 512
3485
+ },
3486
+ "idempotencyKey": {
3487
+ "type": "string",
3488
+ "maxLength": 4096
3489
+ }
3490
+ },
3491
+ "additionalProperties": false
3492
+ },
3493
+ "outputSchema": {
3494
+ "type": "object",
3495
+ "required": [
3496
+ "object",
3497
+ "id",
3498
+ "deleted"
3499
+ ],
3500
+ "properties": {
3501
+ "object": {
3502
+ "type": "string",
3503
+ "enum": [
3504
+ "segment"
3505
+ ]
3506
+ },
3507
+ "id": {
3508
+ "type": "string",
3509
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
3510
+ },
3511
+ "deleted": {
3512
+ "type": "boolean",
3513
+ "enum": [
3514
+ true
3515
+ ]
3516
+ }
3517
+ },
3518
+ "additionalProperties": false
3519
+ },
3520
+ "declaredErrors": [
3521
+ "APPLICATION_ERROR",
3522
+ "INVALID_API_KEY",
3523
+ "INVALID_IDEMPOTENCY_KEY",
3524
+ "INVALID_PARAMETER",
3525
+ "NOT_FOUND",
3526
+ "RESTRICTED_API_KEY"
3527
+ ],
3528
+ "idempotency": "optional",
3529
+ "fidelity": "behavioral",
3530
+ "mcp": {
3531
+ "name": "remove-segment"
3532
+ }
3533
+ },
3534
+ {
3535
+ "id": "workspace.context",
3536
+ "description": "Team, calling API key and virtual time for the dashboard app.",
3537
+ "inputSchema": {
3538
+ "type": "object",
3539
+ "required": [],
3540
+ "properties": {},
3541
+ "additionalProperties": false
3542
+ },
3543
+ "outputSchema": {
3544
+ "type": "object",
3545
+ "required": [
3546
+ "now",
3547
+ "today",
3548
+ "team",
3549
+ "apiKey"
3550
+ ],
3551
+ "properties": {
3552
+ "now": {
3553
+ "type": "string"
3554
+ },
3555
+ "today": {
3556
+ "type": "string"
3557
+ },
3558
+ "team": {
3559
+ "type": "object",
3560
+ "required": [
3561
+ "name",
3562
+ "plan",
3563
+ "dailyQuota",
3564
+ "sentToday"
3565
+ ],
3566
+ "properties": {
3567
+ "name": {
3568
+ "type": "string"
3569
+ },
3570
+ "plan": {
3571
+ "type": "string"
3572
+ },
3573
+ "dailyQuota": {
3574
+ "type": "integer"
3575
+ },
3576
+ "sentToday": {
3577
+ "type": "integer"
3578
+ }
3579
+ },
3580
+ "additionalProperties": false
3581
+ },
3582
+ "apiKey": {
3583
+ "type": "object",
3584
+ "required": [
3585
+ "id",
3586
+ "name",
3587
+ "permission",
3588
+ "domainId"
3589
+ ],
3590
+ "properties": {
3591
+ "id": {
3592
+ "type": "string",
3593
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
3594
+ },
3595
+ "name": {
3596
+ "type": "string"
3597
+ },
3598
+ "permission": {
3599
+ "type": "string"
3600
+ },
3601
+ "domainId": {
3602
+ "anyOf": [
3603
+ {
3604
+ "type": "string",
3605
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
3606
+ },
3607
+ {
3608
+ "type": "null"
3609
+ }
3610
+ ]
3611
+ }
3612
+ },
3613
+ "additionalProperties": false
3614
+ }
3615
+ },
3616
+ "additionalProperties": false
3617
+ },
3618
+ "declaredErrors": [
3619
+ "INVALID_API_KEY"
3620
+ ],
3621
+ "idempotency": "none",
3622
+ "fidelity": "stateful"
3623
+ }
3624
+ ],
3625
+ "events": [
3626
+ {
3627
+ "id": "email.bounced",
3628
+ "payloadSchema": {
3629
+ "type": "object",
3630
+ "required": [
3631
+ "email_id",
3632
+ "to",
3633
+ "created_at",
3634
+ "bounce"
3635
+ ],
3636
+ "properties": {
3637
+ "email_id": {
3638
+ "type": "string",
3639
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
3640
+ },
3641
+ "to": {
3642
+ "type": "array",
3643
+ "items": {
3644
+ "type": "string"
3645
+ },
3646
+ "minItems": 1,
3647
+ "maxItems": 50
3648
+ },
3649
+ "created_at": {
3650
+ "type": "string",
3651
+ "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}\\.\\d{6}\\+00$"
3652
+ },
3653
+ "bounce": {
3654
+ "type": "object",
3655
+ "required": [
3656
+ "type",
3657
+ "message"
3658
+ ],
3659
+ "properties": {
3660
+ "type": {
3661
+ "type": "string",
3662
+ "enum": [
3663
+ "Permanent"
3664
+ ]
3665
+ },
3666
+ "message": {
3667
+ "type": "string"
3668
+ }
3669
+ },
3670
+ "additionalProperties": false
3671
+ }
3672
+ },
3673
+ "additionalProperties": false
3674
+ }
3675
+ },
3676
+ {
3677
+ "id": "email.delivered",
3678
+ "payloadSchema": {
3679
+ "type": "object",
3680
+ "required": [
3681
+ "email_id",
3682
+ "to",
3683
+ "created_at"
3684
+ ],
3685
+ "properties": {
3686
+ "email_id": {
3687
+ "type": "string",
3688
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
3689
+ },
3690
+ "to": {
3691
+ "type": "array",
3692
+ "items": {
3693
+ "type": "string"
3694
+ },
3695
+ "minItems": 1,
3696
+ "maxItems": 50
3697
+ },
3698
+ "created_at": {
3699
+ "type": "string",
3700
+ "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}\\.\\d{6}\\+00$"
3701
+ }
3702
+ },
3703
+ "additionalProperties": false
3704
+ }
3705
+ },
3706
+ {
3707
+ "id": "email.sent",
3708
+ "payloadSchema": {
3709
+ "type": "object",
3710
+ "required": [
3711
+ "email_id",
3712
+ "from",
3713
+ "to",
3714
+ "subject",
3715
+ "created_at",
3716
+ "batch_id"
3717
+ ],
3718
+ "properties": {
3719
+ "email_id": {
3720
+ "type": "string",
3721
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
3722
+ },
3723
+ "from": {
3724
+ "type": "string"
3725
+ },
3726
+ "to": {
3727
+ "type": "array",
3728
+ "items": {
3729
+ "type": "string"
3730
+ },
3731
+ "minItems": 1,
3732
+ "maxItems": 50
3733
+ },
3734
+ "subject": {
3735
+ "type": "string"
3736
+ },
3737
+ "created_at": {
3738
+ "type": "string",
3739
+ "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}\\.\\d{6}\\+00$"
3740
+ },
3741
+ "batch_id": {
3742
+ "anyOf": [
3743
+ {
3744
+ "type": "string",
3745
+ "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
3746
+ },
3747
+ {
3748
+ "type": "null"
3749
+ }
3750
+ ]
3751
+ }
3752
+ },
3753
+ "additionalProperties": false
3754
+ }
3755
+ }
3756
+ ],
3757
+ "faults": [
3758
+ {
3759
+ "id": "contacts-create-unavailable",
3760
+ "appliesTo": [
3761
+ "contacts.create"
3762
+ ],
3763
+ "timing": "after_commit",
3764
+ "error": {
3765
+ "code": "APPLICATION_ERROR",
3766
+ "message": "Internal server error. We are unable to process your request right now, please try again later.",
3767
+ "retryable": true
3768
+ }
3769
+ },
3770
+ {
3771
+ "id": "send-rate-limited",
3772
+ "appliesTo": [
3773
+ "emails.send",
3774
+ "emails.send_batch"
3775
+ ],
3776
+ "timing": "before",
3777
+ "error": {
3778
+ "code": "RATE_LIMIT_EXCEEDED",
3779
+ "message": "Too many requests. You can only make 10 requests per second.",
3780
+ "retryable": true
3781
+ }
3782
+ }
3783
+ ],
3784
+ "subscriptions": [],
3785
+ "http": [
3786
+ {
3787
+ "id": "add-contact-segment",
3788
+ "operationId": "contacts.add_segment",
3789
+ "method": "POST",
3790
+ "path": "/contacts/{contact_id}/segments/{segment_id}",
3791
+ "auth": {
3792
+ "kind": "bearer",
3793
+ "schemes": [
3794
+ "Bearer"
3795
+ ]
3796
+ },
3797
+ "requestBody": "none",
3798
+ "response": {
3799
+ "successStatus": 200,
3800
+ "errors": [
3801
+ {
3802
+ "code": "INVALID_API_KEY",
3803
+ "status": 403
3804
+ },
3805
+ {
3806
+ "code": "INVALID_IDEMPOTENCY_KEY",
3807
+ "status": 400
3808
+ },
3809
+ {
3810
+ "code": "INVALID_PARAMETER",
3811
+ "status": 422
3812
+ },
3813
+ {
3814
+ "code": "MISSING_REQUIRED_FIELD",
3815
+ "status": 422
3816
+ },
3817
+ {
3818
+ "code": "NOT_FOUND",
3819
+ "status": 404
3820
+ },
3821
+ {
3822
+ "code": "RESTRICTED_API_KEY",
3823
+ "status": 401
3824
+ }
3825
+ ]
3826
+ }
3827
+ },
3828
+ {
3829
+ "id": "cancel-email",
3830
+ "operationId": "emails.cancel",
3831
+ "method": "POST",
3832
+ "path": "/emails/{email_id}/cancel",
3833
+ "auth": {
3834
+ "kind": "bearer",
3835
+ "schemes": [
3836
+ "Bearer"
3837
+ ]
3838
+ },
3839
+ "requestBody": "none",
3840
+ "response": {
3841
+ "successStatus": 200,
3842
+ "errors": [
3843
+ {
3844
+ "code": "INVALID_API_KEY",
3845
+ "status": 403
3846
+ },
3847
+ {
3848
+ "code": "INVALID_IDEMPOTENCY_KEY",
3849
+ "status": 400
3850
+ },
3851
+ {
3852
+ "code": "INVALID_PARAMETER",
3853
+ "status": 422
3854
+ },
3855
+ {
3856
+ "code": "NOT_FOUND",
3857
+ "status": 404
3858
+ },
3859
+ {
3860
+ "code": "RESTRICTED_API_KEY",
3861
+ "status": 401
3862
+ },
3863
+ {
3864
+ "code": "VALIDATION_ERROR",
3865
+ "status": 422
3866
+ }
3867
+ ]
3868
+ }
3869
+ },
3870
+ {
3871
+ "id": "create-api-key",
3872
+ "operationId": "api_keys.create",
3873
+ "method": "POST",
3874
+ "path": "/api-keys",
3875
+ "auth": {
3876
+ "kind": "bearer",
3877
+ "schemes": [
3878
+ "Bearer"
3879
+ ]
3880
+ },
3881
+ "requestBody": "json",
3882
+ "response": {
3883
+ "successStatus": 201,
3884
+ "errors": [
3885
+ {
3886
+ "code": "INVALID_API_KEY",
3887
+ "status": 403
3888
+ },
3889
+ {
3890
+ "code": "INVALID_IDEMPOTENCY_KEY",
3891
+ "status": 400
3892
+ },
3893
+ {
3894
+ "code": "MISSING_REQUIRED_FIELD",
3895
+ "status": 422
3896
+ },
3897
+ {
3898
+ "code": "RESTRICTED_API_KEY",
3899
+ "status": 401
3900
+ },
3901
+ {
3902
+ "code": "VALIDATION_ERROR",
3903
+ "status": 422
3904
+ }
3905
+ ]
3906
+ }
3907
+ },
3908
+ {
3909
+ "id": "create-contact",
3910
+ "operationId": "contacts.create",
3911
+ "method": "POST",
3912
+ "path": "/contacts",
3913
+ "auth": {
3914
+ "kind": "bearer",
3915
+ "schemes": [
3916
+ "Bearer"
3917
+ ]
3918
+ },
3919
+ "requestBody": "json",
3920
+ "response": {
3921
+ "successStatus": 201,
3922
+ "errors": [
3923
+ {
3924
+ "code": "APPLICATION_ERROR",
3925
+ "status": 500
3926
+ },
3927
+ {
3928
+ "code": "INVALID_API_KEY",
3929
+ "status": 403
3930
+ },
3931
+ {
3932
+ "code": "INVALID_IDEMPOTENCY_KEY",
3933
+ "status": 400
3934
+ },
3935
+ {
3936
+ "code": "MISSING_REQUIRED_FIELD",
3937
+ "status": 422
3938
+ },
3939
+ {
3940
+ "code": "RESTRICTED_API_KEY",
3941
+ "status": 401
3942
+ },
3943
+ {
3944
+ "code": "VALIDATION_ERROR",
3945
+ "status": 422
3946
+ }
3947
+ ]
3948
+ }
3949
+ },
3950
+ {
3951
+ "id": "create-domain",
3952
+ "operationId": "domains.create",
3953
+ "method": "POST",
3954
+ "path": "/domains",
3955
+ "auth": {
3956
+ "kind": "bearer",
3957
+ "schemes": [
3958
+ "Bearer"
3959
+ ]
3960
+ },
3961
+ "requestBody": "json",
3962
+ "response": {
3963
+ "successStatus": 201,
3964
+ "errors": [
3965
+ {
3966
+ "code": "INVALID_API_KEY",
3967
+ "status": 403
3968
+ },
3969
+ {
3970
+ "code": "INVALID_IDEMPOTENCY_KEY",
3971
+ "status": 400
3972
+ },
3973
+ {
3974
+ "code": "MISSING_REQUIRED_FIELD",
3975
+ "status": 422
3976
+ },
3977
+ {
3978
+ "code": "RESTRICTED_API_KEY",
3979
+ "status": 401
3980
+ },
3981
+ {
3982
+ "code": "VALIDATION_ERROR",
3983
+ "status": 422
3984
+ }
3985
+ ]
3986
+ }
3987
+ },
3988
+ {
3989
+ "id": "create-segment",
3990
+ "operationId": "segments.create",
3991
+ "method": "POST",
3992
+ "path": "/segments",
3993
+ "auth": {
3994
+ "kind": "bearer",
3995
+ "schemes": [
3996
+ "Bearer"
3997
+ ]
3998
+ },
3999
+ "requestBody": "json",
4000
+ "response": {
4001
+ "successStatus": 201,
4002
+ "errors": [
4003
+ {
4004
+ "code": "INVALID_API_KEY",
4005
+ "status": 403
4006
+ },
4007
+ {
4008
+ "code": "INVALID_IDEMPOTENCY_KEY",
4009
+ "status": 400
4010
+ },
4011
+ {
4012
+ "code": "MISSING_REQUIRED_FIELD",
4013
+ "status": 422
4014
+ },
4015
+ {
4016
+ "code": "RESTRICTED_API_KEY",
4017
+ "status": 401
4018
+ },
4019
+ {
4020
+ "code": "VALIDATION_ERROR",
4021
+ "status": 422
4022
+ }
4023
+ ]
4024
+ }
4025
+ },
4026
+ {
4027
+ "id": "get-contact",
4028
+ "operationId": "contacts.get",
4029
+ "method": "GET",
4030
+ "path": "/contacts/{id}",
4031
+ "auth": {
4032
+ "kind": "bearer",
4033
+ "schemes": [
4034
+ "Bearer"
4035
+ ]
4036
+ },
4037
+ "requestBody": "none",
4038
+ "response": {
4039
+ "successStatus": 200,
4040
+ "errors": [
4041
+ {
4042
+ "code": "INVALID_API_KEY",
4043
+ "status": 403
4044
+ },
4045
+ {
4046
+ "code": "INVALID_PARAMETER",
4047
+ "status": 422
4048
+ },
4049
+ {
4050
+ "code": "MISSING_REQUIRED_FIELD",
4051
+ "status": 422
4052
+ },
4053
+ {
4054
+ "code": "NOT_FOUND",
4055
+ "status": 404
4056
+ },
4057
+ {
4058
+ "code": "RESTRICTED_API_KEY",
4059
+ "status": 401
4060
+ }
4061
+ ]
4062
+ }
4063
+ },
4064
+ {
4065
+ "id": "get-domain",
4066
+ "operationId": "domains.get",
4067
+ "method": "GET",
4068
+ "path": "/domains/{domain_id}",
4069
+ "auth": {
4070
+ "kind": "bearer",
4071
+ "schemes": [
4072
+ "Bearer"
4073
+ ]
4074
+ },
4075
+ "requestBody": "none",
4076
+ "response": {
4077
+ "successStatus": 200,
4078
+ "errors": [
4079
+ {
4080
+ "code": "INVALID_API_KEY",
4081
+ "status": 403
4082
+ },
4083
+ {
4084
+ "code": "INVALID_PARAMETER",
4085
+ "status": 422
4086
+ },
4087
+ {
4088
+ "code": "NOT_FOUND",
4089
+ "status": 404
4090
+ },
4091
+ {
4092
+ "code": "RESTRICTED_API_KEY",
4093
+ "status": 401
4094
+ }
4095
+ ]
4096
+ }
4097
+ },
4098
+ {
4099
+ "id": "get-email",
4100
+ "operationId": "emails.get",
4101
+ "method": "GET",
4102
+ "path": "/emails/{email_id}",
4103
+ "auth": {
4104
+ "kind": "bearer",
4105
+ "schemes": [
4106
+ "Bearer"
4107
+ ]
4108
+ },
4109
+ "requestBody": "none",
4110
+ "response": {
4111
+ "successStatus": 200,
4112
+ "errors": [
4113
+ {
4114
+ "code": "INVALID_API_KEY",
4115
+ "status": 403
4116
+ },
4117
+ {
4118
+ "code": "INVALID_PARAMETER",
4119
+ "status": 422
4120
+ },
4121
+ {
4122
+ "code": "NOT_FOUND",
4123
+ "status": 404
4124
+ },
4125
+ {
4126
+ "code": "RESTRICTED_API_KEY",
4127
+ "status": 401
4128
+ }
4129
+ ]
4130
+ }
4131
+ },
4132
+ {
4133
+ "id": "list-api-keys",
4134
+ "operationId": "api_keys.list",
4135
+ "method": "GET",
4136
+ "path": "/api-keys",
4137
+ "auth": {
4138
+ "kind": "bearer",
4139
+ "schemes": [
4140
+ "Bearer"
4141
+ ]
4142
+ },
4143
+ "requestBody": "none",
4144
+ "response": {
4145
+ "successStatus": 200,
4146
+ "errors": [
4147
+ {
4148
+ "code": "APPLICATION_ERROR",
4149
+ "status": 500
4150
+ },
4151
+ {
4152
+ "code": "INVALID_API_KEY",
4153
+ "status": 403
4154
+ },
4155
+ {
4156
+ "code": "RESTRICTED_API_KEY",
4157
+ "status": 401
4158
+ },
4159
+ {
4160
+ "code": "VALIDATION_ERROR",
4161
+ "status": 422
4162
+ }
4163
+ ]
4164
+ }
4165
+ },
4166
+ {
4167
+ "id": "list-contact-segments",
4168
+ "operationId": "contacts.list_segments",
4169
+ "method": "GET",
4170
+ "path": "/contacts/{contact_id}/segments",
4171
+ "auth": {
4172
+ "kind": "bearer",
4173
+ "schemes": [
4174
+ "Bearer"
4175
+ ]
4176
+ },
4177
+ "requestBody": "none",
4178
+ "response": {
4179
+ "successStatus": 200,
4180
+ "errors": [
4181
+ {
4182
+ "code": "APPLICATION_ERROR",
4183
+ "status": 500
4184
+ },
4185
+ {
4186
+ "code": "INVALID_API_KEY",
4187
+ "status": 403
4188
+ },
4189
+ {
4190
+ "code": "INVALID_PARAMETER",
4191
+ "status": 422
4192
+ },
4193
+ {
4194
+ "code": "MISSING_REQUIRED_FIELD",
4195
+ "status": 422
4196
+ },
4197
+ {
4198
+ "code": "NOT_FOUND",
4199
+ "status": 404
4200
+ },
4201
+ {
4202
+ "code": "RESTRICTED_API_KEY",
4203
+ "status": 401
4204
+ },
4205
+ {
4206
+ "code": "VALIDATION_ERROR",
4207
+ "status": 422
4208
+ }
4209
+ ]
4210
+ }
4211
+ },
4212
+ {
4213
+ "id": "list-contacts",
4214
+ "operationId": "contacts.list",
4215
+ "method": "GET",
4216
+ "path": "/contacts",
4217
+ "auth": {
4218
+ "kind": "bearer",
4219
+ "schemes": [
4220
+ "Bearer"
4221
+ ]
4222
+ },
4223
+ "requestBody": "none",
4224
+ "response": {
4225
+ "successStatus": 200,
4226
+ "errors": [
4227
+ {
4228
+ "code": "APPLICATION_ERROR",
4229
+ "status": 500
4230
+ },
4231
+ {
4232
+ "code": "INVALID_API_KEY",
4233
+ "status": 403
4234
+ },
4235
+ {
4236
+ "code": "INVALID_PARAMETER",
4237
+ "status": 422
4238
+ },
4239
+ {
4240
+ "code": "NOT_FOUND",
4241
+ "status": 404
4242
+ },
4243
+ {
4244
+ "code": "RESTRICTED_API_KEY",
4245
+ "status": 401
4246
+ },
4247
+ {
4248
+ "code": "VALIDATION_ERROR",
4249
+ "status": 422
4250
+ }
4251
+ ]
4252
+ }
4253
+ },
4254
+ {
4255
+ "id": "list-domains",
4256
+ "operationId": "domains.list",
4257
+ "method": "GET",
4258
+ "path": "/domains",
4259
+ "auth": {
4260
+ "kind": "bearer",
4261
+ "schemes": [
4262
+ "Bearer"
4263
+ ]
4264
+ },
4265
+ "requestBody": "none",
4266
+ "response": {
4267
+ "successStatus": 200,
4268
+ "errors": [
4269
+ {
4270
+ "code": "APPLICATION_ERROR",
4271
+ "status": 500
4272
+ },
4273
+ {
4274
+ "code": "INVALID_API_KEY",
4275
+ "status": 403
4276
+ },
4277
+ {
4278
+ "code": "RESTRICTED_API_KEY",
4279
+ "status": 401
4280
+ },
4281
+ {
4282
+ "code": "VALIDATION_ERROR",
4283
+ "status": 422
4284
+ }
4285
+ ]
4286
+ }
4287
+ },
4288
+ {
4289
+ "id": "list-emails",
4290
+ "operationId": "emails.list",
4291
+ "method": "GET",
4292
+ "path": "/emails",
4293
+ "auth": {
4294
+ "kind": "bearer",
4295
+ "schemes": [
4296
+ "Bearer"
4297
+ ]
4298
+ },
4299
+ "requestBody": "none",
4300
+ "response": {
4301
+ "successStatus": 200,
4302
+ "errors": [
4303
+ {
4304
+ "code": "APPLICATION_ERROR",
4305
+ "status": 500
4306
+ },
4307
+ {
4308
+ "code": "INVALID_API_KEY",
4309
+ "status": 403
4310
+ },
4311
+ {
4312
+ "code": "RESTRICTED_API_KEY",
4313
+ "status": 401
4314
+ },
4315
+ {
4316
+ "code": "VALIDATION_ERROR",
4317
+ "status": 422
4318
+ }
4319
+ ]
4320
+ }
4321
+ },
4322
+ {
4323
+ "id": "list-segments",
4324
+ "operationId": "segments.list",
4325
+ "method": "GET",
4326
+ "path": "/segments",
4327
+ "auth": {
4328
+ "kind": "bearer",
4329
+ "schemes": [
4330
+ "Bearer"
4331
+ ]
4332
+ },
4333
+ "requestBody": "none",
4334
+ "response": {
4335
+ "successStatus": 200,
4336
+ "errors": [
4337
+ {
4338
+ "code": "APPLICATION_ERROR",
4339
+ "status": 500
4340
+ },
4341
+ {
4342
+ "code": "INVALID_API_KEY",
4343
+ "status": 403
4344
+ },
4345
+ {
4346
+ "code": "RESTRICTED_API_KEY",
4347
+ "status": 401
4348
+ },
4349
+ {
4350
+ "code": "VALIDATION_ERROR",
4351
+ "status": 422
4352
+ }
4353
+ ]
4354
+ }
4355
+ },
4356
+ {
4357
+ "id": "remove-api-key",
4358
+ "operationId": "api_keys.remove",
4359
+ "method": "DELETE",
4360
+ "path": "/api-keys/{api_key_id}",
4361
+ "auth": {
4362
+ "kind": "bearer",
4363
+ "schemes": [
4364
+ "Bearer"
4365
+ ]
4366
+ },
4367
+ "requestBody": "none",
4368
+ "response": {
4369
+ "successStatus": 200,
4370
+ "errors": [
4371
+ {
4372
+ "code": "INVALID_API_KEY",
4373
+ "status": 403
4374
+ },
4375
+ {
4376
+ "code": "INVALID_IDEMPOTENCY_KEY",
4377
+ "status": 400
4378
+ },
4379
+ {
4380
+ "code": "INVALID_PARAMETER",
4381
+ "status": 422
4382
+ },
4383
+ {
4384
+ "code": "NOT_FOUND",
4385
+ "status": 404
4386
+ },
4387
+ {
4388
+ "code": "RESTRICTED_API_KEY",
4389
+ "status": 401
4390
+ },
4391
+ {
4392
+ "code": "VALIDATION_ERROR",
4393
+ "status": 422
4394
+ }
4395
+ ]
4396
+ }
4397
+ },
4398
+ {
4399
+ "id": "remove-contact",
4400
+ "operationId": "contacts.remove",
4401
+ "method": "DELETE",
4402
+ "path": "/contacts/{id}",
4403
+ "auth": {
4404
+ "kind": "bearer",
4405
+ "schemes": [
4406
+ "Bearer"
4407
+ ]
4408
+ },
4409
+ "requestBody": "none",
4410
+ "response": {
4411
+ "successStatus": 200,
4412
+ "errors": [
4413
+ {
4414
+ "code": "APPLICATION_ERROR",
4415
+ "status": 500
4416
+ },
4417
+ {
4418
+ "code": "INVALID_API_KEY",
4419
+ "status": 403
4420
+ },
4421
+ {
4422
+ "code": "INVALID_IDEMPOTENCY_KEY",
4423
+ "status": 400
4424
+ },
4425
+ {
4426
+ "code": "INVALID_PARAMETER",
4427
+ "status": 422
4428
+ },
4429
+ {
4430
+ "code": "MISSING_REQUIRED_FIELD",
4431
+ "status": 422
4432
+ },
4433
+ {
4434
+ "code": "NOT_FOUND",
4435
+ "status": 404
4436
+ },
4437
+ {
4438
+ "code": "RESTRICTED_API_KEY",
4439
+ "status": 401
4440
+ }
4441
+ ]
4442
+ }
4443
+ },
4444
+ {
4445
+ "id": "remove-contact-segment",
4446
+ "operationId": "contacts.remove_segment",
4447
+ "method": "DELETE",
4448
+ "path": "/contacts/{contact_id}/segments/{segment_id}",
4449
+ "auth": {
4450
+ "kind": "bearer",
4451
+ "schemes": [
4452
+ "Bearer"
4453
+ ]
4454
+ },
4455
+ "requestBody": "none",
4456
+ "response": {
4457
+ "successStatus": 200,
4458
+ "errors": [
4459
+ {
4460
+ "code": "INVALID_API_KEY",
4461
+ "status": 403
4462
+ },
4463
+ {
4464
+ "code": "INVALID_IDEMPOTENCY_KEY",
4465
+ "status": 400
4466
+ },
4467
+ {
4468
+ "code": "INVALID_PARAMETER",
4469
+ "status": 422
4470
+ },
4471
+ {
4472
+ "code": "MISSING_REQUIRED_FIELD",
4473
+ "status": 422
4474
+ },
4475
+ {
4476
+ "code": "NOT_FOUND",
4477
+ "status": 404
4478
+ },
4479
+ {
4480
+ "code": "RESTRICTED_API_KEY",
4481
+ "status": 401
4482
+ }
4483
+ ]
4484
+ }
4485
+ },
4486
+ {
4487
+ "id": "remove-domain",
4488
+ "operationId": "domains.remove",
4489
+ "method": "DELETE",
4490
+ "path": "/domains/{domain_id}",
4491
+ "auth": {
4492
+ "kind": "bearer",
4493
+ "schemes": [
4494
+ "Bearer"
4495
+ ]
4496
+ },
4497
+ "requestBody": "none",
4498
+ "response": {
4499
+ "successStatus": 200,
4500
+ "errors": [
4501
+ {
4502
+ "code": "INVALID_API_KEY",
4503
+ "status": 403
4504
+ },
4505
+ {
4506
+ "code": "INVALID_IDEMPOTENCY_KEY",
4507
+ "status": 400
4508
+ },
4509
+ {
4510
+ "code": "INVALID_PARAMETER",
4511
+ "status": 422
4512
+ },
4513
+ {
4514
+ "code": "NOT_FOUND",
4515
+ "status": 404
4516
+ },
4517
+ {
4518
+ "code": "RESTRICTED_API_KEY",
4519
+ "status": 401
4520
+ }
4521
+ ]
4522
+ }
4523
+ },
4524
+ {
4525
+ "id": "remove-segment",
4526
+ "operationId": "segments.remove",
4527
+ "method": "DELETE",
4528
+ "path": "/segments/{id}",
4529
+ "auth": {
4530
+ "kind": "bearer",
4531
+ "schemes": [
4532
+ "Bearer"
4533
+ ]
4534
+ },
4535
+ "requestBody": "none",
4536
+ "response": {
4537
+ "successStatus": 200,
4538
+ "errors": [
4539
+ {
4540
+ "code": "APPLICATION_ERROR",
4541
+ "status": 500
4542
+ },
4543
+ {
4544
+ "code": "INVALID_API_KEY",
4545
+ "status": 403
4546
+ },
4547
+ {
4548
+ "code": "INVALID_IDEMPOTENCY_KEY",
4549
+ "status": 400
4550
+ },
4551
+ {
4552
+ "code": "INVALID_PARAMETER",
4553
+ "status": 422
4554
+ },
4555
+ {
4556
+ "code": "NOT_FOUND",
4557
+ "status": 404
4558
+ },
4559
+ {
4560
+ "code": "RESTRICTED_API_KEY",
4561
+ "status": 401
4562
+ }
4563
+ ]
4564
+ }
4565
+ },
4566
+ {
4567
+ "id": "send-batch",
4568
+ "operationId": "emails.send_batch",
4569
+ "method": "POST",
4570
+ "path": "/emails/batch",
4571
+ "auth": {
4572
+ "kind": "bearer",
4573
+ "schemes": [
4574
+ "Bearer"
4575
+ ]
4576
+ },
4577
+ "requestBody": "json",
4578
+ "response": {
4579
+ "successStatus": 200,
4580
+ "errors": [
4581
+ {
4582
+ "code": "DAILY_QUOTA_EXCEEDED",
4583
+ "status": 429
4584
+ },
4585
+ {
4586
+ "code": "DOMAIN_NOT_VERIFIED",
4587
+ "status": 403
4588
+ },
4589
+ {
4590
+ "code": "INVALID_API_KEY",
4591
+ "status": 403
4592
+ },
4593
+ {
4594
+ "code": "INVALID_IDEMPOTENCY_KEY",
4595
+ "status": 400
4596
+ },
4597
+ {
4598
+ "code": "MISSING_REQUIRED_FIELD",
4599
+ "status": 422
4600
+ },
4601
+ {
4602
+ "code": "RATE_LIMIT_EXCEEDED",
4603
+ "status": 429
4604
+ },
4605
+ {
4606
+ "code": "VALIDATION_ERROR",
4607
+ "status": 422
4608
+ }
4609
+ ]
4610
+ }
4611
+ },
4612
+ {
4613
+ "id": "send-email",
4614
+ "operationId": "emails.send",
4615
+ "method": "POST",
4616
+ "path": "/emails",
4617
+ "auth": {
4618
+ "kind": "bearer",
4619
+ "schemes": [
4620
+ "Bearer"
4621
+ ]
4622
+ },
4623
+ "requestBody": "json",
4624
+ "response": {
4625
+ "successStatus": 200,
4626
+ "errors": [
4627
+ {
4628
+ "code": "DAILY_QUOTA_EXCEEDED",
4629
+ "status": 429
4630
+ },
4631
+ {
4632
+ "code": "DOMAIN_NOT_VERIFIED",
4633
+ "status": 403
4634
+ },
4635
+ {
4636
+ "code": "INVALID_API_KEY",
4637
+ "status": 403
4638
+ },
4639
+ {
4640
+ "code": "INVALID_IDEMPOTENCY_KEY",
4641
+ "status": 400
4642
+ },
4643
+ {
4644
+ "code": "MISSING_REQUIRED_FIELD",
4645
+ "status": 422
4646
+ },
4647
+ {
4648
+ "code": "RATE_LIMIT_EXCEEDED",
4649
+ "status": 429
4650
+ },
4651
+ {
4652
+ "code": "VALIDATION_ERROR",
4653
+ "status": 422
4654
+ }
4655
+ ]
4656
+ }
4657
+ },
4658
+ {
4659
+ "id": "update-contact",
4660
+ "operationId": "contacts.update",
4661
+ "method": "PATCH",
4662
+ "path": "/contacts/{id}",
4663
+ "auth": {
4664
+ "kind": "bearer",
4665
+ "schemes": [
4666
+ "Bearer"
4667
+ ]
4668
+ },
4669
+ "requestBody": "json",
4670
+ "response": {
4671
+ "successStatus": 200,
4672
+ "errors": [
4673
+ {
4674
+ "code": "INVALID_API_KEY",
4675
+ "status": 403
4676
+ },
4677
+ {
4678
+ "code": "INVALID_IDEMPOTENCY_KEY",
4679
+ "status": 400
4680
+ },
4681
+ {
4682
+ "code": "INVALID_PARAMETER",
4683
+ "status": 422
4684
+ },
4685
+ {
4686
+ "code": "MISSING_REQUIRED_FIELD",
4687
+ "status": 422
4688
+ },
4689
+ {
4690
+ "code": "NOT_FOUND",
4691
+ "status": 404
4692
+ },
4693
+ {
4694
+ "code": "RESTRICTED_API_KEY",
4695
+ "status": 401
4696
+ },
4697
+ {
4698
+ "code": "VALIDATION_ERROR",
4699
+ "status": 422
4700
+ }
4701
+ ]
4702
+ }
4703
+ },
4704
+ {
4705
+ "id": "update-email",
4706
+ "operationId": "emails.update",
4707
+ "method": "PATCH",
4708
+ "path": "/emails/{email_id}",
4709
+ "auth": {
4710
+ "kind": "bearer",
4711
+ "schemes": [
4712
+ "Bearer"
4713
+ ]
4714
+ },
4715
+ "requestBody": "json",
4716
+ "response": {
4717
+ "successStatus": 200,
4718
+ "errors": [
4719
+ {
4720
+ "code": "INVALID_API_KEY",
4721
+ "status": 403
4722
+ },
4723
+ {
4724
+ "code": "INVALID_IDEMPOTENCY_KEY",
4725
+ "status": 400
4726
+ },
4727
+ {
4728
+ "code": "INVALID_PARAMETER",
4729
+ "status": 422
4730
+ },
4731
+ {
4732
+ "code": "MISSING_REQUIRED_FIELD",
4733
+ "status": 422
4734
+ },
4735
+ {
4736
+ "code": "NOT_FOUND",
4737
+ "status": 404
4738
+ },
4739
+ {
4740
+ "code": "RESTRICTED_API_KEY",
4741
+ "status": 401
4742
+ },
4743
+ {
4744
+ "code": "VALIDATION_ERROR",
4745
+ "status": 422
4746
+ }
4747
+ ]
4748
+ }
4749
+ },
4750
+ {
4751
+ "id": "verify-domain",
4752
+ "operationId": "domains.verify",
4753
+ "method": "POST",
4754
+ "path": "/domains/{domain_id}/verify",
4755
+ "auth": {
4756
+ "kind": "bearer",
4757
+ "schemes": [
4758
+ "Bearer"
4759
+ ]
4760
+ },
4761
+ "requestBody": "none",
4762
+ "response": {
4763
+ "successStatus": 200,
4764
+ "errors": [
4765
+ {
4766
+ "code": "INVALID_API_KEY",
4767
+ "status": 403
4768
+ },
4769
+ {
4770
+ "code": "INVALID_IDEMPOTENCY_KEY",
4771
+ "status": 400
4772
+ },
4773
+ {
4774
+ "code": "INVALID_PARAMETER",
4775
+ "status": 422
4776
+ },
4777
+ {
4778
+ "code": "NOT_FOUND",
4779
+ "status": 404
4780
+ },
4781
+ {
4782
+ "code": "RESTRICTED_API_KEY",
4783
+ "status": 401
4784
+ }
4785
+ ]
4786
+ }
4787
+ }
4788
+ ],
4789
+ "callbacks": [],
4790
+ "compatibility": [],
4791
+ "connections": [
4792
+ {
4793
+ "id": "resend-rest",
4794
+ "title": "Resend-shaped REST subset (Bearer API key, JSON bodies)",
4795
+ "protocol": "http",
4796
+ "environment": {
4797
+ "RESEND_BASE_URL": "FIREDRILL_HTTP_URL",
4798
+ "RESEND_API_KEY": "FIREDRILL_HTTP_TOKEN"
4799
+ },
4800
+ "instructions": "Point a client's Resend base URL at RESEND_BASE_URL and send RESEND_API_KEY as the Bearer token. Routes mirror /emails, /domains, /api-keys, /segments and /contacts; the calling key is the actor attribute resendApiKeyId, not the token. Compatibility with official SDKs is not verified."
4801
+ }
4802
+ ]
4803
+ }
4804
+ }