@lessly/sdk-app 82.0.0 → 83.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -80186,45 +80186,93 @@ export interface DeploymentVolumeResizeOutput {
80186
80186
  }
80187
80187
  export interface MailApikeyCreateInput {
80188
80188
  /**
80189
- * Human-readable label for the key
80189
+ * Human-readable label for the key, e.g. "production sender"
80190
80190
  */
80191
80191
  name: string;
80192
80192
  /**
80193
- * Permission scope: 'full_access' or 'sending_access'
80193
+ * Permission scope: full_access can call every mail tool, sending_access can only send email
80194
80194
  */
80195
80195
  scope: ("full_access" | "sending_access");
80196
80196
  /**
80197
- * Optional Domain id this key is locked to
80197
+ * Lock the key to this sending domain; omit to let it send from any verified domain
80198
80198
  */
80199
80199
  domainId?: string;
80200
80200
  }
80201
80201
  export interface MailApikeyCreateOutput {
80202
+ /**
80203
+ * API key id; pass it to mail_apikey_delete to revoke the key
80204
+ */
80202
80205
  id: string;
80206
+ /**
80207
+ * The full secret. Returned only by this call and never retrievable again — store it now
80208
+ */
80203
80209
  key: string;
80210
+ /**
80211
+ * Human-readable label given when the key was issued
80212
+ */
80204
80213
  name: string;
80205
- scope: string;
80214
+ /**
80215
+ * Permission scope: full_access can call every mail tool, sending_access can only send email
80216
+ */
80217
+ scope: ("full_access" | "sending_access");
80218
+ /**
80219
+ * Opening characters of the secret, so a key can be recognised in a log or a header
80220
+ */
80206
80221
  prefix: string;
80222
+ /**
80223
+ * Sending domain this key is locked to; null if it may send from any verified domain
80224
+ */
80207
80225
  domainId: (string | null);
80226
+ /**
80227
+ * When the key was issued (ISO 8601 UTC)
80228
+ */
80208
80229
  createdAt: string;
80209
80230
  }
80210
80231
  export interface MailApikeyDeleteInput {
80211
80232
  /**
80212
- * UUID of the API key to revoke
80233
+ * Id of the API key to revoke; revocation is immediate and permanent
80213
80234
  */
80214
80235
  id: string;
80215
80236
  }
80216
80237
  export interface MailApikeyDeleteOutput {
80238
+ /**
80239
+ * Id of the key that was revoked
80240
+ */
80217
80241
  id: string;
80242
+ /**
80243
+ * Always true; the call throws rather than reporting a failure here
80244
+ */
80218
80245
  revoked: true;
80219
80246
  }
80220
80247
  export interface MailApikeyListInput {
80221
80248
  }
80249
+ /**
80250
+ * Active API keys for the current product, secrets omitted
80251
+ */
80222
80252
  export type MailApikeyListOutput = {
80253
+ /**
80254
+ * API key id; pass it to mail_apikey_delete to revoke the key
80255
+ */
80223
80256
  id: string;
80257
+ /**
80258
+ * Human-readable label given when the key was issued
80259
+ */
80224
80260
  name: string;
80225
- scope: string;
80261
+ /**
80262
+ * Permission scope: full_access can call every mail tool, sending_access can only send email
80263
+ */
80264
+ scope: ("full_access" | "sending_access");
80265
+ /**
80266
+ * Opening characters of the secret, so a key can be recognised in a log or a header
80267
+ */
80226
80268
  prefix: string;
80269
+ /**
80270
+ * Sending domain this key is locked to; null if it may send from any verified domain
80271
+ */
80227
80272
  domainId: (string | null);
80273
+ /**
80274
+ * When the key was issued (ISO 8601 UTC)
80275
+ */
80228
80276
  createdAt: string;
80229
80277
  }[];
