samva 0.4.0 → 0.5.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.
Files changed (42) hide show
  1. package/dist/{categories-CsUa8ojo.js → categories-B9Nw2v_F.js} +5 -1
  2. package/dist/client/sdk.gen.d.ts +150 -11
  3. package/dist/client/types.gen.d.ts +893 -37
  4. package/dist/{client-BmZK_uCt.js → client-B7gEkvEq.js} +952 -110
  5. package/dist/{client-attribution-BslSOa_8.js → client-attribution-B2yJBXdZ.js} +2 -2
  6. package/dist/effect/api-keys.js +1 -1
  7. package/dist/effect/campaigns.d.ts +16 -0
  8. package/dist/effect/campaigns.js +1 -1
  9. package/dist/effect/categories.js +1 -1
  10. package/dist/effect/client.js +1 -1
  11. package/dist/effect/contacts.js +1 -1
  12. package/dist/effect/conversations.d.ts +15 -0
  13. package/dist/effect/conversations.js +1 -1
  14. package/dist/effect/design.js +1 -1
  15. package/dist/effect/email.d.ts +700 -2
  16. package/dist/effect/email.js +27 -3
  17. package/dist/effect/generated-metadata.d.ts +4 -0
  18. package/dist/effect/generated.d.ts +4102 -359
  19. package/dist/effect/index.js +2 -2
  20. package/dist/effect/internal/operation.d.ts +13 -3
  21. package/dist/effect/media.d.ts +3 -3
  22. package/dist/effect/media.js +1 -1
  23. package/dist/effect/messages.d.ts +180 -1
  24. package/dist/effect/messages.js +5 -3
  25. package/dist/effect/operations.js +1 -1
  26. package/dist/effect/organizations.js +1 -1
  27. package/dist/effect/retry.js +1 -1
  28. package/dist/effect/scheduled-messages.d.ts +90 -6
  29. package/dist/effect/scheduled-messages.js +5 -3
  30. package/dist/effect/templates.d.ts +12 -0
  31. package/dist/effect/templates.js +2 -2
  32. package/dist/effect/webhooks.d.ts +40 -6
  33. package/dist/effect/webhooks.js +2 -2
  34. package/dist/index.js +2 -2
  35. package/dist/{operation-B1knNlxk.js → operation-B4FjN6wq.js} +50 -2
  36. package/dist/promises/errors.gen.d.ts +21 -2
  37. package/dist/promises/index.d.ts +1 -0
  38. package/dist/promises/index.js +2 -2
  39. package/dist/promises/types.gen.d.ts +1 -1
  40. package/dist/{promises-n1opem5V.js → promises-CP_nxUus.js} +502 -11
  41. package/dist/service-map.d.ts +66 -0
  42. package/package.json +3 -3
@@ -1,5 +1,5 @@
1
1
  export type ClientOptions = {
2
- baseUrl: `${string}://${string}` | (string & {});
2
+ baseUrl: "https://api.samva.dev" | (string & {});
3
3
  };
4
4
  export type ConversationId = string;
5
5
  export type ContactId = string;
@@ -64,6 +64,11 @@ export type Message = {
64
64
  contact: MessageContact | null;
65
65
  }>;
66
66
  deliveries: Array<{
67
+ scheduling: {
68
+ dueAt: string;
69
+ expiresAt: string;
70
+ waitReason: "rate" | "daily-quota" | "domain-health" | "tenant-health" | "provider-unavailable" | "retry" | "campaign-paused" | "domain-warming" | "onboarding-review" | null;
71
+ } | null;
67
72
  id: string;
68
73
  messageId: string;
69
74
  recipientId: string | null;
@@ -270,6 +275,15 @@ export type ValidationError = {
270
275
  [key: string]: Array<string>;
271
276
  } | null | undefined;
272
277
  };