80230
80278
  export interface MailAudienceCreateInput {
@@ -80234,9 +80282,21 @@ export interface MailAudienceCreateInput {
80234
80282
  name: string;
80235
80283
  }
80236
80284
  export interface MailAudienceCreateOutput {
80285
+ /**
80286
+ * Audience id
80287
+ */
80237
80288
  id: string;
80289
+ /**
80290
+ * Human label for the audience
80291
+ */
80238
80292
  name: string;
80293
+ /**
80294
+ * When the audience was created (ISO 8601 UTC)
80295
+ */
80239
80296
  createdAt: string;
80297
+ /**
80298
+ * When the audience was last modified (ISO 8601 UTC)
80299
+ */
80240
80300
  updatedAt: string;
80241
80301
  }
80242
80302
  export interface MailAudienceDeleteInput {
@@ -80246,6 +80306,9 @@ export interface MailAudienceDeleteInput {
80246
80306
  id: string;
80247
80307
  }
80248
80308
  export interface MailAudienceDeleteOutput {
80309
+ /**
80310
+ * True once the audience and its contacts are gone
80311
+ */
80249
80312
  deleted: boolean;
80250
80313
  }
80251
80314
  export interface MailAudienceGetInput {
@@ -80255,17 +80318,41 @@ export interface MailAudienceGetInput {
80255
80318
  id: string;
80256
80319
  }
80257
80320
  export interface MailAudienceGetOutput {
80321
+ /**
80322
+ * Audience id
80323
+ */
80258
80324
  id: string;
80325
+ /**
80326
+ * Human label for the audience
80327
+ */
80259
80328
  name: string;
80329
+ /**
80330
+ * When the audience was created (ISO 8601 UTC)
80331
+ */
80260
80332
  createdAt: string;
80333
+ /**
80334
+ * When the audience was last modified (ISO 8601 UTC)
80335
+ */
80261
80336
  updatedAt: string;
80262
80337
  }
80263
80338
  export interface MailAudienceListInput {
80264
80339
  }
80265
80340
  export type MailAudienceListOutput = {
80341
+ /**
80342
+ * Audience id
80343
+ */
80266
80344
  id: string;
80345
+ /**
80346
+ * Human label for the audience
80347
+ */
80267
80348
  name: string;
80349
+ /**
80350
+ * When the audience was created (ISO 8601 UTC)
80351
+ */
80268
80352
  createdAt: string;
80353
+ /**
80354
+ * When the audience was last modified (ISO 8601 UTC)
80355
+ */
80269
80356
  updatedAt: string;
80270
80357
  }[];
80271
80358
  export interface MailAudienceUpdateInput {
@@ -80279,219 +80366,708 @@ export interface MailAudienceUpdateInput {
80279
80366
  name?: string;
80280
80367
  }
80281
80368
  export interface MailAudienceUpdateOutput {
80369
+ /**
80370
+ * Audience id
80371
+ */
80282
80372
  id: string;
80373
+ /**
80374
+ * Human label for the audience
80375
+ */
80283
80376
  name: string;
80377
+ /**
80378
+ * When the audience was created (ISO 8601 UTC)
80379
+ */
80284
80380
  createdAt: string;
80381
+ /**
80382
+ * When the audience was last modified (ISO 8601 UTC)
80383
+ */
80285
80384
  updatedAt: string;
80286
80385
  }
80287
80386
  export interface MailBroadcastCancelInput {
80387
+ /**
80388
+ * Broadcast id
80389
+ */
80288
80390
  id: string;
80289
80391
  }
80290
80392
  export interface MailBroadcastCancelOutput {
80393
+ /**
80394
+ * Broadcast id
80395
+ */
80291
80396
  id: string;
80397
+ /**
80398
+ * Sender the messages are sent as
80399
+ */
80292
80400
  from: string;
80401
+ /**
80402
+ * Inline HTML body; null when a template supplies it
80403
+ */
80293
80404
  html: (string | null);
80405
+ /**
80406
+ * Internal label — never shown to recipients
80407
+ */
80294
80408
  name: string;
80409
+ /**
80410
+ * Inline plain-text body; null when a template supplies it
80411
+ */
80295
80412
  text: (string | null);
80413
+ /**
80414
+ * When the last message left; null until sending finishes
80415
+ */
80296
80416
  sentAt: (string | null);
80297
- status: string;
80417
+ /**
80418
+ * Lifecycle state: draft (editable), queued (fanned out, sending), sent, failed, canceled
80419
+ */
80420
+ status: ("draft" | "queued" | "sent" | "failed" | "canceled");
80421
+ /**
80422
+ * Custom MIME headers added to every message
80423
+ */
80298
80424
  headers: {
80299
80425
  [k: string]: string;
80300
80426
  };
80427
+ /**
80428
+ * Reply-To addresses; empty when replies go to `from`
80429
+ */
80301
80430
  replyTo: string[];
80431
+ /**
80432
+ * Subject line for inline content; null when a template supplies it
80433
+ */
80302
80434
  subject: (string | null);
80435
+ /**
80436
+ * When the broadcast was queued; null while it is a draft
80437
+ */
80303
80438
  queuedAt: (string | null);
80439
+ /**
80440
+ * When the broadcast was created
80441
+ */
80304
80442
  createdAt: string;
80443
+ /**
80444
+ * Why the broadcast failed; null unless status is failed
80445
+ */
80305
80446
  lastError: (string | null);
80447
+ /**
80448
+ * Product the broadcast belongs to
80449
+ */
80306
80450
  productId: string;
80451
+ /**
80452
+ * When the broadcast was last modified
80453
+ */
80307
80454
  updatedAt: string;
80308
- variables?: unknown;
80455
+ /**
80456
+ * Values passed to the template variables; {} for inline content
80457
+ */
80458
+ variables: ({
80459
+ [k: string]: unknown;
80460
+ } | null);
80461
+ /**
80462
+ * Audience whose contacts this broadcast is sent to
80463
+ */
80309
80464
  audienceId: string;
80465
+ /**
80466
+ * Template rendered for every recipient; null for inline content
80467
+ */
80310
80468
  templateId: (string | null);
80469
+ /**
80470
+ * Contacts the broadcast fanned out to; 0 while it is still a draft
80471
+ */
80311
80472
  recipientCount: number;
80312
80473
  }
80313
80474
  export interface MailBroadcastCreateInput {
80475
+ /**
80476
+ * Sender on a verified domain, e.g. "Name <you@your-domain.com>"
80477
+ */
80314
80478
  from: string;
80479
+ /**
80480
+ * HTML body. Inline content only — forbidden with a template.
80481
+ */
80315
80482
  html?: string;
80483
+ /**
80484
+ * Internal label for the broadcast — never shown to recipients
80485
+ */
80316
80486
  name: string;
80487
+ /**
80488
+ * Plain-text body. Inline content only — forbidden with a template.
80489
+ */
80317
80490
  text?: string;
80491
+ /**
80492
+ * Custom MIME headers added to every message. Defaults to {}.
80493
+ */
80318
80494
  headers?: {
80319
80495
  [k: string]: string;
80320
80496
  };
80497
+ /**
80498
+ * Reply-To addresses. Defaults to [] — replies go to `from`.
80499
+ */
80321
80500
  replyTo?: string[];
80501
+ /**
80502
+ * Subject line, capped at the RFC-5322 line limit. Required with inline content, forbidden with a template.
80503
+ */
80322
80504
  subject?: string;
80505
+ /**
80506
+ * Send by reference to a published template instead of inline content
80507
+ */
80323
80508
  template?: {
80509
+ /**
80510
+ * Published template id to render for every recipient
80511
+ */
80324
80512
  id: string;
80513
+ /**
80514
+ * Values for the template variables, the same for every recipient. Defaults to {}.
80515
+ */
80325
80516
  variables?: {
80326
80517
  [k: string]: (string | number | boolean);
80327
80518
  };
80328
80519
  };
80520
+ /**
80521
+ * Audience whose subscribed contacts receive this broadcast
80522
+ */
80329
80523
  audienceId: string;
80330
80524
  }
80331
80525
  export interface MailBroadcastCreateOutput {
80526
+ /**
80527
+ * Broadcast id
80528
+ */
80332
80529
  id: string;
80530
+ /**
80531
+ * Sender the messages are sent as
80532
+ */
80333
80533
  from: string;
80534
+ /**
80535
+ * Inline HTML body; null when a template supplies it
80536
+ */
80334
80537
  html: (string | null);
80538
+ /**
80539
+ * Internal label — never shown to recipients
80540
+ */
80335
80541
  name: string;
80542
+ /**
80543
+ * Inline plain-text body; null when a template supplies it
80544
+ */
80336
80545
  text: (string | null);
80546
+ /**
80547
+ * When the last message left; null until sending finishes
80548
+ */
80337
80549
  sentAt: (string | null);
80338
- status: string;
80550
+ /**
80551
+ * Lifecycle state: draft (editable), queued (fanned out, sending), sent, failed, canceled
80552
+ */
80553
+ status: ("draft" | "queued" | "sent" | "failed" | "canceled");
80554
+ /**
80555
+ * Custom MIME headers added to every message
80556
+ */
80339
80557
  headers: {
80340
80558
  [k: string]: string;
80341
80559
  };
80560
+ /**
80561
+ * Reply-To addresses; empty when replies go to `from`
80562
+ */
80342
80563
  replyTo: string[];
80564
+ /**
80565
+ * Subject line for inline content; null when a template supplies it
80566
+ */
80343
80567
  subject: (string | null);
80568
+ /**
80569
+ * When the broadcast was queued; null while it is a draft
80570
+ */
80344
80571
  queuedAt: (string | null);
80572
+ /**
80573
+ * When the broadcast was created
80574
+ */
80345
80575
  createdAt: string;
80576
+ /**
80577
+ * Why the broadcast failed; null unless status is failed
80578
+ */
80346
80579
  lastError: (string | null);
80580
+ /**
80581
+ * Product the broadcast belongs to
80582
+ */
80347
80583
  productId: string;
80584
+ /**
80585
+ * When the broadcast was last modified
80586
+ */
80348
80587
  updatedAt: string;
80349
- variables?: unknown;
80588
+ /**
80589
+ * Values passed to the template variables; {} for inline content
80590
+ */
80591
+ variables: ({
80592
+ [k: string]: unknown;
80593
+ } | null);
80594
+ /**
80595
+ * Audience whose contacts this broadcast is sent to
80596
+ */
80350
80597
  audienceId: string;
80598
+ /**
80599
+ * Template rendered for every recipient; null for inline content
80600
+ */
80351
80601
  templateId: (string | null);
80602
+ /**
80603
+ * Contacts the broadcast fanned out to; 0 while it is still a draft
80604
+ */
80352
80605
  recipientCount: number;
80353
80606
  }
80354
80607
  export interface MailBroadcastDeleteInput {
80608
+ /**
80609
+ * Broadcast id
80610
+ */
80355
80611
  id: string;
80356
80612
  }
80357
80613
  export interface MailBroadcastDeleteOutput {
80614
+ /**
80615
+ * Id of the deleted broadcast
80616
+ */
80358
80617
  id: string;
80618
+ /**
80619
+ * True when the broadcast was removed
80620
+ */
80359
80621
  deleted: boolean;
80360
80622
  }
80361
80623
  export interface MailBroadcastGetInput {
80624
+ /**
80625
+ * Broadcast id
80626
+ */
80362
80627
  id: string;
80363
80628
  }
80364
80629
  export interface MailBroadcastGetOutput {
80630
+ /**
80631
+ * Broadcast id
80632
+ */
80365
80633
  id: string;
80634
+ /**
80635
+ * Sender the messages are sent as
80636
+ */
80366
80637
  from: string;
80638
+ /**
80639
+ * Inline HTML body; null when a template supplies it
80640
+ */
80367
80641
  html: (string | null);
80642
+ /**
80643
+ * Internal label — never shown to recipients
80644
+ */
80368
80645
  name: string;
80646
+ /**
80647
+ * Inline plain-text body; null when a template supplies it
80648
+ */
80369
80649
  text: (string | null);
80650
+ /**
80651
+ * When the last message left; null until sending finishes
80652
+ */
80370
80653
  sentAt: (string | null);
80371
- status: string;
80654
+ /**
80655
+ * Lifecycle state: draft (editable), queued (fanned out, sending), sent, failed, canceled
80656
+ */
80657
+ status: ("draft" | "queued" | "sent" | "failed" | "canceled");
80658
+ /**
80659
+ * Custom MIME headers added to every message
80660
+ */
80372
80661
  headers: {
80373
80662
  [k: string]: string;
80374
80663
  };
80664
+ /**
80665
+ * Reply-To addresses; empty when replies go to `from`
80666
+ */
80375
80667
  replyTo: string[];
80668
+ /**
80669
+ * Subject line for inline content; null when a template supplies it
80670
+ */
80376
80671
  subject: (string | null);
80672
+ /**
80673
+ * When the broadcast was queued; null while it is a draft
80674
+ */
80377
80675
  queuedAt: (string | null);
80676
+ /**
80677
+ * When the broadcast was created
80678
+ */
80378
80679
  createdAt: string;
80680
+ /**
80681
+ * Why the broadcast failed; null unless status is failed
80682
+ */
80379
80683
  lastError: (string | null);
80684
+ /**
80685
+ * Product the broadcast belongs to
80686
+ */
80380
80687
  productId: string;
80688
+ /**
80689
+ * When the broadcast was last modified
80690
+ */
80381
80691
  updatedAt: string;
80382
- variables?: unknown;
80692
+ /**
80693
+ * Values passed to the template variables; {} for inline content
80694
+ */
80695
+ variables: ({
80696
+ [k: string]: unknown;
80697
+ } | null);
80698
+ /**
80699
+ * Audience whose contacts this broadcast is sent to
80700
+ */
80383
80701
  audienceId: string;
80702
+ /**
80703
+ * Template rendered for every recipient; null for inline content
80704
+ */
80384
80705
  templateId: (string | null);
80706
+ /**
80707
+ * Contacts the broadcast fanned out to; 0 while it is still a draft
80708
+ */
80385
80709
  recipientCount: number;
80386
80710
  }
80387
80711
  export interface MailBroadcastListInput {
80712
+ /**
80713
+ * Page size, 1-100. Defaults to 50.
80714
+ */
80388
80715
  limit?: number;
80716
+ /**
80717
+ * Opaque cursor from the previous page’s `nextCursor`. Omit for the first page.
80718
+ */
80389
80719
  cursor?: string;
80390
80720
  }
80391
80721
  export interface MailBroadcastListOutput {
80722
+ /**
80723
+ * The broadcasts on this page, newest first
80724
+ */
80392
80725
  items: {
80726
+ /**
80727
+ * Broadcast id
80728
+ */
80393
80729
  id: string;
80730
+ /**
80731
+ * Sender the messages are sent as
80732
+ */
80394
80733
  from: string;
80734
+ /**
80735
+ * Inline HTML body; null when a template supplies it
80736
+ */
80395
80737
  html: (string | null);
80738
+ /**
80739
+ * Internal label — never shown to recipients
80740
+ */
80396
80741
  name: string;
80742
+ /**
80743
+ * Inline plain-text body; null when a template supplies it
80744
+ */
80397
80745
  text: (string | null);
80746
+ /**
80747
+ * When the last message left; null until sending finishes
80748
+ */
80398
80749
  sentAt: (string | null);
80399
- status: string;
80750
+ /**
80751
+ * Lifecycle state: draft (editable), queued (fanned out, sending), sent, failed, canceled
80752
+ */
80753
+ status: ("draft" | "queued" | "sent" | "failed" | "canceled");
80754
+ /**
80755
+ * Custom MIME headers added to every message
80756
+ */
80400
80757
  headers: {
80401
80758
  [k: string]: string;
80402
80759
  };
80760
+ /**
80761
+ * Reply-To addresses; empty when replies go to `from`
80762
+ */
80403
80763
  replyTo: string[];
80764
+ /**
80765
+ * Subject line for inline content; null when a template supplies it
80766
+ */
80404
80767
  subject: (string | null);
80768
+ /**
80769
+ * When the broadcast was queued; null while it is a draft
80770
+ */
80405
80771
  queuedAt: (string | null);
80772
+ /**
80773
+ * When the broadcast was created
80774
+ */
80406
80775
  createdAt: string;
80776
+ /**
80777
+ * Why the broadcast failed; null unless status is failed
80778
+ */
80407
80779
  lastError: (string | null);
80780
+ /**
80781
+ * Product the broadcast belongs to
80782
+ */
80408
80783
  productId: string;
80784
+ /**
80785
+ * When the broadcast was last modified
80786
+ */
80409
80787
  updatedAt: string;
80410
- variables?: unknown;
80788
+ /**
80789
+ * Values passed to the template variables; {} for inline content
80790
+ */
80791
+ variables: ({
80792
+ [k: string]: unknown;
80793
+ } | null);
80794
+ /**
80795
+ * Audience whose contacts this broadcast is sent to
80796
+ */
80411
80797
  audienceId: string;
80798
+ /**
80799
+ * Template rendered for every recipient; null for inline content
80800
+ */
80412
80801
  templateId: (string | null);
80802
+ /**
80803
+ * Contacts the broadcast fanned out to; 0 while it is still a draft
80804
+ */
80413
80805
  recipientCount: number;
80414
80806
  }[];
80807
+ /**
80808
+ * Pass as `cursor` for the next page; null on the last page
80809
+ */
80415
80810
  nextCursor: (string | null);
80416
80811
  }
80417
80812
  export interface MailBroadcastQueueInput {
80813
+ /**
80814
+ * Broadcast id
80815
+ */
80418
80816
  id: string;
80419
80817
  }
80420
80818
  export interface MailBroadcastQueueOutput {
80819
+ /**
80820
+ * Broadcast id
80821
+ */
80421
80822
  id: string;
80823
+ /**
80824
+ * Sender the messages are sent as
80825
+ */
80422
80826
  from: string;
80827
+ /**
80828
+ * Inline HTML body; null when a template supplies it
80829
+ */
80423
80830
  html: (string | null);
80831
+ /**
80832
+ * Internal label — never shown to recipients
80833
+ */
80424
80834
  name: string;
80835
+ /**
80836
+ * Inline plain-text body; null when a template supplies it
80837
+ */
80425
80838
  text: (string | null);
80839
+ /**
80840
+ * When the last message left; null until sending finishes
80841
+ */
80426
80842
  sentAt: (string | null);
80427
- status: string;
80843
+ /**
80844
+ * Lifecycle state: draft (editable), queued (fanned out, sending), sent, failed, canceled
80845
+ */
80846
+ status: ("draft" | "queued" | "sent" | "failed" | "canceled");
80847
+ /**
80848
+ * Custom MIME headers added to every message
80849
+ */
80428
80850
  headers: {
80429
80851
  [k: string]: string;
80430
80852
  };
80853
+ /**
80854
+ * Reply-To addresses; empty when replies go to `from`
80855
+ */
80431
80856
  replyTo: string[];
80857
+ /**
80858
+ * Subject line for inline content; null when a template supplies it
80859
+ */
80432
80860
  subject: (string | null);
80861
+ /**
80862
+ * When the broadcast was queued; null while it is a draft
80863
+ */
80433
80864
  queuedAt: (string | null);
80865
+ /**
80866
+ * When the broadcast was created
80867
+ */
80434
80868
  createdAt: string;
80869
+ /**
80870
+ * Why the broadcast failed; null unless status is failed
80871
+ */
80435
80872
  lastError: (string | null);
80873
+ /**
80874
+ * Product the broadcast belongs to
80875
+ */
80436
80876
  productId: string;
80877
+ /**
80878
+ * When the broadcast was last modified
80879
+ */
80437
80880
  updatedAt: string;
80438
- variables?: unknown;
80881
+ /**
80882
+ * Values passed to the template variables; {} for inline content
80883
+ */
80884
+ variables: ({
80885
+ [k: string]: unknown;
80886
+ } | null);
80887
+ /**
80888
+ * Audience whose contacts this broadcast is sent to
80889
+ */
80439
80890
  audienceId: string;
80891
+ /**
80892
+ * Template rendered for every recipient; null for inline content
80893
+ */
80440
80894
  templateId: (string | null);
80895
+ /**
80896
+ * Contacts the broadcast fanned out to; 0 while it is still a draft
80897
+ */
80441
80898
  recipientCount: number;
80442
80899
  }
80443
80900
  export interface MailBroadcastStatsInput {
80901
+ /**
80902
+ * Broadcast id
80903
+ */
80444
80904
  id: string;
80445
80905
  }
80446
80906
  export interface MailBroadcastStatsOutput {
80907
+ /**
80908
+ * Messages that could not be handed to the provider
80909
+ */
80447
80910
  failed: number;
80911
+ /**
80912
+ * Messages opened at least once, as seen by the tracking pixel
80913
+ */
80448
80914
  opened: number;
80915
+ /**
80916
+ * Messages that bounced, hard or soft
80917
+ */
80449
80918
  bounced: number;
80919
+ /**
80920
+ * Messages with at least one tracked link click
80921
+ */
80450
80922
  clicked: number;
80923
+ /**
80924
+ * Messages the receiving server accepted
80925
+ */
80451
80926
  delivered: number;
80927
+ /**
80928
+ * Contacts the broadcast fanned out to
80929
+ */
80452
80930
  recipients: number;
80931
+ /**
80932
+ * Recipients skipped because they are on the suppression list
80933
+ */
80453
80934
  suppressed: number;
80454
80935
  }
80455
80936
  export interface MailBroadcastUpdateInput {
80937
+ /**
80938
+ * Broadcast id
80939
+ */
80456
80940
  id: string;
80941
+ /**
80942
+ * Sender on a verified domain, e.g. "Name <you@your-domain.com>"
80943
+ */
80457
80944
  from?: string;
80945
+ /**
80946
+ * HTML body. Inline content only — forbidden with a template.
80947
+ */
80458
80948
  html?: string;
80949
+ /**
80950
+ * Internal label for the broadcast — never shown to recipients
80951
+ */
80459
80952
  name?: string;
80953
+ /**
80954
+ * Plain-text body. Inline content only — forbidden with a template.
80955
+ */
80460
80956
  text?: string;
80957
+ /**
80958
+ * Custom MIME headers added to every message. Defaults to {}.
80959
+ */
80461
80960
  headers?: {
80462
80961
  [k: string]: string;
80463
80962
  };
80963
+ /**
80964
+ * Reply-To addresses. Defaults to [] — replies go to `from`.
80965
+ */
80464
80966
  replyTo?: string[];
80967
+ /**
80968
+ * Subject line, capped at the RFC-5322 line limit. Required with inline content, forbidden with a template.
80969
+ */
80465
80970
  subject?: string;
80971
+ /**
80972
+ * Send by reference to a published template instead of inline content
80973
+ */
80466
80974
  template?: {
80975
+ /**
80976
+ * Published template id to render for every recipient
80977
+ */
80467
80978
  id: string;
80979
+ /**
80980
+ * Values for the template variables, the same for every recipient. Defaults to {}.
80981
+ */
80468
80982
  variables?: {
80469
80983
  [k: string]: (string | number | boolean);
80470
80984
  };
80471
80985
  };
80986
+ /**
80987
+ * Audience whose subscribed contacts receive this broadcast
80988
+ */
80472
80989
  audienceId?: string;
80473
80990
  }
80474
80991
  export interface MailBroadcastUpdateOutput {
80992
+ /**
80993
+ * Broadcast id
80994
+ */
80475
80995
  id: string;
80996
+ /**
80997
+ * Sender the messages are sent as
80998
+ */
80476
80999
  from: string;
81000
+ /**
81001
+ * Inline HTML body; null when a template supplies it
81002
+ */
80477
81003
  html: (string | null);
81004
+ /**
81005
+ * Internal label — never shown to recipients
81006
+ */
80478
81007
  name: string;
81008
+ /**
81009
+ * Inline plain-text body; null when a template supplies it
81010
+ */
80479
81011
  text: (string | null);
81012
+ /**
81013
+ * When the last message left; null until sending finishes
81014
+ */
80480
81015
  sentAt: (string | null);
80481
- status: string;
81016
+ /**
81017
+ * Lifecycle state: draft (editable), queued (fanned out, sending), sent, failed, canceled
81018
+ */
81019
+ status: ("draft" | "queued" | "sent" | "failed" | "canceled");
81020
+ /**
81021
+ * Custom MIME headers added to every message
81022
+ */
80482
81023
  headers: {
80483
81024
  [k: string]: string;
80484
81025
  };
81026
+ /**
81027
+ * Reply-To addresses; empty when replies go to `from`
81028
+ */
80485
81029
  replyTo: string[];
81030
+ /**
81031
+ * Subject line for inline content; null when a template supplies it
81032
+ */
80486
81033
  subject: (string | null);
81034
+ /**
81035
+ * When the broadcast was queued; null while it is a draft
81036
+ */
80487
81037
  queuedAt: (string | null);
81038
+ /**
81039
+ * When the broadcast was created
81040
+ */
80488
81041
  createdAt: string;
81042
+ /**
81043
+ * Why the broadcast failed; null unless status is failed
81044
+ */
80489
81045
  lastError: (string | null);
81046
+ /**
81047
+ * Product the broadcast belongs to
81048
+ */
80490
81049
  productId: string;
81050
+ /**
81051
+ * When the broadcast was last modified
81052
+ */
80491
81053
  updatedAt: string;
80492
- variables?: unknown;
81054
+ /**
81055
+ * Values passed to the template variables; {} for inline content
81056
+ */
81057
+ variables: ({
81058
+ [k: string]: unknown;
81059
+ } | null);
81060
+ /**
81061
+ * Audience whose contacts this broadcast is sent to
81062
+ */
80493
81063
  audienceId: string;
81064
+ /**
81065
+ * Template rendered for every recipient; null for inline content
81066
+ */
80494
81067
  templateId: (string | null);
81068
+ /**
81069
+ * Contacts the broadcast fanned out to; 0 while it is still a draft
81070
+ */
80495
81071
  recipientCount: number;
80496
81072
  }
80497
81073
  export interface MailContactCreateInput {
@@ -80515,12 +81091,30 @@ export interface MailContactCreateInput {
80515
81091
  unsubscribed?: boolean;
80516
81092
  }
80517
81093
  export interface MailContactCreateOutput {
81094
+ /**
81095
+ * Contact id
81096
+ */
80518
81097
  id: string;
81098
+ /**
81099
+ * Contact email address, normalized to lowercase
81100
+ */
80519
81101
  email: string;
81102
+ /**
81103
+ * When the contact was created (ISO 8601 UTC)
81104
+ */
80520
81105
  createdAt: string;
81106
+ /**
81107
+ * When the contact was last modified (ISO 8601 UTC)
81108
+ */
80521
81109
  updatedAt: string;
81110
+ /**
81111
+ * Audience the contact belongs to
81112
+ */
80522
81113
  audienceId: string;
80523
81114
  properties?: unknown;
81115
+ /**
81116
+ * Marketing opt-out flag for this audience
81117
+ */
80524
81118
  unsubscribed: boolean;
80525
81119
  }
80526
81120
  export interface MailContactDeleteInput {
@@ -80534,6 +81128,9 @@ export interface MailContactDeleteInput {
80534
81128
  audience_id: string;
80535
81129
  }
80536
81130
  export interface MailContactDeleteOutput {
81131
+ /**
81132
+ * True once the contact is gone
81133
+ */
80537
81134
  deleted: boolean;
80538
81135
  }
80539
81136
  export interface MailContactGetInput {
@@ -80547,12 +81144,30 @@ export interface MailContactGetInput {
80547
81144
  audience_id: string;
80548
81145
  }
80549
81146
  export interface MailContactGetOutput {
81147
+ /**
81148
+ * Contact id
81149
+ */
80550
81150
  id: string;
81151
+ /**
81152
+ * Contact email address, normalized to lowercase
81153
+ */
80551
81154
  email: string;
81155
+ /**
81156
+ * When the contact was created (ISO 8601 UTC)
81157
+ */
80552
81158
  createdAt: string;
81159
+ /**
81160
+ * When the contact was last modified (ISO 8601 UTC)
81161
+ */
80553
81162
  updatedAt: string;
81163
+ /**
81164
+ * Audience the contact belongs to
81165
+ */
80554
81166
  audienceId: string;
80555
81167
  properties?: unknown;
81168
+ /**
81169
+ * Marketing opt-out flag for this audience
81170
+ */
80556
81171
  unsubscribed: boolean;
80557
81172
  }
80558
81173
  export interface MailContactListInput {
@@ -80561,7 +81176,7 @@ export interface MailContactListInput {
80561
81176
  */
80562
81177
  limit?: number;
80563
81178
  /**
80564
- * Opaque pagination cursor from a prior page
81179
+ * Opaque pagination cursor from a prior page; omit for the first page
80565
81180
  */
80566
81181
  cursor?: string;
80567
81182
  /**
@@ -80574,15 +81189,39 @@ export interface MailContactListInput {
80574
81189
  unsubscribed?: (("true" | "false") | boolean);
80575
81190
  }
80576
81191
  export interface MailContactListOutput {
81192
+ /**
81193
+ * Contacts on this page, newest first
81194
+ */
80577
81195
  data: {
81196
+ /**
81197
+ * Contact id
81198
+ */
80578
81199
  id: string;
81200
+ /**
81201
+ * Contact email address, normalized to lowercase
81202
+ */
80579
81203
  email: string;
81204
+ /**
81205
+ * When the contact was created (ISO 8601 UTC)
81206
+ */
80580
81207
  createdAt: string;
81208
+ /**
81209
+ * When the contact was last modified (ISO 8601 UTC)
81210
+ */
80581
81211
  updatedAt: string;
81212
+ /**
81213
+ * Audience the contact belongs to
81214
+ */
80582
81215
  audienceId: string;
80583
81216
  properties?: unknown;
81217
+ /**
81218
+ * Marketing opt-out flag for this audience
81219
+ */
80584
81220
  unsubscribed: boolean;
80585
81221
  }[];
81222
+ /**
81223
+ * Cursor for the next page; null on the last page
81224
+ */
80586
81225
  nextCursor: (string | null);
80587
81226
  }
80588
81227
  export interface MailContactUpdateInput {
@@ -80606,269 +81245,794 @@ export interface MailContactUpdateInput {
80606
81245
  unsubscribed?: boolean;
80607
81246
  }
80608
81247
  export interface MailContactUpdateOutput {
81248
+ /**
81249
+ * Contact id
81250
+ */
80609
81251
  id: string;
81252
+ /**
81253
+ * Contact email address, normalized to lowercase
81254
+ */
80610
81255
  email: string;
81256
+ /**
81257
+ * When the contact was created (ISO 8601 UTC)
81258
+ */
80611
81259
  createdAt: string;
81260
+ /**
81261
+ * When the contact was last modified (ISO 8601 UTC)
81262
+ */
80612
81263
  updatedAt: string;
81264
+ /**
81265
+ * Audience the contact belongs to
81266
+ */
80613
81267
  audienceId: string;
80614
81268
  properties?: unknown;
81269
+ /**
81270
+ * Marketing opt-out flag for this audience
81271
+ */
80615
81272
  unsubscribed: boolean;
80616
81273
  }
80617
81274
  export interface MailDomainAllowedListInput {
80618
81275
  }
81276
+ /**
81277
+ * Apex domains this product may register sending domains under
81278
+ */
80619
81279
  export type MailDomainAllowedListOutput = {
80620
- mode: string;
81280
+ /**
81281
+ * Who operates DNS under this apex: managed if the platform publishes the records, external if you do
81282
+ */
81283
+ mode: ("external" | "managed");
81284
+ /**
81285
+ * The apex domain itself, e.g. "example.com"
81286
+ */
80621
81287
  domain: string;
81288
+ /**
81289
+ * Governance domain id — pass it to the governance console, not to mail_domain_get
81290
+ */
80622
81291
  domainId: string;
81292
+ /**
81293
+ * How many extensions currently send under this apex
81294
+ */
80623
81295
  extensionCount: number;
80624
81296
  }[];
80625
81297
  export interface MailDomainCreateInput {
80626
81298
  /**
80627
- * The sending domain to register, e.g. "example.com"
81299
+ * The sending domain to register, e.g. "example.com"; it must sit under an apex this product is allowed to use (see mail_domain_allowed_list)
80628
81300
  */
80629
81301
  name: string;
80630
81302
  /**
80631
- * AWS region for the SES identity (data residency); immutable after create
81303
+ * AWS region for the SES identity, which fixes data residency (default "eu-north-1"); immutable once the domain is created
80632
81304
  */
80633
81305
  region?: string;
80634
81306
  }
80635
81307
  export interface MailDomainCreateOutput {
81308
+ /**
81309
+ * Sending domain id
81310
+ */
80636
81311
  id: string;
80637
- tls: string;
81312
+ /**
81313
+ * TLS policy for delivery: opportunistic falls back to plaintext if the recipient offers no TLS, enforced fails the send instead
81314
+ */
81315
+ tls: ("opportunistic" | "enforced");
81316
+ /**
81317
+ * Governed apex this domain sits under; null if it is not governed
81318
+ */
80638
81319
  apex: (string | null);
80639
- mode: (string | null);
81320
+ /**
81321
+ * Who operates DNS: managed if the platform publishes the records for you, external if you publish them yourself; null if the domain is not governed
81322
+ */
81323
+ mode: (("external" | "managed") | null);
81324
+ /**
81325
+ * The sending domain itself, e.g. "example.com"
81326
+ */
80640
81327
  name: string;
81328
+ /**
81329
+ * True only when the domain is verified AND its governance binding is active — the condition for sending from it
81330
+ */
80641
81331
  active: boolean;
81332
+ /**
81333
+ * AWS region hosting the SES identity, which fixes data residency; set at create time and immutable
81334
+ */
80642
81335
  region: string;
80643
- status: string;
81336
+ /**
81337
+ * SES verification state: not_started before the first check, pending while DNS propagates, verified once sending is allowed, failed or temporary_failure when SES could not verify
81338
+ */
81339
+ status: ("not_started" | "pending" | "verified" | "failed" | "temporary_failure");
81340
+ /**
81341
+ * DNS records to publish for this domain, each with its last-seen resolution status
81342
+ */
80644
81343
  records: {
81344
+ /**
81345
+ * Fully-qualified host the record is published at
81346
+ */
80645
81347
  name: string;
80646
- type: string;
81348
+ /**
81349
+ * DNS record type to publish
81350
+ */
81351
+ type: ("CNAME" | "TXT" | "MX");
81352
+ /**
81353
+ * Value the record must resolve to
81354
+ */
80647
81355
  value: string;
80648
- purpose: string;
81356
+ /**
81357
+ * What the record is for: dkim signs outgoing mail, spf authorises the sender, return-path-mx routes bounces back, dmarc states the policy
81358
+ */
81359
+ purpose: ("dkim" | "spf" | "return-path-mx" | "dmarc");
81360
+ /**
81361
+ * MX priority; present only on MX records
81362
+ */
80649
81363
  priority?: number;
81364
+ /**
81365
+ * True if the domain cannot verify without this record; false if it is optional
81366
+ */
80650
81367
  required: boolean;
81368
+ /**
81369
+ * True if the record was found in DNS at the last check; absent when no check has run
81370
+ */
80651
81371
  resolved?: boolean;
80652
81372
  }[];
81373
+ /**
81374
+ * When the domain was registered (ISO 8601 UTC)
81375
+ */
80653
81376
  createdAt: string;
81377
+ /**
81378
+ * When the domain record was last changed (ISO 8601 UTC)
81379
+ */
80654
81380
  updatedAt: string;
81381
+ /**
81382
+ * When the domain became verified (ISO 8601 UTC); null while it is not
81383
+ */
80655
81384
  verifiedAt: (string | null);
81385
+ /**
81386
+ * Human-readable steps still outstanding before this domain can send
81387
+ */
80656
81388
  instructions: string[];
81389
+ /**
81390
+ * True if a 1x1 pixel is injected into outgoing mail to record opens
81391
+ */
80657
81392
  openTracking: boolean;
80658
- bindingStatus: string;
81393
+ /**
81394
+ * Governance binding state: pending while it is being granted, active once the domain may be used, failed if it could not be granted
81395
+ */
81396
+ bindingStatus: ("pending" | "active" | "failed");
81397
+ /**
81398
+ * True if links are rewritten through the tracking host to record clicks
81399
+ */
80659
81400
  clickTracking: boolean;
81401
+ /**
81402
+ * Host used as the bounce (Return-Path) address, so bounces come back to this product
81403
+ */
80660
81404
  customReturnPath: string;
81405
+ /**
81406
+ * Host serving the click redirect and the open pixel; null if tracking is off
81407
+ */
80661
81408
  trackingSubdomain: (string | null);
81409
+ /**
81410
+ * Id of the governance domain this one is registered under; null if it is not governed
81411
+ */
80662
81412
  governanceDomainId: (string | null);
81413
+ /**
81414
+ * Id of the binding between this product and the governance domain; null if unbound
81415
+ */
80663
81416
  governanceBindingId: (string | null);
81417
+ /**
81418
+ * When verification was first requested (ISO 8601 UTC)
81419
+ */
80664
81420
  verificationStartedAt: string;
81421
+ /**
81422
+ * When DNS and SES were last checked (ISO 8601 UTC); null if no check has run yet
81423
+ */
80665
81424
  lastVerificationCheckAt: (string | null);
80666
81425
  }
80667
81426
  export interface MailDomainDeleteInput {
80668
81427
  /**
80669
- * Domain id to delete
81428
+ * Sending domain to delete, along with its SES identity
80670
81429
  */
80671
81430
  id: string;
80672
81431
  }
80673
81432
  export interface MailDomainDeleteOutput {
81433
+ /**
81434
+ * True once the domain and its SES identity are gone
81435
+ */
80674
81436
  deleted: boolean;
80675
81437
  }
80676
81438
  export interface MailDomainGetInput {
80677
81439
  /**
80678
- * Domain id
81440
+ * Sending domain id
80679
81441
  */
80680
81442
  id: string;
80681
81443
  }
80682
81444
  export interface MailDomainGetOutput {
81445
+ /**
81446
+ * Sending domain id
81447
+ */
80683
81448
  id: string;
80684
- tls: string;
81449
+ /**
81450
+ * TLS policy for delivery: opportunistic falls back to plaintext if the recipient offers no TLS, enforced fails the send instead
81451
+ */
81452
+ tls: ("opportunistic" | "enforced");
81453
+ /**
81454
+ * Governed apex this domain sits under; null if it is not governed
81455
+ */
80685
81456
  apex: (string | null);
80686
- mode: (string | null);
81457
+ /**
81458
+ * Who operates DNS: managed if the platform publishes the records for you, external if you publish them yourself; null if the domain is not governed
81459
+ */
81460
+ mode: (("external" | "managed") | null);
81461
+ /**
81462
+ * The sending domain itself, e.g. "example.com"
81463
+ */
80687
81464
  name: string;
81465
+ /**
81466
+ * True only when the domain is verified AND its governance binding is active — the condition for sending from it
81467
+ */
80688
81468
  active: boolean;
81469
+ /**
81470
+ * AWS region hosting the SES identity, which fixes data residency; set at create time and immutable
81471
+ */
80689
81472
  region: string;
80690
- status: string;
81473
+ /**
81474
+ * SES verification state: not_started before the first check, pending while DNS propagates, verified once sending is allowed, failed or temporary_failure when SES could not verify
81475
+ */
81476
+ status: ("not_started" | "pending" | "verified" | "failed" | "temporary_failure");
81477
+ /**
81478
+ * DNS records to publish for this domain, each with its last-seen resolution status
81479
+ */
80691
81480
  records: {
81481
+ /**
81482
+ * Fully-qualified host the record is published at
81483
+ */
80692
81484
  name: string;
80693
- type: string;
81485
+ /**
81486
+ * DNS record type to publish
81487
+ */
81488
+ type: ("CNAME" | "TXT" | "MX");
81489
+ /**
81490
+ * Value the record must resolve to
81491
+ */
80694
81492
  value: string;
80695
- purpose: string;
81493
+ /**
81494
+ * What the record is for: dkim signs outgoing mail, spf authorises the sender, return-path-mx routes bounces back, dmarc states the policy
81495
+ */
81496
+ purpose: ("dkim" | "spf" | "return-path-mx" | "dmarc");
81497
+ /**
81498
+ * MX priority; present only on MX records
81499
+ */
80696
81500
  priority?: number;
81501
+ /**
81502
+ * True if the domain cannot verify without this record; false if it is optional
81503
+ */
80697
81504
  required: boolean;
81505
+ /**
81506
+ * True if the record was found in DNS at the last check; absent when no check has run
81507
+ */
80698
81508
  resolved?: boolean;
80699
81509
  }[];
81510
+ /**
81511
+ * When the domain was registered (ISO 8601 UTC)
81512
+ */
80700
81513
  createdAt: string;
81514
+ /**
81515
+ * When the domain record was last changed (ISO 8601 UTC)
81516
+ */
80701
81517
  updatedAt: string;
81518
+ /**
81519
+ * When the domain became verified (ISO 8601 UTC); null while it is not
81520
+ */
80702
81521
  verifiedAt: (string | null);
81522
+ /**
81523
+ * Human-readable steps still outstanding before this domain can send
81524
+ */
80703
81525
  instructions: string[];
81526
+ /**
81527
+ * True if a 1x1 pixel is injected into outgoing mail to record opens
81528
+ */
80704
81529
  openTracking: boolean;
80705
- bindingStatus: string;
81530
+ /**
81531
+ * Governance binding state: pending while it is being granted, active once the domain may be used, failed if it could not be granted
81532
+ */
81533
+ bindingStatus: ("pending" | "active" | "failed");
81534
+ /**
81535
+ * True if links are rewritten through the tracking host to record clicks
81536
+ */
80706
81537
  clickTracking: boolean;
81538
+ /**
81539
+ * Host used as the bounce (Return-Path) address, so bounces come back to this product
81540
+ */
80707
81541
  customReturnPath: string;
81542
+ /**
81543
+ * Host serving the click redirect and the open pixel; null if tracking is off
81544
+ */
80708
81545
  trackingSubdomain: (string | null);
81546
+ /**
81547
+ * Id of the governance domain this one is registered under; null if it is not governed
81548
+ */
80709
81549
  governanceDomainId: (string | null);
81550
+ /**
81551
+ * Id of the binding between this product and the governance domain; null if unbound
81552
+ */
80710
81553
  governanceBindingId: (string | null);
81554
+ /**
81555
+ * When verification was first requested (ISO 8601 UTC)
81556
+ */
80711
81557
  verificationStartedAt: string;
81558
+ /**
81559
+ * When DNS and SES were last checked (ISO 8601 UTC); null if no check has run yet
81560
+ */
80712
81561
  lastVerificationCheckAt: (string | null);
80713
81562
  }
80714
81563
  export interface MailDomainListInput {
80715
81564
  }
81565
+ /**
81566
+ * Sending domains registered for the current product
81567
+ */
80716
81568
  export type MailDomainListOutput = {
81569
+ /**
81570
+ * Sending domain id
81571
+ */
80717
81572
  id: string;
80718
- tls: string;
81573
+ /**
81574
+ * TLS policy for delivery: opportunistic falls back to plaintext if the recipient offers no TLS, enforced fails the send instead
81575
+ */
81576
+ tls: ("opportunistic" | "enforced");
81577
+ /**
81578
+ * Governed apex this domain sits under; null if it is not governed
81579
+ */
80719
81580
  apex: (string | null);
80720
- mode: (string | null);
81581
+ /**
81582
+ * Who operates DNS: managed if the platform publishes the records for you, external if you publish them yourself; null if the domain is not governed
81583
+ */
81584
+ mode: (("external" | "managed") | null);
81585
+ /**
81586
+ * The sending domain itself, e.g. "example.com"
81587
+ */
80721
81588
  name: string;
81589
+ /**
81590
+ * True only when the domain is verified AND its governance binding is active — the condition for sending from it
81591
+ */
80722
81592
  active: boolean;
81593
+ /**
81594
+ * AWS region hosting the SES identity, which fixes data residency; set at create time and immutable
81595
+ */
80723
81596
  region: string;
80724
- status: string;
81597
+ /**
81598
+ * SES verification state: not_started before the first check, pending while DNS propagates, verified once sending is allowed, failed or temporary_failure when SES could not verify
81599
+ */
81600
+ status: ("not_started" | "pending" | "verified" | "failed" | "temporary_failure");
81601
+ /**
81602
+ * DNS records to publish for this domain, each with its last-seen resolution status
81603
+ */
80725
81604
  records: {
81605
+ /**
81606
+ * Fully-qualified host the record is published at
81607
+ */
80726
81608
  name: string;
80727
- type: string;
81609
+ /**
81610
+ * DNS record type to publish
81611
+ */
81612
+ type: ("CNAME" | "TXT" | "MX");
81613
+ /**
81614
+ * Value the record must resolve to
81615
+ */
80728
81616
  value: string;
80729
- purpose: string;
81617
+ /**
81618
+ * What the record is for: dkim signs outgoing mail, spf authorises the sender, return-path-mx routes bounces back, dmarc states the policy
81619
+ */
81620
+ purpose: ("dkim" | "spf" | "return-path-mx" | "dmarc");
81621
+ /**
81622
+ * MX priority; present only on MX records
81623
+ */
80730
81624
  priority?: number;
81625
+ /**
81626
+ * True if the domain cannot verify without this record; false if it is optional
81627
+ */
80731
81628
  required: boolean;
81629
+ /**
81630
+ * True if the record was found in DNS at the last check; absent when no check has run
81631
+ */
80732
81632
  resolved?: boolean;
80733
81633
  }[];
81634
+ /**
81635
+ * When the domain was registered (ISO 8601 UTC)
81636
+ */
80734
81637
  createdAt: string;
81638
+ /**
81639
+ * When the domain record was last changed (ISO 8601 UTC)
81640
+ */
80735
81641
  updatedAt: string;
81642
+ /**
81643
+ * When the domain became verified (ISO 8601 UTC); null while it is not
81644
+ */
80736
81645
  verifiedAt: (string | null);
81646
+ /**
81647
+ * Human-readable steps still outstanding before this domain can send
81648
+ */
80737
81649
  instructions: string[];
81650
+ /**
81651
+ * True if a 1x1 pixel is injected into outgoing mail to record opens
81652
+ */
80738
81653
  openTracking: boolean;
80739
- bindingStatus: string;
81654
+ /**
81655
+ * Governance binding state: pending while it is being granted, active once the domain may be used, failed if it could not be granted
81656
+ */
81657
+ bindingStatus: ("pending" | "active" | "failed");
81658
+ /**
81659
+ * True if links are rewritten through the tracking host to record clicks
81660
+ */
80740
81661
  clickTracking: boolean;
81662
+ /**
81663
+ * Host used as the bounce (Return-Path) address, so bounces come back to this product
81664
+ */
80741
81665
  customReturnPath: string;
81666
+ /**
81667
+ * Host serving the click redirect and the open pixel; null if tracking is off
81668
+ */
80742
81669
  trackingSubdomain: (string | null);
81670
+ /**
81671
+ * Id of the governance domain this one is registered under; null if it is not governed
81672
+ */
80743
81673
  governanceDomainId: (string | null);
81674
+ /**
81675
+ * Id of the binding between this product and the governance domain; null if unbound
81676
+ */
80744
81677
  governanceBindingId: (string | null);
81678
+ /**
81679
+ * When verification was first requested (ISO 8601 UTC)
81680
+ */
80745
81681
  verificationStartedAt: string;
81682
+ /**
81683
+ * When DNS and SES were last checked (ISO 8601 UTC); null if no check has run yet
81684
+ */
80746
81685
  lastVerificationCheckAt: (string | null);
80747
81686
  }[];
80748
81687
  export interface MailDomainUpdateInput {
80749
81688
  /**
80750
- * Domain id
81689
+ * Sending domain id
80751
81690
  */
80752
81691
  id: string;
80753
81692
  /**
80754
- * TLS policy: opportunistic (default) or enforced
81693
+ * TLS policy: opportunistic (default) falls back to plaintext, enforced fails the send instead; omit to leave it unchanged
80755
81694
  */
80756
81695
  tls?: ("opportunistic" | "enforced");
80757
81696
  /**
80758
- * Enable open tracking (1×1 pixel); off by default
81697
+ * Record opens by injecting a 1x1 pixel (off by default); omit to leave it unchanged
80759
81698
  */
80760
81699
  openTracking?: boolean;
80761
81700
  /**
80762
- * Enable click tracking (link rewrite); off by default
81701
+ * Record clicks by rewriting links through the tracking host (off by default); omit to leave it unchanged
80763
81702
  */
80764
81703
  clickTracking?: boolean;
80765
81704
  /**
80766
- * Host used for the click-redirect and open-pixel
81705
+ * Host to serve the click redirect and open pixel from, or null to clear it; omit to leave it unchanged
80767
81706
  */
80768
81707
  trackingSubdomain?: (string | null);
80769
81708
  }
80770
81709
  export interface MailDomainUpdateOutput {
81710
+ /**
81711
+ * Sending domain id
81712
+ */
80771
81713
  id: string;
80772
- tls: string;
81714
+ /**
81715
+ * TLS policy for delivery: opportunistic falls back to plaintext if the recipient offers no TLS, enforced fails the send instead
81716
+ */
81717
+ tls: ("opportunistic" | "enforced");
81718
+ /**
81719
+ * Governed apex this domain sits under; null if it is not governed
81720
+ */
80773
81721
  apex: (string | null);
80774
- mode: (string | null);
81722
+ /**
81723
+ * Who operates DNS: managed if the platform publishes the records for you, external if you publish them yourself; null if the domain is not governed
81724
+ */
81725
+ mode: (("external" | "managed") | null);
81726
+ /**
81727
+ * The sending domain itself, e.g. "example.com"
81728
+ */
80775
81729
  name: string;
81730
+ /**
81731
+ * True only when the domain is verified AND its governance binding is active — the condition for sending from it
81732
+ */
80776
81733
  active: boolean;
81734
+ /**
81735
+ * AWS region hosting the SES identity, which fixes data residency; set at create time and immutable
81736
+ */
80777
81737
  region: string;
80778
- status: string;
81738
+ /**
81739
+ * SES verification state: not_started before the first check, pending while DNS propagates, verified once sending is allowed, failed or temporary_failure when SES could not verify
81740
+ */
81741
+ status: ("not_started" | "pending" | "verified" | "failed" | "temporary_failure");
81742
+ /**
81743
+ * DNS records to publish for this domain, each with its last-seen resolution status
81744
+ */
80779
81745
  records: {
81746
+ /**
81747
+ * Fully-qualified host the record is published at
81748
+ */
80780
81749
  name: string;
80781
- type: string;
81750
+ /**
81751
+ * DNS record type to publish
81752
+ */
81753
+ type: ("CNAME" | "TXT" | "MX");
81754
+ /**
81755
+ * Value the record must resolve to
81756
+ */
80782
81757
  value: string;
80783
- purpose: string;
81758
+ /**
81759
+ * What the record is for: dkim signs outgoing mail, spf authorises the sender, return-path-mx routes bounces back, dmarc states the policy
81760
+ */
81761
+ purpose: ("dkim" | "spf" | "return-path-mx" | "dmarc");
81762
+ /**
81763
+ * MX priority; present only on MX records
81764
+ */
80784
81765
  priority?: number;
81766
+ /**
81767
+ * True if the domain cannot verify without this record; false if it is optional
81768
+ */
80785
81769
  required: boolean;
81770
+ /**
81771
+ * True if the record was found in DNS at the last check; absent when no check has run
81772
+ */
80786
81773
  resolved?: boolean;
80787
81774
  }[];
81775
+ /**
81776
+ * When the domain was registered (ISO 8601 UTC)
81777
+ */
80788
81778
  createdAt: string;
81779
+ /**
81780
+ * When the domain record was last changed (ISO 8601 UTC)
81781
+ */
80789
81782
  updatedAt: string;
81783
+ /**
81784
+ * When the domain became verified (ISO 8601 UTC); null while it is not
81785
+ */
80790
81786
  verifiedAt: (string | null);
81787
+ /**
81788
+ * Human-readable steps still outstanding before this domain can send
81789
+ */
80791
81790
  instructions: string[];
81791
+ /**
81792
+ * True if a 1x1 pixel is injected into outgoing mail to record opens
81793
+ */
80792
81794
  openTracking: boolean;
80793
- bindingStatus: string;
81795
+ /**
81796
+ * Governance binding state: pending while it is being granted, active once the domain may be used, failed if it could not be granted
81797
+ */
81798
+ bindingStatus: ("pending" | "active" | "failed");
81799
+ /**
81800
+ * True if links are rewritten through the tracking host to record clicks
81801
+ */
80794
81802
  clickTracking: boolean;
81803
+ /**
81804
+ * Host used as the bounce (Return-Path) address, so bounces come back to this product
81805
+ */
80795
81806
  customReturnPath: string;
81807
+ /**
81808
+ * Host serving the click redirect and the open pixel; null if tracking is off
81809
+ */
80796
81810
  trackingSubdomain: (string | null);
81811
+ /**
81812
+ * Id of the governance domain this one is registered under; null if it is not governed
81813
+ */
80797
81814
  governanceDomainId: (string | null);
81815
+ /**
81816
+ * Id of the binding between this product and the governance domain; null if unbound
81817
+ */
80798
81818
  governanceBindingId: (string | null);
81819
+ /**
81820
+ * When verification was first requested (ISO 8601 UTC)
81821
+ */
80799
81822
  verificationStartedAt: string;
81823
+ /**
81824
+ * When DNS and SES were last checked (ISO 8601 UTC); null if no check has run yet
81825
+ */
80800
81826
  lastVerificationCheckAt: (string | null);
80801
81827
  }
80802
81828
  export interface MailDomainVerifyInput {
80803
81829
  /**
80804
- * Domain id to re-check now
81830
+ * Sending domain to re-check against DNS and SES right now, instead of waiting for the next scheduled check
80805
81831
  */
80806
81832
  id: string;
80807
81833
  }
80808
81834
  export interface MailDomainVerifyOutput {
81835
+ /**
81836
+ * Sending domain id
81837
+ */
80809
81838
  id: string;
80810
- tls: string;
81839
+ /**
81840
+ * TLS policy for delivery: opportunistic falls back to plaintext if the recipient offers no TLS, enforced fails the send instead
81841
+ */
81842
+ tls: ("opportunistic" | "enforced");
81843
+ /**
81844
+ * Governed apex this domain sits under; null if it is not governed
81845
+ */
80811
81846
  apex: (string | null);
80812
- mode: (string | null);
81847
+ /**
81848
+ * Who operates DNS: managed if the platform publishes the records for you, external if you publish them yourself; null if the domain is not governed
81849
+ */
81850
+ mode: (("external" | "managed") | null);
81851
+ /**
81852
+ * The sending domain itself, e.g. "example.com"
81853
+ */
80813
81854
  name: string;
81855
+ /**
81856
+ * True only when the domain is verified AND its governance binding is active — the condition for sending from it
81857
+ */
80814
81858
  active: boolean;
81859
+ /**
81860
+ * AWS region hosting the SES identity, which fixes data residency; set at create time and immutable
81861
+ */
80815
81862
  region: string;
80816
- status: string;
81863
+ /**
81864
+ * SES verification state: not_started before the first check, pending while DNS propagates, verified once sending is allowed, failed or temporary_failure when SES could not verify
81865
+ */
81866
+ status: ("not_started" | "pending" | "verified" | "failed" | "temporary_failure");
81867
+ /**
81868
+ * DNS records to publish for this domain, each with its last-seen resolution status
81869
+ */
80817
81870
  records: {
81871
+ /**
81872
+ * Fully-qualified host the record is published at
81873
+ */
80818
81874
  name: string;
80819
- type: string;
81875
+ /**
81876
+ * DNS record type to publish
81877
+ */
81878
+ type: ("CNAME" | "TXT" | "MX");
81879
+ /**
81880
+ * Value the record must resolve to
81881
+ */
80820
81882
  value: string;
80821
- purpose: string;
81883
+ /**
81884
+ * What the record is for: dkim signs outgoing mail, spf authorises the sender, return-path-mx routes bounces back, dmarc states the policy
81885
+ */
81886
+ purpose: ("dkim" | "spf" | "return-path-mx" | "dmarc");
81887
+ /**
81888
+ * MX priority; present only on MX records
81889
+ */
80822
81890
  priority?: number;
81891
+ /**
81892
+ * True if the domain cannot verify without this record; false if it is optional
81893
+ */
80823
81894
  required: boolean;
81895
+ /**
81896
+ * True if the record was found in DNS at the last check; absent when no check has run
81897
+ */
80824
81898
  resolved?: boolean;
80825
81899
  }[];
81900
+ /**
81901
+ * When the domain was registered (ISO 8601 UTC)
81902
+ */
80826
81903
  createdAt: string;
81904
+ /**
81905
+ * When the domain record was last changed (ISO 8601 UTC)
81906
+ */
80827
81907
  updatedAt: string;
81908
+ /**
81909
+ * When the domain became verified (ISO 8601 UTC); null while it is not
81910
+ */
80828
81911
  verifiedAt: (string | null);
81912
+ /**
81913
+ * Human-readable steps still outstanding before this domain can send
81914
+ */
80829
81915
  instructions: string[];
81916
+ /**
81917
+ * True if a 1x1 pixel is injected into outgoing mail to record opens
81918
+ */
80830
81919
  openTracking: boolean;
80831
- bindingStatus: string;
81920
+ /**
81921
+ * Governance binding state: pending while it is being granted, active once the domain may be used, failed if it could not be granted
81922
+ */
81923
+ bindingStatus: ("pending" | "active" | "failed");
81924
+ /**
81925
+ * True if links are rewritten through the tracking host to record clicks
81926
+ */
80832
81927
  clickTracking: boolean;
81928
+ /**
81929
+ * Host used as the bounce (Return-Path) address, so bounces come back to this product
81930
+ */
80833
81931
  customReturnPath: string;
81932
+ /**
81933
+ * Host serving the click redirect and the open pixel; null if tracking is off
81934
+ */
80834
81935
  trackingSubdomain: (string | null);
81936
+ /**
81937
+ * Id of the governance domain this one is registered under; null if it is not governed
81938
+ */
80835
81939
  governanceDomainId: (string | null);
81940
+ /**
81941
+ * Id of the binding between this product and the governance domain; null if unbound
81942
+ */
80836
81943
  governanceBindingId: (string | null);
81944
+ /**
81945
+ * When verification was first requested (ISO 8601 UTC)
81946
+ */
80837
81947
  verificationStartedAt: string;
81948
+ /**
81949
+ * When DNS and SES were last checked (ISO 8601 UTC); null if no check has run yet
81950
+ */
80838
81951
  lastVerificationCheckAt: (string | null);
80839
81952
  }
80840
81953
  export interface MailEmailCancelInput {
80841
81954
  /**
80842
- * Email id
81955
+ * Email id — as returned by mail_email_send
80843
81956
  */
80844
81957
  id: string;
80845
81958
  }
80846
81959
  export interface MailEmailCancelOutput {
81960
+ /**
81961
+ * Id of the canceled email
81962
+ */
80847
81963
  id: string;
81964
+ /**
81965
+ * The email’s state after the call — always "canceled"
81966
+ */
80848
81967
  status: "canceled";
80849
81968
  }
80850
81969
  export interface MailEmailGetInput {
80851
81970
  /**
80852
- * Email id
81971
+ * Email id — as returned by mail_email_send
80853
81972
  */
80854
81973
  id: string;
80855
81974
  }
80856
81975
  export interface MailEmailGetOutput {
81976
+ /**
81977
+ * Cc recipients; empty when there were none
81978
+ */
80857
81979
  cc: string[];
81980
+ /**
81981
+ * Email id
81982
+ */
80858
81983
  id: string;
81984
+ /**
81985
+ * Primary recipients
81986
+ */
80859
81987
  to: string[];
81988
+ /**
81989
+ * Bcc recipients; empty when there were none. Never appeared in the message headers.
81990
+ */
80860
81991
  bcc: string[];
81992
+ /**
81993
+ * Sender the message was sent as
81994
+ */
80861
81995
  from: string;
81996
+ /**
81997
+ * Where the email stands: scheduled, queued, sent, failed, canceled, delivered, bounced, complained, suppressed or blocked
81998
+ */
80862
81999
  status: ("scheduled" | "queued" | "sent" | "failed" | "canceled" | "delivered" | "bounced" | "complained" | "suppressed" | "blocked");
82000
+ /**
82001
+ * Subject line as sent, after any template rendering
82002
+ */
80863
82003
  subject: string;
82004
+ /**
82005
+ * ISO-8601 instant the email was accepted
82006
+ */
80864
82007
  created_at: string;
82008
+ /**
82009
+ * The latest lifecycle event, the reason `status` reads as it does
82010
+ */
80865
82011
  last_event: {
82012
+ /**
82013
+ * The most recent lifecycle event — `email.` followed by the status it moved to
82014
+ */
80866
82015
  type: ("email.scheduled" | "email.queued" | "email.sent" | "email.failed" | "email.canceled" | "email.delivered" | "email.bounced" | "email.complained" | "email.suppressed" | "email.blocked");
82016
+ /**
82017
+ * ISO-8601 instant of that event; null when no event has been recorded yet
82018
+ */
80867
82019
  created_at: (string | null);
80868
82020
  };
82021
+ /**
82022
+ * Template the email was rendered from; null for an inline send
82023
+ */
80869
82024
  template_id: (string | null);
82025
+ /**
82026
+ * ISO-8601 instant the email is scheduled for; null when it was sent immediately
82027
+ */
80870
82028
  scheduled_at: (string | null);
82029
+ /**
82030
+ * Name of that template; null for an inline send
82031
+ */
80871
82032
  template_name: (string | null);
82033
+ /**
82034
+ * The sending provider’s own id, for correlating with its logs; null until the email leaves
82035
+ */
80872
82036
  provider_message_id: (string | null);
80873
82037
  }
80874
82038
  export interface MailEmailSendInput {
@@ -80885,38 +82049,41 @@ export interface MailEmailSendInput {
80885
82049
  */
80886
82050
  bcc?: (string | string[]);
80887
82051
  /**
80888
- * Sender, e.g. "Name <you@your-domain.com>"
82052
+ * Sender on a verified domain, e.g. "Name <you@your-domain.com>"
80889
82053
  */
80890
82054
  from: string;
80891
82055
  /**
80892
- * HTML body
82056
+ * HTML body. Inline sends only — forbidden with a template.
80893
82057
  */
80894
82058
  html?: string;
80895
82059
  /**
80896
- * Metadata tags
82060
+ * Metadata tags attached to the message as `X-Tag-<name>` headers
80897
82061
  */
80898
82062
  tags?: {
80899
82063
  /**
80900
- * Tag name
82064
+ * Tag name — printable US-ASCII without a colon; becomes the `X-Tag-<name>` header
80901
82065
  */
80902
82066
  name: string;
80903
82067
  /**
80904
- * Tag value
82068
+ * Tag value; must not contain CR or LF
80905
82069
  */
80906
82070
  value: string;
80907
82071
  }[];
80908
82072
  /**
80909
- * Plain-text body; auto-derived from html if omitted
82073
+ * Plain-text body; auto-derived from html if omitted. Inline sends only.
80910
82074
  */
80911
82075
  text?: string;
80912
82076
  /**
80913
- * Custom headers map
82077
+ * Custom MIME headers, keyed by header name
80914
82078
  */
80915
82079
  headers?: {
82080
+ /**
82081
+ * Header value; must not contain CR or LF
82082
+ */
80916
82083
  [k: string]: string;
80917
82084
  };
80918
82085
  /**
80919
- * Email subject (required for inline sends)
82086
+ * Subject line, capped at the RFC-5322 line limit. Required for inline sends, forbidden with a template.
80920
82087
  */
80921
82088
  subject?: string;
80922
82089
  /**
@@ -80932,23 +82099,26 @@ export interface MailEmailSendInput {
80932
82099
  */
80933
82100
  id: string;
80934
82101
  /**
80935
- * Values for the template variables
82102
+ * Values for the template variables. Defaults to {}.
80936
82103
  */
80937
82104
  variables?: {
80938
82105
  [k: string]: (string | number | boolean);
80939
82106
  };
80940
82107
  };
80941
82108
  /**
80942
- * ISO-8601 instant to send at; future, within 30 days. Omit to send now.
82109
+ * ISO-8601 instant to send at; must be in the future and within 30 days. Omit to send now.
80943
82110
  */
80944
82111
  scheduled_at?: string;
80945
82112
  }
80946
82113
  export interface MailEmailSendOutput {
82114
+ /**
82115
+ * Id of the accepted email — pass it to mail_email_get to follow delivery
82116
+ */
80947
82117
  id: string;
80948
82118
  }
80949
82119
  export interface MailEmailSendBatchInput {
80950
82120
  /**
80951
- * Up to 100 emails to send, each shaped like a single send
82121
+ * Up to 100 emails to send; `scheduled_at` is not allowed on a batch item
80952
82122
  */
80953
82123
  emails: {
80954
82124
  /**
@@ -80964,38 +82134,41 @@ export interface MailEmailSendBatchInput {
80964
82134
  */
80965
82135
  bcc?: (string | string[]);
80966
82136
  /**
80967
- * Sender, e.g. "Name <you@your-domain.com>"
82137
+ * Sender on a verified domain, e.g. "Name <you@your-domain.com>"
80968
82138
  */
80969
82139
  from: string;
80970
82140
  /**
80971
- * HTML body
82141
+ * HTML body. Inline sends only — forbidden with a template.
80972
82142
  */
80973
82143
  html?: string;
80974
82144
  /**
80975
- * Metadata tags
82145
+ * Metadata tags attached to the message as `X-Tag-<name>` headers
80976
82146
  */
80977
82147
  tags?: {
80978
82148
  /**
80979
- * Tag name
82149
+ * Tag name — printable US-ASCII without a colon; becomes the `X-Tag-<name>` header
80980
82150
  */
80981
82151
  name: string;
80982
82152
  /**
80983
- * Tag value
82153
+ * Tag value; must not contain CR or LF
80984
82154
  */
80985
82155
  value: string;
80986
82156
  }[];
80987
82157
  /**
80988
- * Plain-text body; auto-derived from html if omitted
82158
+ * Plain-text body; auto-derived from html if omitted. Inline sends only.
80989
82159
  */
80990
82160
  text?: string;
80991
82161
  /**
80992
- * Custom headers map
82162
+ * Custom MIME headers, keyed by header name
80993
82163
  */
80994
82164
  headers?: {
82165
+ /**
82166
+ * Header value; must not contain CR or LF
82167
+ */
80995
82168
  [k: string]: string;
80996
82169
  };
80997
82170
  /**
80998
- * Email subject (required for inline sends)
82171
+ * Subject line, capped at the RFC-5322 line limit. Required for inline sends, forbidden with a template.
80999
82172
  */
81000
82173
  subject?: string;
81001
82174
  /**
@@ -81011,139 +82184,304 @@ export interface MailEmailSendBatchInput {
81011
82184
  */
81012
82185
  id: string;
81013
82186
  /**
81014
- * Values for the template variables
82187
+ * Values for the template variables. Defaults to {}.
81015
82188
  */
81016
82189
  variables?: {
81017
82190
  [k: string]: (string | number | boolean);
81018
82191
  };
81019
82192
  };
81020
82193
  /**
81021
- * ISO-8601 instant to send at; future, within 30 days. Omit to send now.
82194
+ * ISO-8601 instant to send at; must be in the future and within 30 days. Omit to send now.
81022
82195
  */
81023
82196
  scheduled_at?: string;
81024
82197
  }[];
81025
82198
  }
82199
+ /**
82200
+ * One entry per submitted email, in the order they were submitted
82201
+ */
81026
82202
  export type MailEmailSendBatchOutput = {
82203
+ /**
82204
+ * Id of the accepted email
82205
+ */
81027
82206
  id: string;
81028
82207
  }[];
81029
82208
  export interface MailEmailUpdateInput {
81030
82209
  /**
81031
- * Email id
82210
+ * Email id — as returned by mail_email_send
81032
82211
  */
81033
82212
  id: string;
81034
82213
  /**
81035
- * New ISO-8601 instant; future, within 30 days
82214
+ * New ISO-8601 instant to send at; must be in the future and within 30 days
81036
82215
  */
81037
82216
  scheduled_at: string;
81038
82217
  }
81039
82218
  export interface MailEmailUpdateOutput {
82219
+ /**
82220
+ * Id of the accepted email — pass it to mail_email_get to follow delivery
82221
+ */
81040
82222
  id: string;
81041
82223
  }
81042
82224
  export interface MailReputationGetInput {
81043
82225
  }
81044
82226
  export interface MailReputationGetOutput {
82227
+ /**
82228
+ * True when sending is currently throttled because a rate crossed its threshold
82229
+ */
81045
82230
  gated: boolean;
82231
+ /**
82232
+ * Emails sent in the window — the denominator of both rates
82233
+ */
81046
82234
  volume: number;
82235
+ /**
82236
+ * Spam complaints in the window
82237
+ */
81047
82238
  complaints: number;
82239
+ /**
82240
+ * The configured limits the rates above are compared against
82241
+ */
81048
82242
  thresholds: {
82243
+ /**
82244
+ * Emails needed in the window before either rate is acted on — below it the sample is too small to judge
82245
+ */
81049
82246
  min_volume: number;
82247
+ /**
82248
+ * Ratio 0-1 at or above which sending is gated
82249
+ */
81050
82250
  complaint_rate: number;
82251
+ /**
82252
+ * Ratio 0-1 at or above which sending is gated
82253
+ */
81051
82254
  hard_bounce_rate: number;
81052
82255
  };
82256
+ /**
82257
+ * Length in days of the rolling window the rates below are measured over
82258
+ */
81053
82259
  window_days: number;
82260
+ /**
82261
+ * Hard bounces in the window
82262
+ */
81054
82263
  hard_bounces: number;
82264
+ /**
82265
+ * Complaints divided by volume, as a ratio 0-1 (0.001 = 0.1%)
82266
+ */
81055
82267
  complaint_rate: number;
81056
- tripped_metric: (string | null);
82268
+ /**
82269
+ * Which rate crossed its threshold, or null when nothing did
82270
+ */
82271
+ tripped_metric: (("hard_bounce" | "complaint") | null);
82272
+ /**
82273
+ * Hard bounces divided by volume, as a ratio 0-1 (0.05 = 5%)
82274
+ */
81057
82275
  hard_bounce_rate: number;
81058
82276
  }
81059
82277
  export interface MailStatsGetInput {
82278
+ /**
82279
+ * Rolling window the aggregation covers, ending now. Defaults to 30d.
82280
+ */
81060
82281
  period?: ("7d" | "30d" | "90d");
81061
82282
  }
81062
82283
  export interface MailStatsGetOutput {
82284
+ /**
82285
+ * The absolute instants the period resolved to
82286
+ */
81063
82287
  range: {
82288
+ /**
82289
+ * Exclusive end of the window (ISO-8601 instant, UTC)
82290
+ */
81064
82291
  to: string;
82292
+ /**
82293
+ * Inclusive start of the window (ISO-8601 instant, UTC)
82294
+ */
81065
82295
  from: string;
81066
82296
  };
82297
+ /**
82298
+ * Percent change of each total against the immediately preceding window of the same length
82299
+ */
81067
82300
  deltas: {
82301
+ /**
82302
+ * Change in sent against the previous window of the same length, in percent (-100 = halved to nothing, 25 = a quarter more); null when the previous window was empty
82303
+ */
81068
82304
  sent: (number | null);
82305
+ /**
82306
+ * Change in bounced against the previous window, in percent; null when the previous window was empty
82307
+ */
81069
82308
  bounced: (number | null);
82309
+ /**
82310
+ * Change in delivered against the previous window, in percent; null when the previous window was empty
82311
+ */
81070
82312
  delivered: (number | null);
82313
+ /**
82314
+ * Change in complained against the previous window, in percent; null when the previous window was empty
82315
+ */
81071
82316
  complained: (number | null);
81072
82317
  };
81073
- period: string;
82318
+ /**
82319
+ * The window these numbers cover — the echo of the requested period
82320
+ */
82321
+ period: ("7d" | "30d" | "90d");
82322
+ /**
82323
+ * Counts over the window
82324
+ */
81074
82325
  totals: {
82326
+ /**
82327
+ * Emails accepted for delivery in the window
82328
+ */
81075
82329
  sent: number;
82330
+ /**
82331
+ * Emails that bounced, hard or soft
82332
+ */
81076
82333
  bounced: number;
82334
+ /**
82335
+ * Emails the receiving server accepted
82336
+ */
81077
82337
  delivered: number;
82338
+ /**
82339
+ * Emails a recipient marked as spam
82340
+ */
81078
82341
  complained: number;
81079
82342
  };
82343
+ /**
82344
+ * One bucket per UTC day in the window, oldest first
82345
+ */
81080
82346
  volume: {
82347
+ /**
82348
+ * The UTC day this bucket covers, as YYYY-MM-DD
82349
+ */
81081
82350
  date: string;
82351
+ /**
82352
+ * Emails accepted for delivery on this day
82353
+ */
81082
82354
  sent: number;
82355
+ /**
82356
+ * Emails bounced on this day
82357
+ */
81083
82358
  bounced: number;
82359
+ /**
82360
+ * Emails delivered on this day
82361
+ */
81084
82362
  delivered: number;
81085
82363
  }[];
82364
+ /**
82365
+ * The three rates senders are judged on, as percentages of sent
82366
+ */
81086
82367
  deliverability: {
82368
+ /**
82369
+ * Bounced as a percentage of sent (0-100)
82370
+ */
81087
82371
  bouncedPct: number;
82372
+ /**
82373
+ * Delivered as a percentage of sent (0-100)
82374
+ */
81088
82375
  deliveredPct: number;
82376
+ /**
82377
+ * Complaints as a percentage of sent (0-100)
82378
+ */
81089
82379
  complainedPct: number;
81090
82380
  };
81091
82381
  }
81092
82382
  export interface MailSuppressionAddInput {
81093
82383
  /**
81094
- * Optional free-text note
82384
+ * Optional free-text note explaining why the address was suppressed
81095
82385
  */
81096
82386
  note?: string;
81097
82387
  /**
81098
- * Email address to suppress
82388
+ * Email address to suppress, e.g. "user@example.com"; matched case-insensitively
81099
82389
  */
81100
82390
  address: string;
81101
82391
  }
81102
82392
  export interface MailSuppressionAddOutput {
82393
+ /**
82394
+ * Suppression entry id
82395
+ */
81103
82396
  id: string;
82397
+ /**
82398
+ * Free-text note recorded when the entry was added by hand; null otherwise
82399
+ */
81104
82400
  note: (string | null);
81105
- reason: string;
82401
+ /**
82402
+ * Why the address is suppressed: hard_bounce and complaint come from SES feedback, unsubscribe from the recipient, manual from mail_suppression_add
82403
+ */
82404
+ reason: ("hard_bounce" | "complaint" | "manual" | "unsubscribe");
82405
+ /**
82406
+ * The suppressed recipient address, lowercased and trimmed
82407
+ */
81106
82408
  address: string;
82409
+ /**
82410
+ * When the address was suppressed (ISO 8601 UTC)
82411
+ */
81107
82412
  created_at: string;
82413
+ /**
82414
+ * Id of the email event that caused the suppression; null for a manual entry
82415
+ */
81108
82416
  source_event_id: (string | null);
81109
82417
  }
81110
82418
  export interface MailSuppressionListInput {
81111
82419
  /**
81112
- * Case-insensitive substring match on address
82420
+ * Case-insensitive substring match on the address; omit for no address filter
81113
82421
  */
81114
82422
  q?: string;
81115
82423
  /**
81116
- * Max items per page (1–100, default 50)
82424
+ * Max entries per page, 1-100 (default 50)
81117
82425
  */
81118
82426
  limit?: number;
81119
82427
  /**
81120
- * Opaque pagination cursor from a prior page
82428
+ * Opaque pagination cursor from a prior page's next_cursor; omit for the first page
81121
82429
  */
81122
82430
  cursor?: string;
81123
82431
  /**
81124
- * Filter by reason
82432
+ * Only return entries suppressed for this reason; omit for every reason
81125
82433
  */
81126
82434
  reason?: ("hard_bounce" | "complaint" | "manual" | "unsubscribe");
81127
82435
  }
81128
82436
  export interface MailSuppressionListOutput {
82437
+ /**
82438
+ * This page of suppression entries, newest first
82439
+ */
81129
82440
  items: {
82441
+ /**
82442
+ * Suppression entry id
82443
+ */
81130
82444
  id: string;
82445
+ /**
82446
+ * Free-text note recorded when the entry was added by hand; null otherwise
82447
+ */
81131
82448
  note: (string | null);
81132
- reason: string;
82449
+ /**
82450
+ * Why the address is suppressed: hard_bounce and complaint come from SES feedback, unsubscribe from the recipient, manual from mail_suppression_add
82451
+ */
82452
+ reason: ("hard_bounce" | "complaint" | "manual" | "unsubscribe");
82453
+ /**
82454
+ * The suppressed recipient address, lowercased and trimmed
82455
+ */
81133
82456
  address: string;
82457
+ /**
82458
+ * When the address was suppressed (ISO 8601 UTC)
82459
+ */
81134
82460
  created_at: string;
82461
+ /**
82462
+ * Id of the email event that caused the suppression; null for a manual entry
82463
+ */
81135
82464
  source_event_id: (string | null);
81136
82465
  }[];
82466
+ /**
82467
+ * Opaque cursor to pass back as `cursor` for the next page; null on the last page
82468
+ */
81137
82469
  next_cursor: (string | null);
81138
82470
  }
81139
82471
  export interface MailSuppressionRemoveInput {
81140
82472
  /**
81141
- * Email address to remove from the suppression list
82473
+ * Email address to remove from the suppression list; matched case-insensitively
81142
82474
  */
81143
82475
  address: string;
81144
82476
  }
81145
82477
  export interface MailSuppressionRemoveOutput {
82478
+ /**
82479
+ * The address the removal was attempted for, as normalized
82480
+ */
81146
82481
  address: string;
82482
+ /**
82483
+ * True if an entry was removed; false if the address was not suppressed (the call is idempotent)
82484
+ */
81147
82485
  removed: boolean;
81148
82486
  }
81149
82487
  export interface MailTemplateCreateInput {
@@ -84971,18 +86309,57 @@ export interface MailTemplateCreateInput {
84971
86309
  ];
84972
86310
  }
84973
86311
  export interface MailTemplateCreateOutput {
86312
+ /**
86313
+ * Template id
86314
+ */
84974
86315
  id: string;
86316
+ /**
86317
+ * HTML body; may contain {{ variable }} placeholders
86318
+ */
84975
86319
  html: string;
86320
+ /**
86321
+ * Human label for the template
86322
+ */
84976
86323
  name: string;
86324
+ /**
86325
+ * Plaintext body; null when none was supplied
86326
+ */
84977
86327
  text: (string | null);
84978
- status: string;
86328
+ /**
86329
+ * Lifecycle status: a draft is editable, a published template is not
86330
+ */
86331
+ status: ("draft" | "published");
86332
+ /**
86333
+ * Email subject; may contain {{ variable }} placeholders
86334
+ */
84979
86335
  subject: string;
86336
+ /**
86337
+ * When the template was created (ISO 8601 UTC)
86338
+ */
84980
86339
  createdAt: string;
86340
+ /**
86341
+ * When the template was last modified (ISO 8601 UTC)
86342
+ */
84981
86343
  updatedAt: string;
86344
+ /**
86345
+ * Declared variables of this template (at most 20)
86346
+ */
84982
86347
  variables: {
86348
+ /**
86349
+ * Placeholder identifier used as {{ name }}
86350
+ */
84983
86351
  name: string;
84984
- type: string;
86352
+ /**
86353
+ * Declared type (metadata; rendered as string in v1)
86354
+ */
86355
+ type: ("string" | "number" | "boolean");
86356
+ /**
86357
+ * Value used when none is supplied
86358
+ */
84985
86359
  fallback?: string;
86360
+ /**
86361
+ * If true, an absent value renders as empty string
86362
+ */
84986
86363
  optional: boolean;
84987
86364
  }[];
84988
86365
  }
@@ -84993,6 +86370,9 @@ export interface MailTemplateDeleteInput {
84993
86370
  id: string;
84994
86371
  }
84995
86372
  export interface MailTemplateDeleteOutput {
86373
+ /**
86374
+ * True once the template is gone
86375
+ */
84996
86376
  deleted: boolean;
84997
86377
  }
84998
86378
  export interface MailTemplateGetInput {
@@ -85002,40 +86382,127 @@ export interface MailTemplateGetInput {
85002
86382
  id: string;
85003
86383
  }
85004
86384
  export interface MailTemplateGetOutput {
86385
+ /**
86386
+ * Template id
86387
+ */
85005
86388
  id: string;
86389
+ /**
86390
+ * HTML body; may contain {{ variable }} placeholders
86391
+ */
85006
86392
  html: string;
86393
+ /**
86394
+ * Human label for the template
86395
+ */
85007
86396
  name: string;
86397
+ /**
86398
+ * Plaintext body; null when none was supplied
86399
+ */
85008
86400
  text: (string | null);
86401
+ /**
86402
+ * Send-usage rollup for this template
86403
+ */
85009
86404
  usage: {
86405
+ /**
86406
+ * How many emails were sent from this template
86407
+ */
85010
86408
  email_count: number;
86409
+ /**
86410
+ * When the template was last sent from (ISO 8601 UTC); null if never
86411
+ */
85011
86412
  last_sent_at: (string | null);
85012
86413
  };
85013
- status: string;
86414
+ /**
86415
+ * Lifecycle status: a draft is editable, a published template is not
86416
+ */
86417
+ status: ("draft" | "published");
86418
+ /**
86419
+ * Email subject; may contain {{ variable }} placeholders
86420
+ */
85014
86421
  subject: string;
86422
+ /**
86423
+ * When the template was created (ISO 8601 UTC)
86424
+ */
85015
86425
  createdAt: string;
86426
+ /**
86427
+ * When the template was last modified (ISO 8601 UTC)
86428
+ */
85016
86429
  updatedAt: string;
86430
+ /**
86431
+ * Declared variables of this template (at most 20)
86432
+ */
85017
86433
  variables: {
86434
+ /**
86435
+ * Placeholder identifier used as {{ name }}
86436
+ */
85018
86437
  name: string;
85019
- type: string;
86438
+ /**
86439
+ * Declared type (metadata; rendered as string in v1)
86440
+ */
86441
+ type: ("string" | "number" | "boolean");
86442
+ /**
86443
+ * Value used when none is supplied
86444
+ */
85020
86445
  fallback?: string;
86446
+ /**
86447
+ * If true, an absent value renders as empty string
86448
+ */
85021
86449
  optional: boolean;
85022
86450
  }[];
85023
86451
  }
85024
86452
  export interface MailTemplateListInput {
85025
86453
  }
85026
86454
  export type MailTemplateListOutput = {
86455
+ /**
86456
+ * Template id
86457
+ */
85027
86458
  id: string;
86459
+ /**
86460
+ * HTML body; may contain {{ variable }} placeholders
86461
+ */
85028
86462
  html: string;
86463
+ /**
86464
+ * Human label for the template
86465
+ */
85029
86466
  name: string;
86467
+ /**
86468
+ * Plaintext body; null when none was supplied
86469
+ */
85030
86470
  text: (string | null);
85031
- status: string;
86471
+ /**
86472
+ * Lifecycle status: a draft is editable, a published template is not
86473
+ */
86474
+ status: ("draft" | "published");
86475
+ /**
86476
+ * Email subject; may contain {{ variable }} placeholders
86477
+ */
85032
86478
  subject: string;
86479
+ /**
86480
+ * When the template was created (ISO 8601 UTC)
86481
+ */
85033
86482
  createdAt: string;
86483
+ /**
86484
+ * When the template was last modified (ISO 8601 UTC)
86485
+ */
85034
86486
  updatedAt: string;
86487
+ /**
86488
+ * Declared variables of this template (at most 20)
86489
+ */
85035
86490
  variables: {
86491
+ /**
86492
+ * Placeholder identifier used as {{ name }}
86493
+ */
85036
86494
  name: string;
85037
- type: string;
86495
+ /**
86496
+ * Declared type (metadata; rendered as string in v1)
86497
+ */
86498
+ type: ("string" | "number" | "boolean");
86499
+ /**
86500
+ * Value used when none is supplied
86501
+ */
85038
86502
  fallback?: string;
86503
+ /**
86504
+ * If true, an absent value renders as empty string
86505
+ */
85039
86506
  optional: boolean;
85040
86507
  }[];
85041
86508
  }[];
@@ -85046,18 +86513,57 @@ export interface MailTemplatePublishInput {
85046
86513
  id: string;
85047
86514
  }
85048
86515
  export interface MailTemplatePublishOutput {
86516
+ /**
86517
+ * Template id
86518
+ */
85049
86519
  id: string;
86520
+ /**
86521
+ * HTML body; may contain {{ variable }} placeholders
86522
+ */
85050
86523
  html: string;
86524
+ /**
86525
+ * Human label for the template
86526
+ */
85051
86527
  name: string;
86528
+ /**
86529
+ * Plaintext body; null when none was supplied
86530
+ */
85052
86531
  text: (string | null);
85053
- status: string;
86532
+ /**
86533
+ * Lifecycle status: a draft is editable, a published template is not
86534
+ */
86535
+ status: ("draft" | "published");
86536
+ /**
86537
+ * Email subject; may contain {{ variable }} placeholders
86538
+ */
85054
86539
  subject: string;
86540
+ /**
86541
+ * When the template was created (ISO 8601 UTC)
86542
+ */
85055
86543
  createdAt: string;
86544
+ /**
86545
+ * When the template was last modified (ISO 8601 UTC)
86546
+ */
85056
86547
  updatedAt: string;
86548
+ /**
86549
+ * Declared variables of this template (at most 20)
86550
+ */
85057
86551
  variables: {
86552
+ /**
86553
+ * Placeholder identifier used as {{ name }}
86554
+ */
85058
86555
  name: string;
85059
- type: string;
86556
+ /**
86557
+ * Declared type (metadata; rendered as string in v1)
86558
+ */
86559
+ type: ("string" | "number" | "boolean");
86560
+ /**
86561
+ * Value used when none is supplied
86562
+ */
85060
86563
  fallback?: string;
86564
+ /**
86565
+ * If true, an absent value renders as empty string
86566
+ */
85061
86567
  optional: boolean;
85062
86568
  }[];
85063
86569
  }
@@ -85066,11 +86572,25 @@ export interface MailTemplateUpdateInput {
85066
86572
  * Template id
85067
86573
  */
85068
86574
  id: string;
86575
+ /**
86576
+ * New HTML body; unchanged when omitted
86577
+ */
85069
86578
  html?: string;
86579
+ /**
86580
+ * New human label; unchanged when omitted
86581
+ */
85070
86582
  name?: string;
86583
+ /**
86584
+ * New plaintext body; null clears it and it is re-derived from html. Unchanged when omitted
86585
+ */
85071
86586
  text?: (string | null);
86587
+ /**
86588
+ * New email subject; may contain {{ variable }} placeholders. Unchanged when omitted
86589
+ */
85072
86590
  subject?: string;
85073
86591
  /**
86592
+ * Replacement list of declared variables ([{name,type,optional,fallback}], <=20). Unchanged when omitted
86593
+ *
85074
86594
  * @maxItems 20
85075
86595
  */
85076
86596
  variables?: [] | [
@@ -88876,100 +90396,256 @@ export interface MailTemplateUpdateInput {
88876
90396
  ];
88877
90397
  }
88878
90398
  export interface MailTemplateUpdateOutput {
90399
+ /**
90400
+ * Template id
90401
+ */
88879
90402
  id: string;
90403
+ /**
90404
+ * HTML body; may contain {{ variable }} placeholders
90405
+ */
88880
90406
  html: string;
90407
+ /**
90408
+ * Human label for the template
90409
+ */
88881
90410
  name: string;
90411
+ /**
90412
+ * Plaintext body; null when none was supplied
90413
+ */
88882
90414
  text: (string | null);
88883
- status: string;
90415
+ /**
90416
+ * Lifecycle status: a draft is editable, a published template is not
90417
+ */
90418
+ status: ("draft" | "published");
90419
+ /**
90420
+ * Email subject; may contain {{ variable }} placeholders
90421
+ */
88884
90422
  subject: string;
90423
+ /**
90424
+ * When the template was created (ISO 8601 UTC)
90425
+ */
88885
90426
  createdAt: string;
90427
+ /**
90428
+ * When the template was last modified (ISO 8601 UTC)
90429
+ */
88886
90430
  updatedAt: string;
90431
+ /**
90432
+ * Declared variables of this template (at most 20)
90433
+ */
88887
90434
  variables: {
90435
+ /**
90436
+ * Placeholder identifier used as {{ name }}
90437
+ */
88888
90438
  name: string;
88889
- type: string;
90439
+ /**
90440
+ * Declared type (metadata; rendered as string in v1)
90441
+ */
90442
+ type: ("string" | "number" | "boolean");
90443
+ /**
90444
+ * Value used when none is supplied
90445
+ */
88890
90446
  fallback?: string;
90447
+ /**
90448
+ * If true, an absent value renders as empty string
90449
+ */
88891
90450
  optional: boolean;
88892
90451
  }[];
88893
90452
  }
88894
90453
  export interface MailUsageGetInput {
88895
90454
  }
88896
90455
  export interface MailUsageGetOutput {
90456
+ /**
90457
+ * Email sending usage against the free-tier limits
90458
+ */
88897
90459
  emails: {
88898
- day: MailUsageGetOutputDay;
88899
- month: MailUsageGetOutputDay;
90460
+ /**
90461
+ * Sending allowance today (UTC)
90462
+ */
90463
+ day: {
90464
+ /**
90465
+ * Emails accepted for delivery so far today (UTC)
90466
+ */
90467
+ used: number;
90468
+ /**
90469
+ * Free-tier allowance today (UTC)
90470
+ */
90471
+ limit: number;
90472
+ /**
90473
+ * Allowance left today (UTC) — limit minus used, never below zero
90474
+ */
90475
+ remaining: number;
90476
+ };
90477
+ /**
90478
+ * Sending allowance this month (UTC)
90479
+ */
90480
+ month: {
90481
+ /**
90482
+ * Emails accepted for delivery so far this month (UTC)
90483
+ */
90484
+ used: number;
90485
+ /**
90486
+ * Free-tier allowance this month (UTC)
90487
+ */
90488
+ limit: number;
90489
+ /**
90490
+ * Allowance left this month (UTC) — limit minus used, never below zero
90491
+ */
90492
+ remaining: number;
90493
+ };
90494
+ /**
90495
+ * True when a further send would be refused right now because a limit or the hard cap is reached
90496
+ */
88900
90497
  blocked: boolean;
90498
+ /**
90499
+ * Monthly ceiling that cannot be exceeded even with an allowance left elsewhere
90500
+ */
88901
90501
  hard_cap: number;
88902
90502
  };
90503
+ /**
90504
+ * The two windows the counters below are scoped to
90505
+ */
88903
90506
  period: {
90507
+ /**
90508
+ * The UTC day the daily counters cover, as YYYY-MM-DD
90509
+ */
88904
90510
  day: string;
90511
+ /**
90512
+ * The UTC month the monthly counters cover, as YYYY-MM
90513
+ */
88905
90514
  month: string;
88906
90515
  };
90516
+ /**
90517
+ * Point-in-time contact storage — a stock, not a per-period flow
90518
+ */
88907
90519
  contacts: {
90520
+ /**
90521
+ * Contacts stored for the product at this instant
90522
+ */
88908
90523
  count: number;
88909
90524
  };
88910
90525
  }
88911
- export interface MailUsageGetOutputDay {
88912
- used: number;
88913
- limit: number;
88914
- remaining: number;
88915
- }
88916
90526
  export interface MailWebhookCreateInput {
88917
90527
  /**
88918
- * HTTPS URL that signed events are POSTed to
90528
+ * HTTPS URL that signed events are POSTed to; plain http is rejected
88919
90529
  */
88920
90530
  url: string;
88921
90531
  /**
88922
- * Optional human label
90532
+ * Optional human label for the endpoint, e.g. "billing service"
88923
90533
  */
88924
90534
  description?: string;
88925
90535
  /**
88926
- * Event types to deliver. One or more of: email.delivered, email.bounced, email.complained, email.suppressed, email.opened, email.clicked
90536
+ * Event types to deliver; at least one. One or more of: email.delivered, email.bounced, email.complained, email.suppressed, email.opened, email.clicked
88927
90537
  *
88928
90538
  * @minItems 1
88929
90539
  */
88930
90540
  enabled_events: [("email.delivered" | "email.bounced" | "email.complained" | "email.suppressed" | "email.opened" | "email.clicked"), ...(("email.delivered" | "email.bounced" | "email.complained" | "email.suppressed" | "email.opened" | "email.clicked"))[]];
88931
90541
  }
88932
90542
  export interface MailWebhookCreateOutput {
90543
+ /**
90544
+ * Webhook endpoint id
90545
+ */
88933
90546
  id: string;
90547
+ /**
90548
+ * HTTPS URL that signed events are POSTed to
90549
+ */
88934
90550
  url: string;
90551
+ /**
90552
+ * Signing secret for verifying the delivery signature. Returned only when the endpoint is created and never retrievable again — store it now
90553
+ */
88935
90554
  secret: string;
90555
+ /**
90556
+ * False if delivery is switched off — the endpoint is kept but nothing is sent to it
90557
+ */
88936
90558
  enabled: boolean;
90559
+ /**
90560
+ * When the endpoint was registered (ISO 8601 UTC)
90561
+ */
88937
90562
  created_at: string;
90563
+ /**
90564
+ * When the endpoint was last changed (ISO 8601 UTC)
90565
+ */
88938
90566
  updated_at: string;
90567
+ /**
90568
+ * Human label for the endpoint; null if none was given
90569
+ */
88939
90570
  description: (string | null);
88940
- enabled_events: string[];
90571
+ /**
90572
+ * Event types this endpoint receives; anything else is not delivered to it
90573
+ */
90574
+ enabled_events: ("email.delivered" | "email.bounced" | "email.complained" | "email.suppressed" | "email.opened" | "email.clicked")[];
88941
90575
  }
88942
90576
  export interface MailWebhookDeleteInput {
88943
90577
  /**
88944
- * Webhook endpoint id
90578
+ * Webhook endpoint id; deleting it also discards its delivery history
88945
90579
  */
88946
90580
  id: string;
88947
90581
  }
88948
90582
  export interface MailWebhookDeleteOutput {
90583
+ /**
90584
+ * Id of the endpoint that was deleted
90585
+ */
88949
90586
  id: string;
90587
+ /**
90588
+ * True once the endpoint and its delivery history are gone
90589
+ */
88950
90590
  deleted: boolean;
88951
90591
  }
88952
90592
  export interface MailWebhookDeliveriesListInput {
88953
90593
  /**
88954
- * Webhook endpoint id
90594
+ * Webhook endpoint whose delivery attempts to list
88955
90595
  */
88956
90596
  id: string;
88957
90597
  /**
88958
- * Max items (1-100, default 50)
90598
+ * Max delivery attempts to return, 1-100 (default 50)
88959
90599
  */
88960
90600
  limit?: number;
88961
90601
  }
90602
+ /**
90603
+ * Recent delivery attempts for the endpoint, newest first
90604
+ */
88962
90605
  export type MailWebhookDeliveriesListOutput = {
90606
+ /**
90607
+ * Delivery attempt id
90608
+ */
88963
90609
  id: string;
88964
- status: string;
90610
+ /**
90611
+ * Delivery state: pending while attempts remain, succeeded once the endpoint answered 2xx, failed once retries are exhausted
90612
+ */
90613
+ status: ("pending" | "succeeded" | "failed");
90614
+ /**
90615
+ * How many times delivery has been attempted so far
90616
+ */
88965
90617
  attempts: number;
90618
+ /**
90619
+ * Id of the email event that was delivered
90620
+ */
88966
90621
  event_id: string;
90622
+ /**
90623
+ * When the delivery was queued (ISO 8601 UTC)
90624
+ */
88967
90625
  created_at: string;
88968
- event_type: string;
90626
+ /**
90627
+ * Type of the delivered event
90628
+ */
90629
+ event_type: ("email.delivered" | "email.bounced" | "email.complained" | "email.suppressed" | "email.opened" | "email.clicked");
90630
+ /**
90631
+ * Error from the last failed attempt; null if the last attempt succeeded or none has run
90632
+ */
88969
90633
  last_error: (string | null);
90634
+ /**
90635
+ * When the delivery record was last updated (ISO 8601 UTC)
90636
+ */
88970
90637
  updated_at: string;
90638
+ /**
90639
+ * Id of the webhook endpoint the event was delivered to
90640
+ */
88971
90641
  endpoint_id: string;
90642
+ /**
90643
+ * When delivery was last attempted (ISO 8601 UTC); null before the first attempt
90644
+ */
88972
90645
  last_attempt_at: (string | null);
90646
+ /**
90647
+ * HTTP status the endpoint returned on the last attempt; null if it could not be reached
90648
+ */
88973
90649
  response_status: (number | null);
88974
90650
  }[];
88975
90651
  export interface MailWebhookGetInput {
@@ -88979,24 +90655,69 @@ export interface MailWebhookGetInput {
88979
90655
  id: string;
88980
90656
  }
88981
90657
  export interface MailWebhookGetOutput {
90658
+ /**
90659
+ * Webhook endpoint id
90660
+ */
88982
90661
  id: string;
90662
+ /**
90663
+ * HTTPS URL that signed events are POSTed to
90664
+ */
88983
90665
  url: string;
90666
+ /**
90667
+ * False if delivery is switched off — the endpoint is kept but nothing is sent to it
90668
+ */
88984
90669
  enabled: boolean;
90670
+ /**
90671
+ * When the endpoint was registered (ISO 8601 UTC)
90672
+ */
88985
90673
  created_at: string;
90674
+ /**
90675
+ * When the endpoint was last changed (ISO 8601 UTC)
90676
+ */
88986
90677
  updated_at: string;
90678
+ /**
90679
+ * Human label for the endpoint; null if none was given
90680
+ */
88987
90681
  description: (string | null);
88988
- enabled_events: string[];
90682
+ /**
90683
+ * Event types this endpoint receives; anything else is not delivered to it
90684
+ */
90685
+ enabled_events: ("email.delivered" | "email.bounced" | "email.complained" | "email.suppressed" | "email.opened" | "email.clicked")[];
88989
90686
  }
88990
90687
  export interface MailWebhookListInput {
88991
90688
  }
90689
+ /**
90690
+ * Webhook endpoints for the current product, signing secrets omitted
90691
+ */
88992
90692
  export type MailWebhookListOutput = {
90693
+ /**
90694
+ * Webhook endpoint id
90695
+ */
88993
90696
  id: string;
90697
+ /**
90698
+ * HTTPS URL that signed events are POSTed to
90699
+ */
88994
90700
  url: string;
90701
+ /**
90702
+ * False if delivery is switched off — the endpoint is kept but nothing is sent to it
90703
+ */
88995
90704
  enabled: boolean;
90705
+ /**
90706
+ * When the endpoint was registered (ISO 8601 UTC)
90707
+ */
88996
90708
  created_at: string;
90709
+ /**
90710
+ * When the endpoint was last changed (ISO 8601 UTC)
90711
+ */
88997
90712
  updated_at: string;
90713
+ /**
90714
+ * Human label for the endpoint; null if none was given
90715
+ */
88998
90716
  description: (string | null);
88999
- enabled_events: string[];
90717
+ /**
90718
+ * Event types this endpoint receives; anything else is not delivered to it
90719
+ */
90720
+ enabled_events: ("email.delivered" | "email.bounced" | "email.complained" | "email.suppressed" | "email.opened" | "email.clicked")[];
89000
90721
  }[];
89001
90722
  export interface MailWebhookUpdateInput {
89002
90723
  /**
@@ -89004,32 +90725,53 @@ export interface MailWebhookUpdateInput {
89004
90725
  */
89005
90726
  id: string;
89006
90727
  /**
89007
- * HTTPS URL that signed events are POSTed to
90728
+ * New HTTPS delivery URL; omit to leave it unchanged
89008
90729
  */
89009
90730
  url?: string;
89010
90731
  /**
89011
- * Enable (true) or disable (false) delivery
90732
+ * Switch delivery on (true) or off (false); omit to leave it unchanged
89012
90733
  */
89013
90734
  enabled?: boolean;
89014
90735
  /**
89015
- * Optional human label
90736
+ * New human label, or null to clear it; omit to leave it unchanged
89016
90737
  */
89017
90738
  description?: (string | null);
89018
90739
  /**
89019
- * Event types to deliver. One or more of: email.delivered, email.bounced, email.complained, email.suppressed, email.opened, email.clicked
90740
+ * Replace the delivered event types; omit to leave them unchanged
89020
90741
  *
89021
90742
  * @minItems 1
89022
90743
  */
89023
90744
  enabled_events?: [("email.delivered" | "email.bounced" | "email.complained" | "email.suppressed" | "email.opened" | "email.clicked"), ...(("email.delivered" | "email.bounced" | "email.complained" | "email.suppressed" | "email.opened" | "email.clicked"))[]];
89024
90745
  }
89025
90746
  export interface MailWebhookUpdateOutput {
90747
+ /**
90748
+ * Webhook endpoint id
90749
+ */
89026
90750
  id: string;
90751
+ /**
90752
+ * HTTPS URL that signed events are POSTed to
90753
+ */
89027
90754
  url: string;
90755
+ /**
90756
+ * False if delivery is switched off — the endpoint is kept but nothing is sent to it
90757
+ */
89028
90758
  enabled: boolean;
90759
+ /**
90760
+ * When the endpoint was registered (ISO 8601 UTC)
90761
+ */
89029
90762
  created_at: string;
90763
+ /**
90764
+ * When the endpoint was last changed (ISO 8601 UTC)
90765
+ */
89030
90766
  updated_at: string;
90767
+ /**
90768
+ * Human label for the endpoint; null if none was given
90769
+ */
89031
90770
  description: (string | null);
89032
- enabled_events: string[];
90771
+ /**
90772
+ * Event types this endpoint receives; anything else is not delivered to it
90773
+ */
90774
+ enabled_events: ("email.delivered" | "email.bounced" | "email.complained" | "email.suppressed" | "email.opened" | "email.clicked")[];
89033
90775
  }
89034
90776
  export interface ObserveAlertsCreateInput {
89035
90777
  /**