278
+ export type OnboardingReviewRequiredError = {
279
+ _tag: "OnboardingReviewRequiredError";
280
+ operation: string;
281
+ code: "review_required" | "review_in_progress" | "information_required" | "review_rejected" | "identity_review_required" | "identity_review_rejected" | "identity_changed";
282
+ decision: "undecided" | "approved" | "rejected" | "exempt";
283
+ stage: "collecting" | "automated_review" | "manual_review" | "information_requested" | "complete";
284
+ nextAction: "wait_for_review" | "provide_information" | "verify_sending_identity" | "reapply" | "contact_support";
285
+ identityId?: string | null | undefined;
286
+ };
273
287
  export type FlagDisabledError = {
274
288
  _tag: "FlagDisabledError";
275
289
  operation: string;
@@ -281,6 +295,20 @@ export type WebhookEnqueueError = {
281
295
  reason: string;
282
296
  details?: string | null | undefined;
283
297
  };
298
+ export type ValidateEmailResponse = {
299
+ valid: true;
300
+ from: {
301
+ email: string;
302
+ name: string | null;
303
+ };
304
+ recipientCount: number;
305
+ content: {
306
+ source: "inline" | "template";
307
+ subject: string;
308
+ hasHtml: boolean;
309
+ hasText: boolean;
310
+ };
311
+ };
284
312
  export type MessageEventId = string;
285
313
  export type OperationId = string;
286
314
  export type OperationResource = {
@@ -345,10 +373,11 @@ export type EmailDispatchSendMessagePayload = {
345
373
  email: EmailDispatchContent;
346
374
  };
347
375
  export type DispatchSendMessagePayload = EmailDispatchSendMessagePayload;
376
+ export type IanaTimezone = string;
348
377
  export type ScheduledMessageId = string;
349
378
  export type ScheduledMessage = {
350
379
  id: ScheduledMessageId;
351
- status: "pending" | "dispatching" | "dispatched" | "cancelled" | "failed";
380
+ status: "pending" | "dispatching" | "paused" | "dispatched" | "cancelled" | "failed";
352
381
  scheduledFor: string;
353
382
  timezone: string;
354
383
  send: SendMessagePayload;
@@ -423,6 +452,7 @@ export type Campaign = {
423
452
  createdAt: string;
424
453
  updatedAt: string;
425
454
  };
455
+ export type EmailDomainId = string;
426
456
  export type CampaignRun = {
427
457
  id: CampaignRunId;
428
458
  campaignId: CampaignId;
@@ -439,6 +469,8 @@ export type CampaignRun = {
439
469
  failedCount: number;
440
470
  skippedCount: number;
441
471
  failureReason: string | null;
472
+ holdReason: string | null;
473
+ holdDomainId: EmailDomainId | null;
442
474
  lastContactId: string | null;
443
475
  createdBy: string | null;
444
476
  actorEmail: string;
@@ -451,6 +483,39 @@ export type CampaignRunAction = {
451
483
  item: CampaignRun;
452
484
  };
453
485
  export type CampaignRecipientId = string;
486
+ export type IdentityClearanceStatus = {
487
+ identityId: string;
488
+ decision: "undecided" | "approved" | "rejected";
489
+ generation: number;
490
+ code: "review_required" | "review_in_progress" | "information_required" | "review_rejected" | "identity_review_required" | "identity_review_rejected" | "identity_changed" | null;
491
+ nextAction: "wait_for_review" | "provide_information" | "verify_sending_identity" | "reapply" | "contact_support" | null;
492
+ updatedAt: string;
493
+ };
494
+ export type OnboardingReviewStatus = {
495
+ decision: "undecided" | "approved" | "rejected" | "exempt";
496
+ stage: "collecting" | "automated_review" | "manual_review" | "information_requested" | "complete";
497
+ generation: number;
498
+ canSend: boolean;
499
+ code: "review_required" | "review_in_progress" | "information_required" | "review_rejected" | "identity_review_required" | "identity_review_rejected" | "identity_changed" | null;
500
+ nextAction: "wait_for_review" | "provide_information" | "verify_sending_identity" | "reapply" | "contact_support" | null;
501
+ canReapply: boolean;
502
+ informationRequest: {
503
+ id: string;
504
+ requestedFields: Array<string>;
505
+ requestedAt: string;
506
+ canRespond: boolean;
507
+ } | null;
508
+ identities: Array<IdentityClearanceStatus>;
509
+ updatedAt: string | null;
510
+ };
511
+ export type ReapplyOnboardingReviewInput = {
512
+ expectedGeneration: number;
513
+ };
514
+ export type RespondToOnboardingInformationRequestInput = {
515
+ expectedGeneration: number;
516
+ responseText: string;
517
+ evidenceMediaIds: Array<MediaId>;
518
+ };
454
519
  export type EmailTrackingDefaults = {
455
520
  opens: boolean;
456
521
  clicks: boolean;
@@ -463,7 +528,6 @@ export type EmailRecipientTrackingPreference = {
463
528
  createdAt: string | null;
464
529
  updatedAt: string | null;
465
530
  };
466
- export type EmailDomainId = string;
467
531
  export type EmailSenderId = string;
468
532
  export type DeliverabilityFacts = {
469
533
  bounceRate: number;
@@ -498,6 +562,27 @@ export type EmailChannelError = {
498
562
  message: string;
499
563
  statusCode?: number | null | undefined;
500
564
  };
565
+ export type EmailDkimRotation = {
566
+ id: string;
567
+ domainId: EmailDomainId;
568
+ phase: "staged" | "cutover" | "complete";
569
+ selector: string;
570
+ record: {
571
+ name: string;
572
+ type: "TXT";
573
+ value: string;
574
+ ttl: string;
575
+ };
576
+ formerRecord: {
577
+ name: string;
578
+ type: "TXT";
579
+ value: string;
580
+ };
581
+ /**
582
+ * Earliest minimum retention horizon only. The former public key remains published indefinitely until a separately approved retirement verifies at least two actual former-record TTLs have elapsed.
583
+ */
584
+ minimumRetainUntil: string | null;
585
+ };
501
586
  export type EmailDomainVerification = {
502
587
  domainId: EmailDomainId;
503
588
  domain: string;
@@ -532,6 +617,40 @@ export type EmailDomainVerification = {
532
617
  message: string;
533
618
  failedAt: string;
534
619
  } | null;
620
+ health: {
621
+ actionOwner: "customer" | "samva" | "provider" | "none";
622
+ action: string;
623
+ freshness: "current" | "stale" | "unknown";
624
+ observedAt: string | null;
625
+ staleAt: string | null;
626
+ nextRetryAt: string | null;
627
+ reason: "ready" | "dns-action-required" | "dns-unavailable" | "provider-pending" | "provider-failed" | "samva-repair" | "signing-custody-action-required" | "provider-ownership-action-required" | "inactive" | "observation-stale" | "observation-unknown";
628
+ };
629
+ /**
630
+ * Stored domain, tenant and workspace health. Ready does not guarantee send acceptance or report configuration-set/account pauses.
631
+ */
632
+ sending: {
633
+ actionOwner: "customer" | "samva" | "provider" | "none";
634
+ action: string;
635
+ freshness: "current" | "stale" | "unknown";
636
+ observedAt: string | null;
637
+ staleAt: string | null;
638
+ nextRetryAt: string | null;
639
+ status: "ready" | "blocked" | "unknown";
640
+ reason: "domain-not-ready" | "domain-observation-stale" | "operator-paused" | "provider-paused" | "tenant-health-stale" | "tenant-health-unknown" | "ready";
641
+ };
642
+ dmarc: {
643
+ status: "valid" | "missing" | "invalid" | "multiple" | "unknown";
644
+ source: "direct" | "organizational" | "none";
645
+ policyDomain: string | null;
646
+ policy: "none" | "quarantine" | "reject" | null;
647
+ subdomainPolicy: "none" | "quarantine" | "reject" | null;
648
+ effectivePolicy: "none" | "quarantine" | "reject" | null;
649
+ observedAt: string | null;
650
+ staleAt: string | null;
651
+ guidance: string;
652
+ };
653
+ rotation: EmailDkimRotation | null;
535
654
  };
536
655
  export type DomainConnectEligibility = {
537
656
  eligible: false;
@@ -597,11 +716,99 @@ export type ForwardingConditions = {
597
716
  hasAttachments?: boolean | null | undefined;
598
717
  };
599
718
  export type EmailForwardingRuleId = string;
719
+ export type DomainWarmingDomainRef = {
720
+ id: EmailDomainId;
721
+ domain: string;
722
+ };
723
+ export type EmailDomainWarmingPlanId = string;
724
+ export type DomainWarmingPlan = {
725
+ id: EmailDomainWarmingPlanId;
726
+ status: "active" | "paused" | "completed";
727
+ identity: "new" | "migrating" | "returning";
728
+ initialDailyRecipients: number;
729
+ dailyGrowthPercent: number;
730
+ targetDailyRecipients: number;
731
+ holdReason: string | null;
732
+ heldAt: string | null;
733
+ pausedAt: string | null;
734
+ completedAt: string | null;
735
+ createdAt: string;
736
+ updatedAt: string;
737
+ };
738
+ export type EmailDomainWarmingBatchId = string;
739
+ export type DomainWarmingBatch = {
740
+ id: EmailDomainWarmingBatchId;
741
+ sequence: number;
742
+ state: "scheduled" | "open" | "closed" | "cancelled";
743
+ startsAt: string;
744
+ endsAt: string;
745
+ allowanceRecipients: number;
746
+ dailyGrowthPercent: number;
747
+ targetDailyRecipients: number;
748
+ reservedRecipients: number;
749
+ acceptedRecipients: number;
750
+ cancelledAt: string | null;
751
+ createdAt: string;
752
+ };
753
+ export type EmailDomainWarmingDecisionId = string;
754
+ export type DomainWarmingDecision = {
755
+ id: EmailDomainWarmingDecisionId;
756
+ kind: "plan-created" | "policy-updated" | "window-opened" | "window-cancelled" | "paused" | "resumed" | "held" | "completed";
757
+ batchId: EmailDomainWarmingBatchId | null;
758
+ actor: string;
759
+ note: string | null;
760
+ createdAt: string;
761
+ };
762
+ export type DomainWarmingWindowHour = {
763
+ sent: number;
764
+ bounced: number;
765
+ complained: number;
766
+ };
767
+ export type DomainWarmingEvidence = {
768
+ observedAt: string;
769
+ windowHours: number;
770
+ minimumSends: number;
771
+ sent: number;
772
+ bounced: number;
773
+ complained: number;
774
+ hourly: Array<DomainWarmingWindowHour>;
775
+ bounceThreshold: number;
776
+ complaintThreshold: number;
777
+ verdict: "insufficient-evidence" | "healthy" | "over-threshold";
778
+ thresholdReason: string | null;
779
+ };
780
+ export type DomainWarmingHolds = {
781
+ workspacePausedAt: string | null;
782
+ workspacePauseReason: string | null;
783
+ sendingStatus: "enabled" | "disabled" | "reinstated" | "unknown";
784
+ };
785
+ export type DomainWarming = {
786
+ domain: DomainWarmingDomainRef;
787
+ plan: DomainWarmingPlan | null;
788
+ batches: Array<DomainWarmingBatch>;
789
+ decisions: Array<DomainWarmingDecision>;
790
+ evidence: DomainWarmingEvidence;
791
+ holds: DomainWarmingHolds;
792
+ };
793
+ export type CreateDomainWarmingPlanPayload = {
794
+ identity: "new" | "migrating" | "returning";
795
+ initialDailyRecipients: number;
796
+ dailyGrowthPercent: number;
797
+ targetDailyRecipients: number;
798
+ };
799
+ export type UpdateDomainWarmingPolicyPayload = {
800
+ dailyGrowthPercent: number;
801
+ targetDailyRecipients: number;
802
+ note?: string | null | undefined;
803
+ };
804
+ export type DomainWarmingNotePayload = {
805
+ note?: string | null | undefined;
806
+ };
600
807
  export type CreateMediaPayload = {
601
808
  filename: string;
602
809
  contentType: string;
603
810
  sizeBytes: number;
604
- purpose: "attachment" | "avatar";
811
+ purpose: "attachment" | "avatar" | "review_evidence";
605
812
  checksumSha256?: string | null | undefined;
606
813
  };
607
814
  export type OrganizationId = string;
@@ -623,7 +830,7 @@ export type CreatedMedia = {
623
830
  width: number | null;
624
831
  height: number | null;
625
832
  durationMs: number | null;
626
- purpose: "attachment" | "avatar";
833
+ purpose: "attachment" | "avatar" | "review_evidence";
627
834
  checksumSha256: string | null;
628
835
  expiresAt: string | null;
629
836
  createdAt: string;
@@ -640,7 +847,7 @@ export type Media = {
640
847
  width: number | null;
641
848
  height: number | null;
642
849
  durationMs: number | null;
643
- purpose: "attachment" | "avatar";
850
+ purpose: "attachment" | "avatar" | "review_evidence";
644
851
  checksumSha256: string | null;
645
852
  expiresAt: string | null;
646
853
  createdAt: string;
@@ -973,6 +1180,8 @@ export type TemplateSummary = {
973
1180
  status: "draft" | "pending" | "approved" | "published" | "rejected" | "archived";
974
1181
  usageCount: number;
975
1182
  lastUsedAt: string | null;
1183
+ workspaceRevision: string | null;
1184
+ previewFixture: string | null;
976
1185
  createdAt: string;
977
1186
  updatedAt: string;
978
1187
  };
@@ -1091,7 +1300,7 @@ export type DesignSettings = {
1091
1300
  export type CreateWebhookPayload = {
1092
1301
  name: string;
1093
1302
  url: string;
1094
- eventTypes: Array<"message.sent" | "message.delivered" | "message.read" | "message.failed" | "message.bounced" | "message.complained" | "message.received" | "contact.created" | "contact.updated" | "contact.deleted" | "conversation.started" | "conversation.ended" | "conversation.created" | "conversation.updated" | "conversation.archived" | "template.created" | "template.updated" | "template.deleted" | "template.approved" | "template.rejected" | "webhook.created" | "webhook.updated" | "webhook.deleted" | "webhook.test" | "domain.updated">;
1303
+ eventTypes: Array<"message.sent" | "message.delivered" | "message.read" | "message.failed" | "message.bounced" | "message.complained" | "message.received" | "contact.created" | "contact.updated" | "contact.deleted" | "conversation.started" | "conversation.ended" | "conversation.created" | "conversation.updated" | "conversation.archived" | "template.created" | "template.updated" | "template.deleted" | "template.approved" | "template.rejected" | "webhook.created" | "webhook.updated" | "webhook.deleted" | "webhook.test" | "domain.updated" | "domain.warming.updated">;
1095
1304
  channels?: Array<"email"> | null | undefined;
1096
1305
  headers?: {
1097
1306
  [key: string]: string;
@@ -1102,7 +1311,27 @@ export type WebhookEndpoint = {
1102
1311
  id: WebhookEndpointId;
1103
1312
  name: string;
1104
1313
  url: string;
1105
- eventTypes: Array<"message.sent" | "message.delivered" | "message.read" | "message.failed" | "message.bounced" | "message.complained" | "message.received" | "contact.created" | "contact.updated" | "contact.deleted" | "conversation.started" | "conversation.ended" | "conversation.created" | "conversation.updated" | "conversation.archived" | "template.created" | "template.updated" | "template.deleted" | "template.approved" | "template.rejected" | "webhook.created" | "webhook.updated" | "webhook.deleted" | "webhook.test" | "domain.updated">;
1314
+ eventTypes: Array<"message.sent" | "message.delivered" | "message.read" | "message.failed" | "message.bounced" | "message.complained" | "message.received" | "contact.created" | "contact.updated" | "contact.deleted" | "conversation.started" | "conversation.ended" | "conversation.created" | "conversation.updated" | "conversation.archived" | "template.created" | "template.updated" | "template.deleted" | "template.approved" | "template.rejected" | "webhook.created" | "webhook.updated" | "webhook.deleted" | "webhook.test" | "domain.updated" | "domain.warming.updated">;
1315
+ channels: Array<"email"> | null;
1316
+ status: "active" | "disabled";
1317
+ hasCustomHeaders: boolean;
1318
+ failureStartedAt: string | null;
1319
+ lastSucceededAt: string | null;
1320
+ createdAt: string;
1321
+ updatedAt: string;
1322
+ };
1323
+ export type WebhookDeliveryCounts = {
1324
+ total: number;
1325
+ pending: number;
1326
+ delivered: number;
1327
+ exhausted: number;
1328
+ cancelled: number;
1329
+ };
1330
+ export type WebhookEndpointListItem = {
1331
+ id: WebhookEndpointId;
1332
+ name: string;
1333
+ url: string;
1334
+ eventTypes: Array<"message.sent" | "message.delivered" | "message.read" | "message.failed" | "message.bounced" | "message.complained" | "message.received" | "contact.created" | "contact.updated" | "contact.deleted" | "conversation.started" | "conversation.ended" | "conversation.created" | "conversation.updated" | "conversation.archived" | "template.created" | "template.updated" | "template.deleted" | "template.approved" | "template.rejected" | "webhook.created" | "webhook.updated" | "webhook.deleted" | "webhook.test" | "domain.updated" | "domain.warming.updated">;
1106
1335
  channels: Array<"email"> | null;
1107
1336
  status: "active" | "disabled";
1108
1337
  hasCustomHeaders: boolean;
@@ -1110,11 +1339,12 @@ export type WebhookEndpoint = {
1110
1339
  lastSucceededAt: string | null;
1111
1340
  createdAt: string;
1112
1341
  updatedAt: string;
1342
+ deliveries: WebhookDeliveryCounts;
1113
1343
  };
1114
1344
  export type UpdateWebhookPayload = {
1115
1345
  name?: string | null | undefined;
1116
1346
  url?: string | null | undefined;
1117
- eventTypes?: Array<"message.sent" | "message.delivered" | "message.read" | "message.failed" | "message.bounced" | "message.complained" | "message.received" | "contact.created" | "contact.updated" | "contact.deleted" | "conversation.started" | "conversation.ended" | "conversation.created" | "conversation.updated" | "conversation.archived" | "template.created" | "template.updated" | "template.deleted" | "template.approved" | "template.rejected" | "webhook.created" | "webhook.updated" | "webhook.deleted" | "webhook.test" | "domain.updated"> | null | undefined;
1347
+ eventTypes?: Array<"message.sent" | "message.delivered" | "message.read" | "message.failed" | "message.bounced" | "message.complained" | "message.received" | "contact.created" | "contact.updated" | "contact.deleted" | "conversation.started" | "conversation.ended" | "conversation.created" | "conversation.updated" | "conversation.archived" | "template.created" | "template.updated" | "template.deleted" | "template.approved" | "template.rejected" | "webhook.created" | "webhook.updated" | "webhook.deleted" | "webhook.test" | "domain.updated" | "domain.warming.updated"> | null | undefined;
1118
1348
  channels?: Array<"email"> | null | null | undefined;
1119
1349
  headers?: {
1120
1350
  [key: string]: string;
@@ -1129,6 +1359,21 @@ export type TestWebhookPayload = {
1129
1359
  export type WebhookEventId = string;
1130
1360
  export type WebhookDeliveryId = string;
1131
1361
  export type WebhookAttemptId = string;
1362
+ export type WebhookDailyDeliveries = {
1363
+ date: string;
1364
+ pending: number;
1365
+ delivered: number;
1366
+ exhausted: number;
1367
+ cancelled: number;
1368
+ };
1369
+ export type WebhookStatsResponse = {
1370
+ total: number;
1371
+ pending: number;
1372
+ delivered: number;
1373
+ exhausted: number;
1374
+ cancelled: number;
1375
+ daily: Array<WebhookDailyDeliveries>;
1376
+ };
1132
1377
  export type Organization = {
1133
1378
  id: string;
1134
1379
  billingAccountId: string;
@@ -1251,9 +1496,9 @@ export type MessagesSendErrors = {
1251
1496
  */
1252
1497
  402: PaymentRequiredError;
1253
1498
  /**
1254
- * ForbiddenError | FlagDisabledError
1499
+ * ForbiddenError | OnboardingReviewRequiredError | FlagDisabledError
1255
1500
  */
1256
- 403: FlagDisabledError | ForbiddenError;
1501
+ 403: OnboardingReviewRequiredError | FlagDisabledError | ForbiddenError;
1257
1502
  /**
1258
1503
  * ResourceNotFoundError
1259
1504
  */
@@ -1393,6 +1638,38 @@ export type MessagesGetEmailResponses = {
1393
1638
  * Success
1394
1639
  */
1395
1640
  200: {
1641
+ deliveries: Array<{
1642
+ scheduling: {
1643
+ dueAt: string;
1644
+ expiresAt: string;
1645
+ waitReason: "rate" | "daily-quota" | "domain-health" | "tenant-health" | "provider-unavailable" | "retry" | "campaign-paused" | "domain-warming" | "onboarding-review" | null;
1646
+ } | null;
1647
+ id: string;
1648
+ messageId: string;
1649
+ recipientId: string | null;
1650
+ channel: "email";
1651
+ status: "pending" | "scheduled" | "queued" | "processing" | "sent" | "delivered" | "read" | "failed" | "bounced" | "complained";
1652
+ attemptCount: number;
1653
+ maxAttempts: number;
1654
+ queuedAt: string | null;
1655
+ claimedAt: string | null;
1656
+ lastAttemptAt: string | null;
1657
+ nextRetryAt: string | null;
1658
+ sentAt: string | null;
1659
+ deliveredAt: string | null;
1660
+ readAt: string | null;
1661
+ failedAt: string | null;
1662
+ terminalAt: string | null;
1663
+ errorCode: string | null;
1664
+ errorMessage: string | null;
1665
+ errorDetails: JsonValue | null;
1666
+ cost: string;
1667
+ currency: string;
1668
+ idempotencyKey: string | null;
1669
+ metadata: JsonValue | null;
1670
+ createdAt: string;
1671
+ updatedAt: string;
1672
+ }>;
1396
1673
  id: MessageId;
1397
1674
  organizationId: string;
1398
1675
  conversationId: ConversationId | null;
@@ -1445,6 +1722,51 @@ export type MessagesGetEmailResponses = {
1445
1722
  };
1446
1723
  };
1447
1724
  export type MessagesGetEmailResponse = MessagesGetEmailResponses[keyof MessagesGetEmailResponses];
1725
+ export type MessagesValidateEmailData = {
1726
+ body: {
1727
+ conversationId?: ConversationId | null | null | undefined;
1728
+ metadata?: MessageMetadata | undefined;
1729
+ channel: "email";
1730
+ to: EmailRecipients;
1731
+ cc?: EmailCcRecipients | undefined;
1732
+ bcc?: EmailBccRecipients | undefined;
1733
+ from?: EmailSender | undefined;
1734
+ email: EmailContent;
1735
+ };
1736
+ path?: never;
1737
+ query?: never;
1738
+ url: "/v1/messages/validate/email";
1739
+ };
1740
+ export type MessagesValidateEmailErrors = {
1741
+ /**
1742
+ * UnauthorizedError
1743
+ */
1744
+ 401: UnauthorizedError;
1745
+ /**
1746
+ * ForbiddenError
1747
+ */
1748
+ 403: ForbiddenError;
1749
+ /**
1750
+ * ResourceNotFoundError
1751
+ */
1752
+ 404: ResourceNotFoundError;
1753
+ /**
1754
+ * ValidationError
1755
+ */
1756
+ 422: ValidationError;
1757
+ /**
1758
+ * InternalError
1759
+ */
1760
+ 500: InternalError;
1761
+ };
1762
+ export type MessagesValidateEmailError = MessagesValidateEmailErrors[keyof MessagesValidateEmailErrors];
1763
+ export type MessagesValidateEmailResponses = {
1764
+ /**
1765
+ * ValidateEmailResponse
1766
+ */
1767
+ 200: ValidateEmailResponse;
1768
+ };
1769
+ export type MessagesValidateEmailResponse = MessagesValidateEmailResponses[keyof MessagesValidateEmailResponses];
1448
1770
  export type MessagesGetStatusData = {
1449
1771
  body?: never;
1450
1772
  path: {
@@ -1642,7 +1964,7 @@ export type ScheduledMessagesListData = {
1642
1964
  body?: never;
1643
1965
  path?: never;
1644
1966
  query?: {
1645
- status?: "pending" | "dispatching" | "dispatched" | "cancelled" | "failed" | null | undefined;
1967
+ status?: "pending" | "dispatching" | "paused" | "dispatched" | "cancelled" | "failed" | null | undefined;
1646
1968
  page?: string | null | undefined;
1647
1969
  limit?: string | null | undefined;
1648
1970
  };
@@ -1677,7 +1999,7 @@ export type ScheduledMessagesCreateData = {
1677
1999
  body: {
1678
2000
  send: DispatchSendMessagePayload;
1679
2001
  scheduledFor: string;
1680
- timezone?: string | null | undefined;
2002
+ timezone?: IanaTimezone | null | undefined;
1681
2003
  idempotencyKey?: string | null | undefined;
1682
2004
  referenceId?: string | null | undefined;
1683
2005
  };
@@ -1794,6 +2116,57 @@ export type ScheduledMessagesCancelResponses = {
1794
2116
  };
1795
2117
  };
1796
2118
  export type ScheduledMessagesCancelResponse = ScheduledMessagesCancelResponses[keyof ScheduledMessagesCancelResponses];
2119
+ export type ScheduledMessagesResumeData = {
2120
+ body: {
2121
+ choice: "send_now";
2122
+ } | {
2123
+ choice: "new_time";
2124
+ scheduledFor: string;
2125
+ };
2126
+ path: {
2127
+ id: ScheduledMessageId;
2128
+ };
2129
+ query?: never;
2130
+ url: "/v1/messages/scheduled/{id}/resume";
2131
+ };
2132
+ export type ScheduledMessagesResumeErrors = {
2133
+ /**
2134
+ * UnauthorizedError
2135
+ */
2136
+ 401: UnauthorizedError;
2137
+ /**
2138
+ * ForbiddenError
2139
+ */
2140
+ 403: ForbiddenError;
2141
+ /**
2142
+ * ResourceNotFoundError
2143
+ */
2144
+ 404: ResourceNotFoundError;
2145
+ /**
2146
+ * ConflictError
2147
+ */
2148
+ 409: ConflictError;
2149
+ /**
2150
+ * ValidationError
2151
+ */
2152
+ 422: ValidationError;
2153
+ /**
2154
+ * InternalError
2155
+ */
2156
+ 500: InternalError;
2157
+ /**
2158
+ * ExternalServiceError
2159
+ */
2160
+ 502: ExternalServiceError;
2161
+ };
2162
+ export type ScheduledMessagesResumeError = ScheduledMessagesResumeErrors[keyof ScheduledMessagesResumeErrors];
2163
+ export type ScheduledMessagesResumeResponses = {
2164
+ /**
2165
+ * ScheduledMessage
2166
+ */
2167
+ 200: ScheduledMessage;
2168
+ };
2169
+ export type ScheduledMessagesResumeResponse = ScheduledMessagesResumeResponses[keyof ScheduledMessagesResumeResponses];
1797
2170
  export type CampaignsListData = {
1798
2171
  body?: never;
1799
2172
  path?: never;
@@ -2292,6 +2665,104 @@ export type CampaignsListRecipientsResponses = {
2292
2665
  };
2293
2666
  };
2294
2667
  export type CampaignsListRecipientsResponse = CampaignsListRecipientsResponses[keyof CampaignsListRecipientsResponses];
2668
+ export type EmailGetOnboardingReviewData = {
2669
+ body?: never;
2670
+ path?: never;
2671
+ query?: never;
2672
+ url: "/v1/email/onboarding-review";
2673
+ };
2674
+ export type EmailGetOnboardingReviewErrors = {
2675
+ /**
2676
+ * UnauthorizedError
2677
+ */
2678
+ 401: UnauthorizedError;
2679
+ /**
2680
+ * ForbiddenError
2681
+ */
2682
+ 403: ForbiddenError;
2683
+ /**
2684
+ * InternalError
2685
+ */
2686
+ 500: InternalError;
2687
+ };
2688
+ export type EmailGetOnboardingReviewError = EmailGetOnboardingReviewErrors[keyof EmailGetOnboardingReviewErrors];
2689
+ export type EmailGetOnboardingReviewResponses = {
2690
+ /**
2691
+ * OnboardingReviewStatus
2692
+ */
2693
+ 200: OnboardingReviewStatus;
2694
+ };
2695
+ export type EmailGetOnboardingReviewResponse = EmailGetOnboardingReviewResponses[keyof EmailGetOnboardingReviewResponses];
2696
+ export type EmailReapplyOnboardingReviewData = {
2697
+ body: {
2698
+ expectedGeneration: number;
2699
+ };
2700
+ path?: never;
2701
+ query?: never;
2702
+ url: "/v1/email/onboarding-review/reapply";
2703
+ };
2704
+ export type EmailReapplyOnboardingReviewErrors = {
2705
+ /**
2706
+ * UnauthorizedError
2707
+ */
2708
+ 401: UnauthorizedError;
2709
+ /**
2710
+ * ForbiddenError
2711
+ */
2712
+ 403: ForbiddenError;
2713
+ /**
2714
+ * ConflictError
2715
+ */
2716
+ 409: ConflictError;
2717
+ /**
2718
+ * InternalError
2719
+ */
2720
+ 500: InternalError;
2721
+ };
2722
+ export type EmailReapplyOnboardingReviewError = EmailReapplyOnboardingReviewErrors[keyof EmailReapplyOnboardingReviewErrors];
2723
+ export type EmailReapplyOnboardingReviewResponses = {
2724
+ /**
2725
+ * OnboardingReviewStatus
2726
+ */
2727
+ 200: OnboardingReviewStatus;
2728
+ };
2729
+ export type EmailReapplyOnboardingReviewResponse = EmailReapplyOnboardingReviewResponses[keyof EmailReapplyOnboardingReviewResponses];
2730
+ export type EmailRespondToOnboardingInformationRequestData = {
2731
+ body: {
2732
+ expectedGeneration: number;
2733
+ responseText: string;
2734
+ evidenceMediaIds: Array<MediaId>;
2735
+ };
2736
+ path?: never;
2737
+ query?: never;
2738
+ url: "/v1/email/onboarding-review/respond";
2739
+ };
2740
+ export type EmailRespondToOnboardingInformationRequestErrors = {
2741
+ /**
2742
+ * UnauthorizedError
2743
+ */
2744
+ 401: UnauthorizedError;
2745
+ /**
2746
+ * ForbiddenError
2747
+ */
2748
+ 403: ForbiddenError;
2749
+ /**
2750
+ * ConflictError
2751
+ */
2752
+ 409: ConflictError;
2753
+ /**
2754
+ * InternalError
2755
+ */
2756
+ 500: InternalError;
2757
+ };
2758
+ export type EmailRespondToOnboardingInformationRequestError = EmailRespondToOnboardingInformationRequestErrors[keyof EmailRespondToOnboardingInformationRequestErrors];
2759
+ export type EmailRespondToOnboardingInformationRequestResponses = {
2760
+ /**
2761
+ * OnboardingReviewStatus
2762
+ */
2763
+ 200: OnboardingReviewStatus;
2764
+ };
2765
+ export type EmailRespondToOnboardingInformationRequestResponse = EmailRespondToOnboardingInformationRequestResponses[keyof EmailRespondToOnboardingInformationRequestResponses];
2295
2766
  export type EmailGetTrackingDefaultsData = {
2296
2767
  body?: never;
2297
2768
  path?: never;
@@ -2610,6 +3081,51 @@ export type EmailAdvanceDomainVerificationResponses = {
2610
3081
  200: EmailDomainVerification;
2611
3082
  };
2612
3083
  export type EmailAdvanceDomainVerificationResponse = EmailAdvanceDomainVerificationResponses[keyof EmailAdvanceDomainVerificationResponses];
3084
+ export type EmailRotateDomainDkimData = {
3085
+ body?: never;
3086
+ headers: {
3087
+ "idempotency-key": string;
3088
+ };
3089
+ path: {
3090
+ id: EmailDomainId;
3091
+ };
3092
+ query?: never;
3093
+ url: "/v1/email/domains/{id}/dkim-rotation";
3094
+ };
3095
+ export type EmailRotateDomainDkimErrors = {
3096
+ /**
3097
+ * UnauthorizedError
3098
+ */
3099
+ 401: UnauthorizedError;
3100
+ /**
3101
+ * ForbiddenError
3102
+ */
3103
+ 403: ForbiddenError;
3104
+ /**
3105
+ * ResourceNotFoundError
3106
+ */
3107
+ 404: ResourceNotFoundError;
3108
+ /**
3109
+ * ConflictError
3110
+ */
3111
+ 409: ConflictError;
3112
+ /**
3113
+ * InternalError
3114
+ */
3115
+ 500: InternalError;
3116
+ /**
3117
+ * EmailChannelError
3118
+ */
3119
+ 502: EmailChannelError;
3120
+ };
3121
+ export type EmailRotateDomainDkimError = EmailRotateDomainDkimErrors[keyof EmailRotateDomainDkimErrors];
3122
+ export type EmailRotateDomainDkimResponses = {
3123
+ /**
3124
+ * EmailDkimRotation
3125
+ */
3126
+ 200: EmailDkimRotation;
3127
+ };
3128
+ export type EmailRotateDomainDkimResponse = EmailRotateDomainDkimResponses[keyof EmailRotateDomainDkimResponses];
2613
3129
  export type EmailRemoveDomainData = {
2614
3130
  body?: never;
2615
3131
  path: {
@@ -3423,7 +3939,45 @@ export type EmailRemoveSenderData = {
3423
3939
  query?: never;
3424
3940
  url: "/v1/email/senders/{id}";
3425
3941
  };
3426
- export type EmailRemoveSenderErrors = {
3942
+ export type EmailRemoveSenderErrors = {
3943
+ /**
3944
+ * UnauthorizedError
3945
+ */
3946
+ 401: UnauthorizedError;
3947
+ /**
3948
+ * ForbiddenError
3949
+ */
3950
+ 403: ForbiddenError;
3951
+ /**
3952
+ * ResourceNotFoundError
3953
+ */
3954
+ 404: ResourceNotFoundError;
3955
+ /**
3956
+ * ValidationError
3957
+ */
3958
+ 422: ValidationError;
3959
+ /**
3960
+ * InternalError
3961
+ */
3962
+ 500: InternalError;
3963
+ };
3964
+ export type EmailRemoveSenderError = EmailRemoveSenderErrors[keyof EmailRemoveSenderErrors];
3965
+ export type EmailRemoveSenderResponses = {
3966
+ /**
3967
+ * SuccessResult
3968
+ */
3969
+ 200: SuccessResult;
3970
+ };
3971
+ export type EmailRemoveSenderResponse = EmailRemoveSenderResponses[keyof EmailRemoveSenderResponses];
3972
+ export type EmailGetSenderData = {
3973
+ body?: never;
3974
+ path: {
3975
+ id: EmailSenderId;
3976
+ };
3977
+ query?: never;
3978
+ url: "/v1/email/senders/{id}";
3979
+ };
3980
+ export type EmailGetSenderErrors = {
3427
3981
  /**
3428
3982
  * UnauthorizedError
3429
3983
  */
@@ -3436,23 +3990,36 @@ export type EmailRemoveSenderErrors = {
3436
3990
  * ResourceNotFoundError
3437
3991
  */
3438
3992
  404: ResourceNotFoundError;
3439
- /**
3440
- * ValidationError
3441
- */
3442
- 422: ValidationError;
3443
3993
  /**
3444
3994
  * InternalError
3445
3995
  */
3446
3996
  500: InternalError;
3447
3997
  };
3448
- export type EmailRemoveSenderError = EmailRemoveSenderErrors[keyof EmailRemoveSenderErrors];
3449
- export type EmailRemoveSenderResponses = {
3998
+ export type EmailGetSenderError = EmailGetSenderErrors[keyof EmailGetSenderErrors];
3999
+ export type EmailGetSenderResponses = {
3450
4000
  /**
3451
- * SuccessResult
4001
+ * Success
3452
4002
  */
3453
- 200: SuccessResult;
4003
+ 200: {
4004
+ id: EmailSenderId;
4005
+ organizationId: string;
4006
+ email: string;
4007
+ name: string | null;
4008
+ domainId: EmailDomainId | null;
4009
+ verificationStatus: "pending" | "verified" | "failed";
4010
+ verifiedAt: string | null;
4011
+ verificationToken: string | null;
4012
+ providerLifecycle: "provisioning" | "active" | "deleting" | "failed";
4013
+ providerFailureCode: string | null;
4014
+ isDefault: boolean;
4015
+ replyToEmails: Array<string> | null;
4016
+ deliverability: DeliverabilityFacts;
4017
+ isActive: boolean;
4018
+ createdAt: string;
4019
+ updatedAt: string;
4020
+ };
3454
4021
  };
3455
- export type EmailRemoveSenderResponse = EmailRemoveSenderResponses[keyof EmailRemoveSenderResponses];
4022
+ export type EmailGetSenderResponse = EmailGetSenderResponses[keyof EmailGetSenderResponses];
3456
4023
  export type EmailSetDefaultSenderData = {
3457
4024
  body?: never;
3458
4025
  path: {
@@ -4164,6 +4731,10 @@ export type EmailCreateForwardingRuleErrors = {
4164
4731
  * ForbiddenError
4165
4732
  */
4166
4733
  403: ForbiddenError;
4734
+ /**
4735
+ * ResourceNotFoundError
4736
+ */
4737
+ 404: ResourceNotFoundError;
4167
4738
  /**
4168
4739
  * ValidationError
4169
4740
  */
@@ -4332,12 +4903,298 @@ export type EmailGetForwardingLogResponses = {
4332
4903
  };
4333
4904
  };
4334
4905
  export type EmailGetForwardingLogResponse = EmailGetForwardingLogResponses[keyof EmailGetForwardingLogResponses];
4906
+ export type EmailGetDomainWarmingData = {
4907
+ body?: never;
4908
+ path: {
4909
+ id: EmailDomainId;
4910
+ };
4911
+ query?: never;
4912
+ url: "/v1/email/domains/{id}/warming";
4913
+ };
4914
+ export type EmailGetDomainWarmingErrors = {
4915
+ /**
4916
+ * UnauthorizedError
4917
+ */
4918
+ 401: UnauthorizedError;
4919
+ /**
4920
+ * ForbiddenError
4921
+ */
4922
+ 403: ForbiddenError;
4923
+ /**
4924
+ * ResourceNotFoundError
4925
+ */
4926
+ 404: ResourceNotFoundError;
4927
+ /**
4928
+ * InternalError
4929
+ */
4930
+ 500: InternalError;
4931
+ };
4932
+ export type EmailGetDomainWarmingError = EmailGetDomainWarmingErrors[keyof EmailGetDomainWarmingErrors];
4933
+ export type EmailGetDomainWarmingResponses = {
4934
+ /**
4935
+ * DomainWarming
4936
+ */
4937
+ 200: DomainWarming;
4938
+ };
4939
+ export type EmailGetDomainWarmingResponse = EmailGetDomainWarmingResponses[keyof EmailGetDomainWarmingResponses];
4940
+ export type EmailCreateDomainWarmingPlanData = {
4941
+ body: {
4942
+ identity: "new" | "migrating" | "returning";
4943
+ initialDailyRecipients: number;
4944
+ dailyGrowthPercent: number;
4945
+ targetDailyRecipients: number;
4946
+ };
4947
+ path: {
4948
+ id: EmailDomainId;
4949
+ };
4950
+ query?: never;
4951
+ url: "/v1/email/domains/{id}/warming";
4952
+ };
4953
+ export type EmailCreateDomainWarmingPlanErrors = {
4954
+ /**
4955
+ * UnauthorizedError
4956
+ */
4957
+ 401: UnauthorizedError;
4958
+ /**
4959
+ * ForbiddenError
4960
+ */
4961
+ 403: ForbiddenError;
4962
+ /**
4963
+ * ResourceNotFoundError
4964
+ */
4965
+ 404: ResourceNotFoundError;
4966
+ /**
4967
+ * ConflictError
4968
+ */
4969
+ 409: ConflictError;
4970
+ /**
4971
+ * ValidationError
4972
+ */
4973
+ 422: ValidationError;
4974
+ /**
4975
+ * InternalError
4976
+ */
4977
+ 500: InternalError;
4978
+ };
4979
+ export type EmailCreateDomainWarmingPlanError = EmailCreateDomainWarmingPlanErrors[keyof EmailCreateDomainWarmingPlanErrors];
4980
+ export type EmailCreateDomainWarmingPlanResponses = {
4981
+ /**
4982
+ * Success
4983
+ */
4984
+ 201: DomainWarming;
4985
+ };
4986
+ export type EmailCreateDomainWarmingPlanResponse = EmailCreateDomainWarmingPlanResponses[keyof EmailCreateDomainWarmingPlanResponses];
4987
+ export type EmailUpdateDomainWarmingPolicyData = {
4988
+ body: {
4989
+ dailyGrowthPercent: number;
4990
+ targetDailyRecipients: number;
4991
+ note?: string | null | undefined;
4992
+ };
4993
+ path: {
4994
+ id: EmailDomainId;
4995
+ };
4996
+ query?: never;
4997
+ url: "/v1/email/domains/{id}/warming/policy";
4998
+ };
4999
+ export type EmailUpdateDomainWarmingPolicyErrors = {
5000
+ /**
5001
+ * UnauthorizedError
5002
+ */
5003
+ 401: UnauthorizedError;
5004
+ /**
5005
+ * ForbiddenError
5006
+ */
5007
+ 403: ForbiddenError;
5008
+ /**
5009
+ * ResourceNotFoundError
5010
+ */
5011
+ 404: ResourceNotFoundError;
5012
+ /**
5013
+ * ConflictError
5014
+ */
5015
+ 409: ConflictError;
5016
+ /**
5017
+ * ValidationError
5018
+ */
5019
+ 422: ValidationError;
5020
+ /**
5021
+ * InternalError
5022
+ */
5023
+ 500: InternalError;
5024
+ };
5025
+ export type EmailUpdateDomainWarmingPolicyError = EmailUpdateDomainWarmingPolicyErrors[keyof EmailUpdateDomainWarmingPolicyErrors];
5026
+ export type EmailUpdateDomainWarmingPolicyResponses = {
5027
+ /**
5028
+ * DomainWarming
5029
+ */
5030
+ 200: DomainWarming;
5031
+ };
5032
+ export type EmailUpdateDomainWarmingPolicyResponse = EmailUpdateDomainWarmingPolicyResponses[keyof EmailUpdateDomainWarmingPolicyResponses];
5033
+ export type EmailCancelDomainWarmingBatchData = {
5034
+ body?: never;
5035
+ path: {
5036
+ id: EmailDomainId;
5037
+ batchId: EmailDomainWarmingBatchId;
5038
+ };
5039
+ query?: never;
5040
+ url: "/v1/email/domains/{id}/warming/batches/{batchId}";
5041
+ };
5042
+ export type EmailCancelDomainWarmingBatchErrors = {
5043
+ /**
5044
+ * UnauthorizedError
5045
+ */
5046
+ 401: UnauthorizedError;
5047
+ /**
5048
+ * ForbiddenError
5049
+ */
5050
+ 403: ForbiddenError;
5051
+ /**
5052
+ * ResourceNotFoundError
5053
+ */
5054
+ 404: ResourceNotFoundError;
5055
+ /**
5056
+ * ConflictError
5057
+ */
5058
+ 409: ConflictError;
5059
+ /**
5060
+ * InternalError
5061
+ */
5062
+ 500: InternalError;
5063
+ };
5064
+ export type EmailCancelDomainWarmingBatchError = EmailCancelDomainWarmingBatchErrors[keyof EmailCancelDomainWarmingBatchErrors];
5065
+ export type EmailCancelDomainWarmingBatchResponses = {
5066
+ /**
5067
+ * DomainWarming
5068
+ */
5069
+ 200: DomainWarming;
5070
+ };
5071
+ export type EmailCancelDomainWarmingBatchResponse = EmailCancelDomainWarmingBatchResponses[keyof EmailCancelDomainWarmingBatchResponses];
5072
+ export type EmailPauseDomainWarmingData = {
5073
+ body: {
5074
+ note?: string | null | undefined;
5075
+ };
5076
+ path: {
5077
+ id: EmailDomainId;
5078
+ };
5079
+ query?: never;
5080
+ url: "/v1/email/domains/{id}/warming/pause";
5081
+ };
5082
+ export type EmailPauseDomainWarmingErrors = {
5083
+ /**
5084
+ * UnauthorizedError
5085
+ */
5086
+ 401: UnauthorizedError;
5087
+ /**
5088
+ * ForbiddenError
5089
+ */
5090
+ 403: ForbiddenError;
5091
+ /**
5092
+ * ResourceNotFoundError
5093
+ */
5094
+ 404: ResourceNotFoundError;
5095
+ /**
5096
+ * ConflictError
5097
+ */
5098
+ 409: ConflictError;
5099
+ /**
5100
+ * InternalError
5101
+ */
5102
+ 500: InternalError;
5103
+ };
5104
+ export type EmailPauseDomainWarmingError = EmailPauseDomainWarmingErrors[keyof EmailPauseDomainWarmingErrors];
5105
+ export type EmailPauseDomainWarmingResponses = {
5106
+ /**
5107
+ * DomainWarming
5108
+ */
5109
+ 200: DomainWarming;
5110
+ };
5111
+ export type EmailPauseDomainWarmingResponse = EmailPauseDomainWarmingResponses[keyof EmailPauseDomainWarmingResponses];
5112
+ export type EmailResumeDomainWarmingData = {
5113
+ body: {
5114
+ note?: string | null | undefined;
5115
+ };
5116
+ path: {
5117
+ id: EmailDomainId;
5118
+ };
5119
+ query?: never;
5120
+ url: "/v1/email/domains/{id}/warming/resume";
5121
+ };
5122
+ export type EmailResumeDomainWarmingErrors = {
5123
+ /**
5124
+ * UnauthorizedError
5125
+ */
5126
+ 401: UnauthorizedError;
5127
+ /**
5128
+ * ForbiddenError
5129
+ */
5130
+ 403: ForbiddenError;
5131
+ /**
5132
+ * ResourceNotFoundError
5133
+ */
5134
+ 404: ResourceNotFoundError;
5135
+ /**
5136
+ * ConflictError
5137
+ */
5138
+ 409: ConflictError;
5139
+ /**
5140
+ * InternalError
5141
+ */
5142
+ 500: InternalError;
5143
+ };
5144
+ export type EmailResumeDomainWarmingError = EmailResumeDomainWarmingErrors[keyof EmailResumeDomainWarmingErrors];
5145
+ export type EmailResumeDomainWarmingResponses = {
5146
+ /**
5147
+ * DomainWarming
5148
+ */
5149
+ 200: DomainWarming;
5150
+ };
5151
+ export type EmailResumeDomainWarmingResponse = EmailResumeDomainWarmingResponses[keyof EmailResumeDomainWarmingResponses];
5152
+ export type EmailCompleteDomainWarmingData = {
5153
+ body: {
5154
+ note?: string | null | undefined;
5155
+ };
5156
+ path: {
5157
+ id: EmailDomainId;
5158
+ };
5159
+ query?: never;
5160
+ url: "/v1/email/domains/{id}/warming/complete";
5161
+ };
5162
+ export type EmailCompleteDomainWarmingErrors = {
5163
+ /**
5164
+ * UnauthorizedError
5165
+ */
5166
+ 401: UnauthorizedError;
5167
+ /**
5168
+ * ForbiddenError
5169
+ */
5170
+ 403: ForbiddenError;
5171
+ /**
5172
+ * ResourceNotFoundError
5173
+ */
5174
+ 404: ResourceNotFoundError;
5175
+ /**
5176
+ * ConflictError
5177
+ */
5178
+ 409: ConflictError;
5179
+ /**
5180
+ * InternalError
5181
+ */
5182
+ 500: InternalError;
5183
+ };
5184
+ export type EmailCompleteDomainWarmingError = EmailCompleteDomainWarmingErrors[keyof EmailCompleteDomainWarmingErrors];
5185
+ export type EmailCompleteDomainWarmingResponses = {
5186
+ /**
5187
+ * DomainWarming
5188
+ */
5189
+ 200: DomainWarming;
5190
+ };
5191
+ export type EmailCompleteDomainWarmingResponse = EmailCompleteDomainWarmingResponses[keyof EmailCompleteDomainWarmingResponses];
4335
5192
  export type MediaCreateData = {
4336
5193
  body: {
4337
5194
  filename: string;
4338
5195
  contentType: string;
4339
5196
  sizeBytes: number;
4340
- purpose: "attachment" | "avatar";
5197
+ purpose: "attachment" | "avatar" | "review_evidence";
4341
5198
  checksumSha256?: string | null | undefined;
4342
5199
  };
4343
5200
  path?: never;
@@ -7908,6 +8765,7 @@ export type WebhooksListData = {
7908
8765
  page?: string | null | undefined;
7909
8766
  limit?: string | null | undefined;
7910
8767
  search?: string | null | undefined;
8768
+ status?: "active" | "disabled" | null | undefined;
7911
8769
  };
7912
8770
  url: "/v1/webhooks";
7913
8771
  };
@@ -7931,7 +8789,7 @@ export type WebhooksListResponses = {
7931
8789
  * Success
7932
8790
  */
7933
8791
  200: {
7934
- items: Array<WebhookEndpoint>;
8792
+ items: Array<WebhookEndpointListItem>;
7935
8793
  pagination: PaginationMeta;
7936
8794
  };
7937
8795
  };
@@ -7940,7 +8798,7 @@ export type WebhooksCreateData = {
7940
8798
  body: {
7941
8799
  name: string;
7942
8800
  url: string;
7943
- eventTypes: Array<"message.sent" | "message.delivered" | "message.read" | "message.failed" | "message.bounced" | "message.complained" | "message.received" | "contact.created" | "contact.updated" | "contact.deleted" | "conversation.started" | "conversation.ended" | "conversation.created" | "conversation.updated" | "conversation.archived" | "template.created" | "template.updated" | "template.deleted" | "template.approved" | "template.rejected" | "webhook.created" | "webhook.updated" | "webhook.deleted" | "webhook.test" | "domain.updated">;
8801
+ eventTypes: Array<"message.sent" | "message.delivered" | "message.read" | "message.failed" | "message.bounced" | "message.complained" | "message.received" | "contact.created" | "contact.updated" | "contact.deleted" | "conversation.started" | "conversation.ended" | "conversation.created" | "conversation.updated" | "conversation.archived" | "template.created" | "template.updated" | "template.deleted" | "template.approved" | "template.rejected" | "webhook.created" | "webhook.updated" | "webhook.deleted" | "webhook.test" | "domain.updated" | "domain.warming.updated">;
7944
8802
  channels?: Array<"email"> | null | undefined;
7945
8803
  headers?: {
7946
8804
  [key: string]: string;
@@ -8068,7 +8926,7 @@ export type WebhooksUpdateData = {
8068
8926
  body: {
8069
8927
  name?: string | null | undefined;
8070
8928
  url?: string | null | undefined;
8071
- eventTypes?: Array<"message.sent" | "message.delivered" | "message.read" | "message.failed" | "message.bounced" | "message.complained" | "message.received" | "contact.created" | "contact.updated" | "contact.deleted" | "conversation.started" | "conversation.ended" | "conversation.created" | "conversation.updated" | "conversation.archived" | "template.created" | "template.updated" | "template.deleted" | "template.approved" | "template.rejected" | "webhook.created" | "webhook.updated" | "webhook.deleted" | "webhook.test" | "domain.updated"> | null | undefined;
8929
+ eventTypes?: Array<"message.sent" | "message.delivered" | "message.read" | "message.failed" | "message.bounced" | "message.complained" | "message.received" | "contact.created" | "contact.updated" | "contact.deleted" | "conversation.started" | "conversation.ended" | "conversation.created" | "conversation.updated" | "conversation.archived" | "template.created" | "template.updated" | "template.deleted" | "template.approved" | "template.rejected" | "webhook.created" | "webhook.updated" | "webhook.deleted" | "webhook.test" | "domain.updated" | "domain.warming.updated"> | null | undefined;
8072
8930
  channels?: Array<"email"> | null | null | undefined;
8073
8931
  headers?: {
8074
8932
  [key: string]: string;
@@ -8194,6 +9052,8 @@ export type WebhooksGetLogsResponses = {
8194
9052
  data: Array<{
8195
9053
  id: WebhookDeliveryId;
8196
9054
  eventId: WebhookEventId;
9055
+ eventType: string;
9056
+ occurredAt: string;
8197
9057
  endpointId: WebhookEndpointId;
8198
9058
  status: "pending" | "delivered" | "exhausted" | "cancelled";
8199
9059
  automaticAttempts: number;
@@ -8227,7 +9087,9 @@ export type WebhooksGetStatsData = {
8227
9087
  path: {
8228
9088
  webhookId: WebhookEndpointId;
8229
9089
  };
8230
- query?: never;
9090
+ query?: {
9091
+ period?: "7d" | "30d" | "90d" | null | undefined;
9092
+ };
8231
9093
  url: "/v1/webhooks/{webhookId}/stats";
8232
9094
  };
8233
9095
  export type WebhooksGetStatsErrors = {
@@ -8251,15 +9113,9 @@ export type WebhooksGetStatsErrors = {
8251
9113
  export type WebhooksGetStatsError = WebhooksGetStatsErrors[keyof WebhooksGetStatsErrors];
8252
9114
  export type WebhooksGetStatsResponses = {
8253
9115
  /**
8254
- * Success
9116
+ * WebhookStatsResponse
8255
9117
  */
8256
- 200: {
8257
- total: number;
8258
- pending: number;
8259
- delivered: number;
8260
- exhausted: number;
8261
- cancelled: number;
8262
- };
9118
+ 200: WebhookStatsResponse;
8263
9119
  };
8264
9120
  export type WebhooksGetStatsResponse = WebhooksGetStatsResponses[keyof WebhooksGetStatsResponses];
8265
9121
  export type WebhooksRetryDeliveryData = {
@@ -8427,7 +9283,7 @@ export type OrganizationsUpdateData = {
8427
9283
  billingEmail?: string | null | undefined;
8428
9284
  countryCode?: string | null | undefined;
8429
9285
  currency?: string | null | undefined;
8430
- timezone?: string | null | undefined;
9286
+ timezone?: IanaTimezone | null | undefined;
8431
9287
  isActive?: boolean | null | undefined;
8432
9288
  metadata?: {
8433
9289
  [key: string]: JsonValue;