@whooshbang/contracts 2.5.0 → 3.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.
Files changed (102) hide show
  1. package/CHANGELOG.md +13 -2
  2. package/README.md +21 -21
  3. package/contract-manifest.json +32 -33
  4. package/dist/generated/artifact-index.d.ts +34 -34
  5. package/dist/generated/artifact-index.js +32 -33
  6. package/dist/generated/artifact-index.js.map +1 -1
  7. package/dist/generated/interaction-v1.d.ts +77 -4
  8. package/dist/generated/validators-standalone.d.ts +492 -492
  9. package/dist/generated/validators-standalone.js +6405 -4572
  10. package/dist/generated/validators-standalone.js.map +1 -1
  11. package/dist/generated/validators.d.ts +2 -2
  12. package/dist/generated/validators.js +1 -0
  13. package/dist/generated/validators.js.map +1 -1
  14. package/dist/generated/whooshbang-v1.d.ts +526 -116
  15. package/dist/index.d.ts +3 -0
  16. package/dist/index.js +1 -0
  17. package/dist/index.js.map +1 -1
  18. package/dist/input-defaults.d.ts +7 -0
  19. package/dist/input-defaults.js +59 -0
  20. package/dist/input-defaults.js.map +1 -0
  21. package/dist/interaction-expiry.js +2 -1
  22. package/dist/interaction-expiry.js.map +1 -1
  23. package/fixtures/core-v1/fixture-index.json +1 -9
  24. package/fixtures/core-v1/problems/idempotency-key-required.json +2 -2
  25. package/fixtures/core-v1/scenarios/api-credential-invalid-indistinguishable.json +1 -1
  26. package/fixtures/core-v1/scenarios/api-credential-one-time-reveal.json +1 -1
  27. package/fixtures/core-v1/scenarios/api-credential-revocation-replay.json +1 -1
  28. package/fixtures/core-v1/scenarios/api-credential-rotation-overlap.json +1 -1
  29. package/fixtures/core-v1/scenarios/cancellation-too-late.json +1 -1
  30. package/fixtures/core-v1/scenarios/cross-organization-project.json +1 -1
  31. package/fixtures/core-v1/scenarios/cross-project-resource.json +1 -1
  32. package/fixtures/core-v1/scenarios/environment-mismatch.json +1 -1
  33. package/fixtures/core-v1/scenarios/idempotency-conflict.json +1 -1
  34. package/fixtures/core-v1/scenarios/idempotency-equivalent-replay.json +1 -1
  35. package/fixtures/core-v1/scenarios/malformed-bearer.json +1 -1
  36. package/fixtures/core-v1/scenarios/metadata-overrun.json +1 -1
  37. package/fixtures/core-v1/scenarios/missing-scope.json +1 -1
  38. package/fixtures/core-v1/scenarios/project-create-equivalent-replay.json +1 -1
  39. package/fixtures/core-v1/scenarios/project-slug-conflict.json +1 -1
  40. package/fixtures/core-v1/scenarios/provider-outcome-unknown.json +1 -1
  41. package/fixtures/core-v1/scenarios/subscription-activation-replay.json +1 -1
  42. package/fixtures/core-v1/scenarios/subscription-authorization-capability-opacity.json +1 -1
  43. package/fixtures/core-v1/scenarios/subscription-cross-connection-callback-rejected.json +1 -1
  44. package/fixtures/core-v1/scenarios/subscription-expired-replay.json +1 -1
  45. package/fixtures/core-v1/scenarios/subscription-selected-connection-replay.json +1 -1
  46. package/fixtures/interaction-machine-v1/scenarios/ack-conflict.json +1 -1
  47. package/fixtures/interaction-machine-v1/scenarios/ack-cross-machine.json +1 -1
  48. package/fixtures/interaction-machine-v1/scenarios/ack-out-of-order.json +1 -1
  49. package/fixtures/interaction-machine-v1/scenarios/ack-replay.json +1 -1
  50. package/fixtures/interaction-machine-v1/scenarios/ambiguous-free-text.json +1 -1
  51. package/fixtures/interaction-machine-v1/scenarios/callback-token-opacity.json +1 -1
  52. package/fixtures/interaction-machine-v1/scenarios/credential-registration-conflict.json +1 -1
  53. package/fixtures/interaction-machine-v1/scenarios/credential-registration-replay.json +1 -1
  54. package/fixtures/interaction-machine-v1/scenarios/credential-revocation-replay.json +1 -1
  55. package/fixtures/interaction-machine-v1/scenarios/credential-rotation.json +1 -1
  56. package/fixtures/interaction-machine-v1/scenarios/first-credential-activates.json +1 -1
  57. package/fixtures/interaction-machine-v1/scenarios/interaction-duplicate.json +1 -1
  58. package/fixtures/interaction-machine-v1/scenarios/interaction-expired.json +1 -1
  59. package/fixtures/interaction-machine-v1/scenarios/interaction-mismatch.json +1 -1
  60. package/fixtures/interaction-machine-v1/scenarios/interaction-retired.json +1 -1
  61. package/fixtures/interaction-machine-v1/scenarios/interaction-stale.json +1 -1
  62. package/fixtures/interaction-machine-v1/scenarios/machine-admin-denied.json +1 -1
  63. package/fixtures/interaction-machine-v1/scenarios/machine-bound-message-create.json +1 -1
  64. package/fixtures/interaction-machine-v1/scenarios/machine-cancel-denied.json +1 -1
  65. package/fixtures/interaction-machine-v1/scenarios/machine-crash-before-ack.json +1 -1
  66. package/fixtures/interaction-machine-v1/scenarios/machine-notifier-mismatch.json +1 -1
  67. package/fixtures/interaction-machine-v1/scenarios/machine-other-message-read.json +1 -1
  68. package/fixtures/interaction-machine-v1/scenarios/machine-owned-message-read.json +1 -1
  69. package/fixtures/interaction-machine-v1/scenarios/machine-subscriber-mismatch.json +1 -1
  70. package/fixtures/interaction-machine-v1/scenarios/poll-uncommitted-cursor-rejected.json +1 -1
  71. package/fixtures/interaction-machine-v1/scenarios/project-credential-machine-endpoint-denied.json +1 -1
  72. package/fixtures/interaction-machine-v1/scenarios/quarantine-integrity-rejected.json +1 -1
  73. package/fixtures/interaction-machine-v1/scenarios/quarantine-signature-rejected.json +1 -1
  74. package/fixtures/interaction-machine-v1/scenarios/quarantine-valid.json +1 -1
  75. package/fixtures/interaction-machine-v1/scenarios/revoked-machine-credential.json +1 -1
  76. package/fixtures/recipient-experience-v1/scenarios/membership-broadcast-snapshot.json +1 -1
  77. package/fixtures/recipient-experience-v1/scenarios/preferred-binding-resolution.json +1 -1
  78. package/fixtures/recipient-experience-v1/scenarios/recipient-session-security.json +1 -1
  79. package/fixtures/recipient-experience-v1/scenarios/subscriber-initial-groups-transaction.json +1 -1
  80. package/openapi/generated/whooshbang-v1.bundle.json +1009 -302
  81. package/openapi/whooshbang-v1.yaml +455 -74
  82. package/package.json +1 -1
  83. package/schemas/core-scenario.schema.json +1 -1
  84. package/schemas/events/agent-binding-degraded-v1.schema.json +1 -1
  85. package/schemas/events/interaction-expired-v1.schema.json +1 -1
  86. package/schemas/events/interaction-received-v1.schema.json +1 -1
  87. package/schemas/events/message-delivered-v1.schema.json +1 -1
  88. package/schemas/events/message-expired-v1.schema.json +1 -1
  89. package/schemas/events/message-failed-v1.schema.json +1 -1
  90. package/schemas/events/message-provider-accepted-v1.schema.json +1 -1
  91. package/schemas/events/subscription-activated-v1.schema.json +1 -1
  92. package/schemas/events/subscription-revoked-v1.schema.json +1 -1
  93. package/schemas/events/whooshbang-event-v1.schema.json +1 -1
  94. package/schemas/fixture-index.schema.json +1 -1
  95. package/schemas/interaction-machine-scenario.schema.json +1 -1
  96. package/schemas/interaction-v1.schema.json +192 -5
  97. package/schemas/machine-v1.schema.json +1 -1
  98. package/schemas/provider-capabilities-v1.schema.json +1 -1
  99. package/schemas/webhooks/webhook-delivery-case-v1.schema.json +1 -1
  100. package/schemas/webhooks/webhook-signing-vector-v1.schema.json +1 -1
  101. package/schemas/whooshbang-v1.schema.json +410 -63
  102. package/fixtures/core-v1/problems/replay-unavailable-rollout.json +0 -16
@@ -5,7 +5,7 @@
5
5
  /**
6
6
  * Public request, resource, summary, and Problem Details models for the WhooshBang V1 REST API.
7
7
  */
8
- export type WhooshBangV1ContractDocument = OrganizationProjection | Teammate | TeammateCollection | TeammateAccessRequest | InviteTeammateRequest | CloseOrganizationRequest | OrganizationClosureResult | CreateProjectRequest | Project | UpdateProjectRequest | PrivacyMode | ProjectCollection | RecipientCopyOverrideCollection | UpdateRecipientCopyOverrideRequest | CreateApiCredentialRequest | RotateApiCredentialRequest | ApiCredential | ApiCredentialCollection | ApiCredentialSecretReveal | ApiCredentialRotation | CreateOrganizationCredentialRequest | RotateOrganizationCredentialRequest | OrganizationCredential | OrganizationCredentialCollection | OrganizationCredentialSecretReveal | OrganizationCredentialRotation | CreateCustomerEndpointRequest | CustomerEndpoint | CustomerEndpointCollection | CustomerEndpointMutationResult | CustomerEndpointAttemptCollection | CustomerEndpointVerificationChallenge | CreateSubscriptionLinkRequest | SubscriptionLink | CreateMessageRequest | Message | Problem | IdempotencyKey | ProviderCapabilitiesCollection | ProviderInstallationCollection | EmailDomainCollection | CreateEmailDomainRequest | CreateEmailBindingImportRequest | EmailBindingImportJob | ConnectionProviderCollection | ChannelConnection | ChannelConnectionCollection | CreateChannelConnectionRequest | UpdateChannelConnectionRequest | RotateChannelConnectionCredentialRequest | NotifierConnectionCollection | AttachNotifierConnectionRequest | ConnectionTest | ConnectionTestCollection | CreateConnectionTestRequest | CustomerApplicationManifest | ProjectRecipientExperience | UpdateProjectRecipientExperienceRequest | RecipientBrandLogoUpload | NotificationImageAsset | EnvironmentRecipientExperience | UpdateEnvironmentRecipientExperienceRequest | SubscriberChannelSettings | AcknowledgeEmailRemediationRequest | CreateRecipientSessionRequest | CreateRecipientSessionResponse | RecipientSession | CreateProviderHandoffRequest | ProviderHandoff | RecipientHandoffCompletion | SetPreferredBindingRequest | PreferredBinding | CreateSubscriberRequest | UpdateSubscriberRequest | SubscriberCollection | Subscriber | SubscriberDataExport | CreateSubscriberGroupRequest | SubscriberGroup | SubscriberGroupCollection | SubscriberGroupMembership | SubscriberGroupMembershipCollection | CreateGroupBroadcastRequest | GroupBroadcast | AssertEmailConsentRequest | BindingSummary | UsageReport | MessageListEntry | MessageListPage | MessageDeliveryTimelineEntry | RetainedMessageContent | MessageDeliveryHistory | InteractionTimelineEntry | InteractionTimeline | UpdateEmailSenderRequest | CustomerEventDeliveryAttempt | CustomerEventDeliveryHistory | DeliveryHolds | MachineClientOperations | MachineClientOperationsList | RecipientCopyCatalogue | MessageNotificationImage | BillingAccount | BillingCard | CardSetup | CreateCreditPurchaseRequest | CreditPurchase | BillingInvoice | BillingInvoiceCollection | UpdateBillingReceiptEmailRequest | BillingEntitlements | SubscriptionSelection1 | ProjectAttribution | UpdateProjectAttributionRequest | BillingProjectSlots | AssignBillingProjectSlotsRequest | UpdateAutoTopUpSettingsRequest | AutoTopUpSettings | SubscriptionChange | ConfirmSubscriptionChangeRequest | Operator | OperatorCollection | OperatorResolution | CreateOperatorMessageRequest | OperatorMessageResult | OperatorBroadcastRecipient | OperatorBroadcast | OperatorPreferences | OperatorConnectRequest | WhoAmI | BillingPromotions | BillingPromotion | RedeemBillingPromotionRequest;
8
+ export type WhooshBangV1ContractDocument = OrganizationProjection | Teammate | TeammateCollection | TeammateAccessRequest | InviteTeammateRequest | CloseOrganizationRequest | OrganizationClosureResult | CreateProjectRequest | Project | UpdateProjectRequest | PrivacyMode | ProjectCollection | RecipientCopyOverrideCollection | UpdateRecipientCopyOverrideRequest | CreateApiCredentialRequest | RotateApiCredentialRequest | ApiCredential | ApiCredentialCollection | ApiCredentialSecretReveal | ApiCredentialRotation | CreateOrganizationCredentialRequest | RotateOrganizationCredentialRequest | OrganizationCredential | OrganizationCredentialCollection | OrganizationCredentialSecretReveal | OrganizationCredentialRotation | CreateCustomerEndpointRequest | CustomerEndpoint | CustomerEndpointCollection | CustomerEndpointMutationResult | CustomerEndpointAttemptCollection | CustomerEndpointVerificationChallenge | CreateSubscriptionLinkRequest | SubscriptionLink | CreateMessageRequest | Message | Problem | IdempotencyKey | ProviderCapabilitiesCollection | ProviderInstallationCollection | EmailDomainCollection | CreateEmailDomainRequest | CreateEmailBindingImportRequest | EmailBindingImportJob | ConnectionProviderCollection | ChannelConnection | ChannelConnectionCollection | CreateChannelConnectionRequest | UpdateChannelConnectionRequest | RotateChannelConnectionCredentialRequest | NotifierConnectionCollection | AttachNotifierConnectionRequest | ConnectionTest | ConnectionTestCollection | CreateConnectionTestRequest | CustomerApplicationManifest | ProjectRecipientExperience | UpdateProjectRecipientExperienceRequest | RecipientBrandLogoUpload | NotificationImageAsset | EnvironmentRecipientExperience | UpdateEnvironmentRecipientExperienceRequest | SubscriberChannelSettings | AcknowledgeEmailRemediationRequest | CreateRecipientSessionRequest | CreateRecipientSessionResponse | RecipientSession | CreateProviderHandoffRequest | ProviderHandoff | RecipientHandoffCompletion | SetPreferredBindingRequest | PreferredBinding | CreateSubscriberRequest | UpdateSubscriberRequest | SubscriberCollection | Subscriber | SubscriberDataExport | CreateSubscriberGroupRequest | SubscriberGroup | SubscriberGroupCollection | SubscriberGroupMembership | SubscriberGroupMembershipCollection | CreateGroupBroadcastRequest | GroupBroadcast | AssertEmailConsentRequest | BindingSummary | UsageReport | MessageListEntry | MessageListPage | MessageDeliveryTimelineEntry | RetainedMessageContent | MessageDeliveryHistory | InteractionTimelineEntry | InteractionTimeline | UpdateEmailSenderRequest | CustomerEventDeliveryAttempt | CustomerEventDeliveryHistory | DeliveryHolds | MachineClientOperations | MachineClientOperationsList | RecipientCopyCatalogue | MessageNotificationImage | BillingAccount | BillingCard | CardSetup | CreateCreditPurchaseRequest | CreditPurchase | BillingInvoice | BillingInvoiceCollection | UpdateBillingReceiptEmailRequest | BillingEntitlements | SubscriptionSelection1 | ProjectAttribution | UpdateProjectAttributionRequest | BillingProjectSlots | AssignBillingProjectSlotsRequest | UpdateAutoTopUpSettingsRequest | AutoTopUpSettings | SubscriptionChange | ConfirmSubscriptionChangeRequest | Operator | OperatorCollection | OperatorResolution | CreateOperatorMessageRequest | OperatorMessageResult | OperatorBroadcastRecipient | OperatorBroadcast | OperatorPreferences | OperatorConnectRequest | WhoAmI | BillingPromotions | BillingPromotion | RedeemBillingPromotionRequest | CanonicalCreateMessageRequest | CanonicalCreateGroupBroadcastRequest | CanonicalCreateOperatorMessageRequest;
9
9
  /**
10
10
  * An opaque identifier. Its shape, ordering, and embedded content are not public promises.
11
11
  */
@@ -328,7 +328,7 @@ export type CreateSubscriptionLinkRequest = {
328
328
  * @minItems 1
329
329
  * @maxItems 1
330
330
  */
331
- channels: [Channel];
331
+ channels?: [Channel];
332
332
  /**
333
333
  * An opaque identifier. Its shape, ordering, and embedded content are not public promises.
334
334
  */
@@ -529,8 +529,17 @@ export type ProblemCode = "authentication_required" | "credential_invalid" | "sc
529
529
  */
530
530
  export type CreateMessageRequest = {
531
531
  [k: string]: unknown;
532
- } & {
533
- to: MessageTarget;
532
+ } & ({
533
+ content: MessageContentInput;
534
+ [k: string]: unknown;
535
+ } | {
536
+ /**
537
+ * Options infer select; otherwise confirm. Typed replies require type: input. Omit expiry for 24 hours.
538
+ */
539
+ interaction: ConfirmInteractionSendRequest | SelectInteractionSendRequest | InputInteractionSendRequest;
540
+ [k: string]: unknown;
541
+ }) & {
542
+ to: MessageTarget | OpaqueIdentifier;
534
543
  notifier_id?: OpaqueIdentifier;
535
544
  /**
536
545
  * Optional routing override. Simulator delivery and the reserved test: subscriber prefix are test-environment-only; live requests are refused with 400 request_invalid. Omit for connection delivery, or for the reserved test-environment simulator default.
@@ -540,7 +549,7 @@ export type CreateMessageRequest = {
540
549
  * Optional channel connection to send through, from the environment's connections. The subscriber must be connected through it; the service never substitutes another connection or provider. A connection the subscriber has not connected through is refused as `subscriber_not_connected` when they are connected through another, and as an unchosen send would be (`subscriber_unbound` or `preferred_binding_unavailable`) when no connected channel can take the message. Omitted, the service chooses: the subscriber's preferred channel when they set one, otherwise the default connection when they are connected there, otherwise the connection they connected through most recently. The accepted message's `binding.connection_id` records the connection used. Implies `delivery_target: connection`.
541
550
  */
542
551
  connection_id?: OpaqueIdentifier;
543
- content: MessageContent;
552
+ content?: MessageContentInput;
544
553
  /**
545
554
  * An RFC 3339 timestamp with a UTC offset. The server is authoritative.
546
555
  */
@@ -548,7 +557,7 @@ export type CreateMessageRequest = {
548
557
  correlation_id?: string;
549
558
  metadata?: Metadata;
550
559
  /**
551
- * Send-time interaction. Choose expires_in_seconds or expires_at; omit both for 24 hours from server acceptance. Idempotent replays retain the original resolved deadline.
560
+ * Options infer select; otherwise confirm. Typed replies require type: input. Omit expiry for 24 hours.
552
561
  */
553
562
  interaction?: ConfirmInteractionSendRequest | SelectInteractionSendRequest | InputInteractionSendRequest;
554
563
  /**
@@ -556,7 +565,7 @@ export type CreateMessageRequest = {
556
565
  */
557
566
  purpose?: "service" | "marketing";
558
567
  };
559
- export type MessageContent = TextContent | DocumentContent;
568
+ export type MessageContentInput = string | TextContentInput | DocumentContentInput;
560
569
  /**
561
570
  * An opaque immutable version identity for one environment-owned notification image.
562
571
  */
@@ -1014,7 +1023,7 @@ export type Problem1 = {
1014
1023
  [k: string]: unknown;
1015
1024
  } | {
1016
1025
  type?: "https://whooshbang.flowxo.com/problems/idempotency_key_required";
1017
- title?: "Idempotency key required";
1026
+ title?: "Invalid idempotency key" | "Idempotency key required";
1018
1027
  status?: 400;
1019
1028
  code?: "idempotency_key_required";
1020
1029
  retryable?: false;
@@ -2306,10 +2315,11 @@ export type CreateConnectionTestRequest = {
2306
2315
  text?: string;
2307
2316
  content?: MessageContent;
2308
2317
  /**
2309
- * Send-time interaction. Choose expires_in_seconds or expires_at; omit both for 24 hours from server acceptance. Idempotent replays retain the original resolved deadline.
2318
+ * Options infer select; otherwise confirm. Typed replies require type: input. Omit expiry for 24 hours.
2310
2319
  */
2311
2320
  interaction?: ConfirmInteractionSendRequest | SelectInteractionSendRequest | InputInteractionSendRequest;
2312
2321
  };
2322
+ export type MessageContent = TextContent | DocumentContent;
2313
2323
  /**
2314
2324
  * An opaque identifier for one normalized project-owned recipient brand logo.
2315
2325
  */
@@ -2379,6 +2389,10 @@ export type RecipientHandoffCompletion = {
2379
2389
  * A named IANA time-zone identifier. Numeric offsets, abbreviations and display labels are invalid; recognized aliases normalize to the runtime's canonical identifier before persistence. Providers may leave it absent.
2380
2390
  */
2381
2391
  export type TimeZone = string;
2392
+ /**
2393
+ * A stable, case-sensitive subscriber group key. Existing keys are preserved exactly.
2394
+ */
2395
+ export type GroupKey = string;
2382
2396
  /**
2383
2397
  * An environment-scoped static group. Deletion is terminal and reserves the immutable key for history.
2384
2398
  */
@@ -2392,7 +2406,7 @@ export type SubscriberGroup = {
2392
2406
  id: OpaqueIdentifier;
2393
2407
  project_id: OpaqueIdentifier;
2394
2408
  environment: Environment;
2395
- key: DeveloperKey;
2409
+ key: GroupKey;
2396
2410
  display_name: string;
2397
2411
  description?: string;
2398
2412
  status: "active" | "archived";
@@ -2410,7 +2424,7 @@ export type SubscriberGroupMembership = {
2410
2424
  [k: string]: unknown;
2411
2425
  } & {
2412
2426
  group_id: OpaqueIdentifier;
2413
- group_key: DeveloperKey;
2427
+ group_key: GroupKey;
2414
2428
  subscriber_id: OpaqueIdentifier;
2415
2429
  /**
2416
2430
  * What to call the subscriber, resolved as on the subscriber's `name`: your display name, otherwise the channel's own name where the privacy setting keeps it. Absent when there is neither.
@@ -2424,14 +2438,47 @@ export type SubscriberGroupMembership = {
2424
2438
  updated_at: Timestamp;
2425
2439
  diagnostic_id: DiagnosticId;
2426
2440
  };
2441
+ /**
2442
+ * Creates one group broadcast using the existing ordinary message envelope. The group target comes only from the path.
2443
+ */
2444
+ export type CreateGroupBroadcastRequest = ({
2445
+ content: MessageContentInput;
2446
+ [k: string]: unknown;
2447
+ } | {
2448
+ /**
2449
+ * Options infer select; otherwise confirm. Typed replies require type: input. Omit expiry for 24 hours.
2450
+ */
2451
+ interaction: ConfirmInteractionSendRequest | SelectInteractionSendRequest | InputInteractionSendRequest;
2452
+ [k: string]: unknown;
2453
+ }) & {
2454
+ notifier_id?: OpaqueIdentifier;
2455
+ content?: MessageContentInput;
2456
+ /**
2457
+ * An RFC 3339 timestamp with a UTC offset. The server is authoritative.
2458
+ */
2459
+ expires_at?: string;
2460
+ correlation_id?: string;
2461
+ metadata?: Metadata;
2462
+ /**
2463
+ * Options infer select; otherwise confirm. Typed replies require type: input. Omit expiry for 24 hours.
2464
+ */
2465
+ interaction?: ConfirmInteractionSendRequest | SelectInteractionSendRequest | InputInteractionSendRequest;
2466
+ /**
2467
+ * Omitted means service. Marketing refuses service-only bindings before charging and at every delayed dispatch.
2468
+ */
2469
+ purpose?: "service" | "marketing";
2470
+ };
2427
2471
  /**
2428
2472
  * Assert prior consent or enroll an application-verified user for service email on an exact customer-owned connection. Revocation and sending restrictions always win.
2429
2473
  */
2430
2474
  export type AssertEmailConsentRequest = {
2431
2475
  subscriber_id: OpaqueIdentifier;
2432
- notifier_id: OpaqueIdentifier;
2433
- connection_id: OpaqueIdentifier;
2434
- domain_id: OpaqueIdentifier;
2476
+ /**
2477
+ * An opaque identifier. Its shape, ordering, and embedded content are not public promises.
2478
+ */
2479
+ notifier_id?: string;
2480
+ connection_id?: OpaqueIdentifier;
2481
+ domain_id?: OpaqueIdentifier;
2435
2482
  address: EmailAddress;
2436
2483
  consented: true;
2437
2484
  /**
@@ -2444,9 +2491,12 @@ export type AssertEmailConsentRequest = {
2444
2491
  source?: string;
2445
2492
  } | {
2446
2493
  subscriber_id: OpaqueIdentifier;
2447
- notifier_id: OpaqueIdentifier;
2448
- connection_id: OpaqueIdentifier;
2449
- domain_id: OpaqueIdentifier;
2494
+ /**
2495
+ * An opaque identifier. Its shape, ordering, and embedded content are not public promises.
2496
+ */
2497
+ notifier_id?: string;
2498
+ connection_id?: OpaqueIdentifier;
2499
+ domain_id?: OpaqueIdentifier;
2450
2500
  address: EmailAddress;
2451
2501
  /**
2452
2502
  * A bounded customer description of the service relationship. The authenticated asserting actor is recorded by the service, never accepted from this object.
@@ -2512,6 +2562,68 @@ export type MachineScopeSummary = [
2512
2562
  ("machine-messages:write" | "machine-messages:read" | "machine-events:read" | "machine-events:ack"),
2513
2563
  ("machine-messages:write" | "machine-messages:read" | "machine-events:read" | "machine-events:ack")
2514
2564
  ];
2565
+ /**
2566
+ * Send to a teammate by exact name or operator ID, or use me. Omitted recipient means the verified authenticated human only. Shared and service credentials must name a recipient. Preferred channel, service-email billing and marketing restrictions still apply.
2567
+ */
2568
+ export type CreateOperatorMessageRequest = ({
2569
+ content: MessageContentInput;
2570
+ [k: string]: unknown;
2571
+ } | {
2572
+ /**
2573
+ * Options infer select; otherwise confirm. Typed replies require type: input. Omit expiry for 24 hours.
2574
+ */
2575
+ interaction: ConfirmInteractionSendRequest | SelectInteractionSendRequest | InputInteractionSendRequest;
2576
+ [k: string]: unknown;
2577
+ }) & {
2578
+ recipient?: string;
2579
+ content?: MessageContentInput;
2580
+ /**
2581
+ * An RFC 3339 timestamp with a UTC offset. The server is authoritative.
2582
+ */
2583
+ expires_at?: string;
2584
+ correlation_id?: string;
2585
+ metadata?: Metadata;
2586
+ /**
2587
+ * Options infer select; otherwise confirm. Typed replies require type: input. Omit expiry for 24 hours.
2588
+ */
2589
+ interaction?: ConfirmInteractionSendRequest | SelectInteractionSendRequest | InputInteractionSendRequest;
2590
+ /**
2591
+ * Omitted means service. Marketing refuses service-only bindings before charging and at every delayed dispatch.
2592
+ */
2593
+ purpose?: "service" | "marketing";
2594
+ };
2595
+ /**
2596
+ * Creates one logical message for one subscriber and one resolved channel binding.
2597
+ */
2598
+ export type CanonicalCreateMessageRequest = {
2599
+ [k: string]: unknown;
2600
+ } & {
2601
+ to: MessageTarget;
2602
+ notifier_id?: OpaqueIdentifier;
2603
+ /**
2604
+ * The effective provider boundary selected for a message. Connection delivery uses the exact authorized environment connection; simulator delivery never calls a provider.
2605
+ */
2606
+ delivery_target?: "connection" | "simulator";
2607
+ /**
2608
+ * Optional channel connection to send through, from the environment's connections. The subscriber must be connected through it; the service never substitutes another connection or provider. A connection the subscriber has not connected through is refused as `subscriber_not_connected` when they are connected through another, and as an unchosen send would be (`subscriber_unbound` or `preferred_binding_unavailable`) when no connected channel can take the message. Omitted, the service chooses: the subscriber's preferred channel when they set one, otherwise the default connection when they are connected there, otherwise the connection they connected through most recently. The accepted message's `binding.connection_id` records the connection used. Implies `delivery_target: connection`.
2609
+ */
2610
+ connection_id?: OpaqueIdentifier;
2611
+ content: MessageContent;
2612
+ /**
2613
+ * An RFC 3339 timestamp with a UTC offset. The server is authoritative.
2614
+ */
2615
+ expires_at?: string;
2616
+ correlation_id?: string;
2617
+ metadata?: Metadata;
2618
+ /**
2619
+ * Send-time interaction. Choose expires_in_seconds or expires_at; omit both for 24 hours from server acceptance. Idempotent replays retain the original resolved deadline.
2620
+ */
2621
+ interaction?: CanonicalConfirmInteractionSendRequest | CanonicalSelectInteractionSendRequest | CanonicalInputInteractionSendRequest;
2622
+ /**
2623
+ * Omitted means service. Marketing refuses service-only bindings before charging and at every delayed dispatch.
2624
+ */
2625
+ purpose?: "service" | "marketing";
2626
+ };
2515
2627
  /**
2516
2628
  * The current Clerk organization projected as a WhooshBang tenant. Clerk organization and user identifiers are not public fields.
2517
2629
  */
@@ -3108,7 +3220,7 @@ export interface CreateCustomerEndpointRequest {
3108
3220
  * @minItems 1
3109
3221
  * @maxItems 11
3110
3222
  */
3111
- event_types: [CustomerEventType] | [CustomerEventType, CustomerEventType] | [CustomerEventType, CustomerEventType, CustomerEventType] | [
3223
+ event_types?: [CustomerEventType] | [CustomerEventType, CustomerEventType] | [CustomerEventType, CustomerEventType, CustomerEventType] | [
3112
3224
  CustomerEventType,
3113
3225
  CustomerEventType,
3114
3226
  CustomerEventType,
@@ -3277,6 +3389,9 @@ export interface CustomerEndpoint {
3277
3389
  last_success_at?: Timestamp;
3278
3390
  last_failure?: CustomerEndpointFailure;
3279
3391
  diagnostic_id: DiagnosticId;
3392
+ pause_reason?: "customer" | "sustained_failure" | "probe_failed";
3393
+ next_probe_at?: Timestamp;
3394
+ recovery_pending?: boolean;
3280
3395
  }
3281
3396
  export interface CustomerEndpointFailure {
3282
3397
  at: Timestamp;
@@ -3358,11 +3473,8 @@ export interface EmailVerificationSummary {
3358
3473
  masked_address: string;
3359
3474
  expires_at: Timestamp;
3360
3475
  }
3361
- export interface MessageTarget {
3362
- subscriber_id: OpaqueIdentifier;
3363
- }
3364
- export interface TextContent {
3365
- type: "text";
3476
+ export interface TextContentInput {
3477
+ type?: "text";
3366
3478
  /**
3367
3479
  * Text format. Omitted means plain text. Markdown supports headings, paragraphs, emphasis, strong emphasis, code, lists, quotes and safe HTTP(S) links; raw HTML and remote images are never executed or fetched.
3368
3480
  */
@@ -3463,7 +3575,7 @@ export interface TextContent {
3463
3575
  StructuredTextSection,
3464
3576
  StructuredTextSection
3465
3577
  ];
3466
- image?: NotificationImage;
3578
+ image?: NotificationImageInput;
3467
3579
  }
3468
3580
  export interface StructuredTextSection {
3469
3581
  /**
@@ -3478,9 +3590,9 @@ export interface StructuredTextSection {
3478
3590
  /**
3479
3591
  * One optional provider-neutral illustrative image. The notification content remains complete without the pixels.
3480
3592
  */
3481
- export interface NotificationImage {
3593
+ export interface NotificationImageInput {
3482
3594
  asset_id: NotificationImageAssetId;
3483
- purpose: "illustration";
3595
+ purpose?: "illustration";
3484
3596
  /**
3485
3597
  * Optional accessible description preserved by every adapter. Omit it for a decorative illustration; notification text must remain complete without the image.
3486
3598
  */
@@ -3489,8 +3601,8 @@ export interface NotificationImage {
3489
3601
  /**
3490
3602
  * An authoritative ordered portable notification document that every delivery adapter renders faithfully.
3491
3603
  */
3492
- export interface DocumentContent {
3493
- type: "document";
3604
+ export interface DocumentContentInput {
3605
+ type?: "document";
3494
3606
  /**
3495
3607
  * An optional semantic document title. The adapter chooses its native presentation.
3496
3608
  */
@@ -3502,7 +3614,7 @@ export interface DocumentContent {
3502
3614
  * @maxItems 24
3503
3615
  */
3504
3616
  blocks: [DocumentBlock, ...DocumentBlock[]];
3505
- image?: NotificationImage;
3617
+ image?: NotificationImageInput;
3506
3618
  }
3507
3619
  /**
3508
3620
  * One prose section in an ordered portable document.
@@ -3828,14 +3940,8 @@ export interface DocumentDetailsBlock {
3828
3940
  */
3829
3941
  text: string;
3830
3942
  }
3831
- /**
3832
- * Bounded customer correlation data. Do not include secrets or personal data.
3833
- */
3834
- export interface Metadata {
3835
- [k: string]: MetadataValue;
3836
- }
3837
3943
  export interface ConfirmInteractionSendRequest {
3838
- type: "confirm";
3944
+ type?: "confirm";
3839
3945
  prompt: string;
3840
3946
  confirm_label?: string;
3841
3947
  deny_label?: string;
@@ -3853,30 +3959,117 @@ export interface ConfirmInteractionSendRequest {
3853
3959
  expires_in_seconds?: number;
3854
3960
  }
3855
3961
  export interface SelectInteractionSendRequest {
3856
- type: "select";
3962
+ type?: "select";
3857
3963
  prompt: string;
3858
3964
  /**
3859
3965
  * @minItems 2
3860
3966
  * @maxItems 6
3861
3967
  */
3862
- options: [InteractionOption, InteractionOption] | [InteractionOption, InteractionOption, InteractionOption] | [
3863
- InteractionOption,
3864
- InteractionOption,
3865
- InteractionOption,
3866
- InteractionOption
3867
- ] | [
3868
- InteractionOption,
3869
- InteractionOption,
3870
- InteractionOption,
3871
- InteractionOption,
3872
- InteractionOption
3873
- ] | [
3874
- InteractionOption,
3875
- InteractionOption,
3876
- InteractionOption,
3877
- InteractionOption,
3878
- InteractionOption,
3879
- InteractionOption
3968
+ options: [
3969
+ (string | {
3970
+ label: string;
3971
+ value?: string;
3972
+ intent?: "accept" | "destructive" | "informational" | "neutral";
3973
+ }),
3974
+ (string | {
3975
+ label: string;
3976
+ value?: string;
3977
+ intent?: "accept" | "destructive" | "informational" | "neutral";
3978
+ })
3979
+ ] | [
3980
+ (string | {
3981
+ label: string;
3982
+ value?: string;
3983
+ intent?: "accept" | "destructive" | "informational" | "neutral";
3984
+ }),
3985
+ (string | {
3986
+ label: string;
3987
+ value?: string;
3988
+ intent?: "accept" | "destructive" | "informational" | "neutral";
3989
+ }),
3990
+ (string | {
3991
+ label: string;
3992
+ value?: string;
3993
+ intent?: "accept" | "destructive" | "informational" | "neutral";
3994
+ })
3995
+ ] | [
3996
+ (string | {
3997
+ label: string;
3998
+ value?: string;
3999
+ intent?: "accept" | "destructive" | "informational" | "neutral";
4000
+ }),
4001
+ (string | {
4002
+ label: string;
4003
+ value?: string;
4004
+ intent?: "accept" | "destructive" | "informational" | "neutral";
4005
+ }),
4006
+ (string | {
4007
+ label: string;
4008
+ value?: string;
4009
+ intent?: "accept" | "destructive" | "informational" | "neutral";
4010
+ }),
4011
+ (string | {
4012
+ label: string;
4013
+ value?: string;
4014
+ intent?: "accept" | "destructive" | "informational" | "neutral";
4015
+ })
4016
+ ] | [
4017
+ (string | {
4018
+ label: string;
4019
+ value?: string;
4020
+ intent?: "accept" | "destructive" | "informational" | "neutral";
4021
+ }),
4022
+ (string | {
4023
+ label: string;
4024
+ value?: string;
4025
+ intent?: "accept" | "destructive" | "informational" | "neutral";
4026
+ }),
4027
+ (string | {
4028
+ label: string;
4029
+ value?: string;
4030
+ intent?: "accept" | "destructive" | "informational" | "neutral";
4031
+ }),
4032
+ (string | {
4033
+ label: string;
4034
+ value?: string;
4035
+ intent?: "accept" | "destructive" | "informational" | "neutral";
4036
+ }),
4037
+ (string | {
4038
+ label: string;
4039
+ value?: string;
4040
+ intent?: "accept" | "destructive" | "informational" | "neutral";
4041
+ })
4042
+ ] | [
4043
+ (string | {
4044
+ label: string;
4045
+ value?: string;
4046
+ intent?: "accept" | "destructive" | "informational" | "neutral";
4047
+ }),
4048
+ (string | {
4049
+ label: string;
4050
+ value?: string;
4051
+ intent?: "accept" | "destructive" | "informational" | "neutral";
4052
+ }),
4053
+ (string | {
4054
+ label: string;
4055
+ value?: string;
4056
+ intent?: "accept" | "destructive" | "informational" | "neutral";
4057
+ }),
4058
+ (string | {
4059
+ label: string;
4060
+ value?: string;
4061
+ intent?: "accept" | "destructive" | "informational" | "neutral";
4062
+ }),
4063
+ (string | {
4064
+ label: string;
4065
+ value?: string;
4066
+ intent?: "accept" | "destructive" | "informational" | "neutral";
4067
+ }),
4068
+ (string | {
4069
+ label: string;
4070
+ value?: string;
4071
+ intent?: "accept" | "destructive" | "informational" | "neutral";
4072
+ })
3880
4073
  ];
3881
4074
  /**
3882
4075
  * Absolute RFC3339 deadline with an explicit timezone and at most millisecond precision. At least 30 seconds after server acceptance. Mutually exclusive with expires_in_seconds.
@@ -3891,17 +4084,6 @@ export interface SelectInteractionSendRequest {
3891
4084
  */
3892
4085
  expires_in_seconds?: number;
3893
4086
  }
3894
- export interface InteractionOption {
3895
- /**
3896
- * Opaque customer data. It is never interpreted as a command.
3897
- */
3898
- value: string;
3899
- label: string;
3900
- /**
3901
- * What choosing this option does, so a channel can present it accordingly. Describes consequence rather than appearance: a channel renders `accept` green where it can, `destructive` red, `informational` prominent, and `neutral` plainly. A channel that cannot colour a control ignores this and the option still renders. Omitted means `neutral`.
3902
- */
3903
- intent?: "accept" | "destructive" | "informational" | "neutral";
3904
- }
3905
4087
  export interface InputInteractionSendRequest {
3906
4088
  type: "input";
3907
4089
  prompt: string;
@@ -3918,6 +4100,15 @@ export interface InputInteractionSendRequest {
3918
4100
  */
3919
4101
  expires_in_seconds?: number;
3920
4102
  }
4103
+ export interface MessageTarget {
4104
+ subscriber_id: OpaqueIdentifier;
4105
+ }
4106
+ /**
4107
+ * Bounded customer correlation data. Do not include secrets or personal data.
4108
+ */
4109
+ export interface Metadata {
4110
+ [k: string]: MetadataValue;
4111
+ }
3921
4112
  /**
3922
4113
  * Provenance carried by an ordinary message created during group expansion. The broadcast, message subscriber_id, and exact historical membership generation form the child uniqueness boundary.
3923
4114
  */
@@ -4981,6 +5172,139 @@ export interface ConnectionTestCollection {
4981
5172
  page_size?: ListPageSize;
4982
5173
  total?: ListTotal;
4983
5174
  }
5175
+ export interface TextContent {
5176
+ type: "text";
5177
+ /**
5178
+ * Text format. Omitted means plain text. Markdown supports headings, paragraphs, emphasis, strong emphasis, code, lists, quotes and safe HTTP(S) links; raw HTML and remote images are never executed or fetched.
5179
+ */
5180
+ format?: "plain" | "markdown";
5181
+ /**
5182
+ * The complete notification content. This remains authoritative and sufficient when an adapter cannot render optional structure.
5183
+ */
5184
+ text: string;
5185
+ /**
5186
+ * An optional semantic title. The adapter chooses its native presentation.
5187
+ */
5188
+ title?: string;
5189
+ /**
5190
+ * Optional ordered semantic sections that enhance, but never replace, the complete text.
5191
+ *
5192
+ * @minItems 1
5193
+ * @maxItems 12
5194
+ */
5195
+ sections?: [StructuredTextSection] | [StructuredTextSection, StructuredTextSection] | [StructuredTextSection, StructuredTextSection, StructuredTextSection] | [
5196
+ StructuredTextSection,
5197
+ StructuredTextSection,
5198
+ StructuredTextSection,
5199
+ StructuredTextSection
5200
+ ] | [
5201
+ StructuredTextSection,
5202
+ StructuredTextSection,
5203
+ StructuredTextSection,
5204
+ StructuredTextSection,
5205
+ StructuredTextSection
5206
+ ] | [
5207
+ StructuredTextSection,
5208
+ StructuredTextSection,
5209
+ StructuredTextSection,
5210
+ StructuredTextSection,
5211
+ StructuredTextSection,
5212
+ StructuredTextSection
5213
+ ] | [
5214
+ StructuredTextSection,
5215
+ StructuredTextSection,
5216
+ StructuredTextSection,
5217
+ StructuredTextSection,
5218
+ StructuredTextSection,
5219
+ StructuredTextSection,
5220
+ StructuredTextSection
5221
+ ] | [
5222
+ StructuredTextSection,
5223
+ StructuredTextSection,
5224
+ StructuredTextSection,
5225
+ StructuredTextSection,
5226
+ StructuredTextSection,
5227
+ StructuredTextSection,
5228
+ StructuredTextSection,
5229
+ StructuredTextSection
5230
+ ] | [
5231
+ StructuredTextSection,
5232
+ StructuredTextSection,
5233
+ StructuredTextSection,
5234
+ StructuredTextSection,
5235
+ StructuredTextSection,
5236
+ StructuredTextSection,
5237
+ StructuredTextSection,
5238
+ StructuredTextSection,
5239
+ StructuredTextSection
5240
+ ] | [
5241
+ StructuredTextSection,
5242
+ StructuredTextSection,
5243
+ StructuredTextSection,
5244
+ StructuredTextSection,
5245
+ StructuredTextSection,
5246
+ StructuredTextSection,
5247
+ StructuredTextSection,
5248
+ StructuredTextSection,
5249
+ StructuredTextSection,
5250
+ StructuredTextSection
5251
+ ] | [
5252
+ StructuredTextSection,
5253
+ StructuredTextSection,
5254
+ StructuredTextSection,
5255
+ StructuredTextSection,
5256
+ StructuredTextSection,
5257
+ StructuredTextSection,
5258
+ StructuredTextSection,
5259
+ StructuredTextSection,
5260
+ StructuredTextSection,
5261
+ StructuredTextSection,
5262
+ StructuredTextSection
5263
+ ] | [
5264
+ StructuredTextSection,
5265
+ StructuredTextSection,
5266
+ StructuredTextSection,
5267
+ StructuredTextSection,
5268
+ StructuredTextSection,
5269
+ StructuredTextSection,
5270
+ StructuredTextSection,
5271
+ StructuredTextSection,
5272
+ StructuredTextSection,
5273
+ StructuredTextSection,
5274
+ StructuredTextSection,
5275
+ StructuredTextSection
5276
+ ];
5277
+ image?: NotificationImage;
5278
+ }
5279
+ /**
5280
+ * One optional provider-neutral illustrative image. The notification content remains complete without the pixels.
5281
+ */
5282
+ export interface NotificationImage {
5283
+ asset_id: NotificationImageAssetId;
5284
+ purpose: "illustration";
5285
+ /**
5286
+ * Optional accessible description preserved by every adapter. Omit it for a decorative illustration; notification text must remain complete without the image.
5287
+ */
5288
+ description?: string;
5289
+ }
5290
+ /**
5291
+ * An authoritative ordered portable notification document that every delivery adapter renders faithfully.
5292
+ */
5293
+ export interface DocumentContent {
5294
+ type: "document";
5295
+ /**
5296
+ * An optional semantic document title. The adapter chooses its native presentation.
5297
+ */
5298
+ title?: string;
5299
+ /**
5300
+ * The complete portable document in exact authored order.
5301
+ *
5302
+ * @minItems 1
5303
+ * @maxItems 24
5304
+ */
5305
+ blocks: [DocumentBlock, ...DocumentBlock[]];
5306
+ image?: NotificationImage;
5307
+ }
4984
5308
  /**
4985
5309
  * The exact configuration an application the customer creates and owns is created from, as data rather than as a URL-encoded blob.
4986
5310
  *
@@ -6601,7 +6925,7 @@ export interface CreateSubscriberRequest {
6601
6925
  /**
6602
6926
  * @maxItems 50
6603
6927
  */
6604
- groups?: DeveloperKey[];
6928
+ groups?: GroupKey[];
6605
6929
  }
6606
6930
  /**
6607
6931
  * Change subscriber display name, forced language or forced time zone. Null removes the corresponding override.
@@ -6716,7 +7040,7 @@ export interface Subscriber {
6716
7040
  *
6717
7041
  * @maxItems 200
6718
7042
  */
6719
- groups?: DeveloperKey[];
7043
+ groups?: GroupKey[];
6720
7044
  /**
6721
7045
  * An RFC 3339 timestamp with a UTC offset. The server is authoritative.
6722
7046
  */
@@ -6789,8 +7113,8 @@ export interface SubscriberDataExportExcludedControllerData {
6789
7113
  * Creates one static, developer-managed subscriber group.
6790
7114
  */
6791
7115
  export interface CreateSubscriberGroupRequest {
6792
- key: DeveloperKey;
6793
- display_name: string;
7116
+ key: GroupKey;
7117
+ display_name?: string;
6794
7118
  description?: string;
6795
7119
  }
6796
7120
  export interface SubscriberGroupCollection {
@@ -6804,7 +7128,7 @@ export interface SubscriberGroupCollection {
6804
7128
  total?: ListTotal;
6805
7129
  }
6806
7130
  export interface SubscriberGroupMembershipCollection {
6807
- group_key: DeveloperKey;
7131
+ group_key: GroupKey;
6808
7132
  membership_revision: number;
6809
7133
  /**
6810
7134
  * @maxItems 100
@@ -6815,24 +7139,6 @@ export interface SubscriberGroupMembershipCollection {
6815
7139
  page_size?: ListPageSize;
6816
7140
  total?: ListTotal;
6817
7141
  }
6818
- /**
6819
- * Creates one group broadcast using the existing ordinary message envelope. The group target comes only from the path.
6820
- */
6821
- export interface CreateGroupBroadcastRequest {
6822
- notifier_id?: OpaqueIdentifier;
6823
- content: MessageContent;
6824
- expires_at?: Timestamp;
6825
- correlation_id?: string;
6826
- metadata?: Metadata;
6827
- /**
6828
- * Send-time interaction. Choose expires_in_seconds or expires_at; omit both for 24 hours from server acceptance. Idempotent replays retain the original resolved deadline.
6829
- */
6830
- interaction?: ConfirmInteractionSendRequest | SelectInteractionSendRequest | InputInteractionSendRequest;
6831
- /**
6832
- * Omitted means service. Marketing refuses service-only bindings before charging and at every delayed dispatch.
6833
- */
6834
- purpose?: "service" | "marketing";
6835
- }
6836
7142
  /**
6837
7143
  * One durable acceptance against an exact group membership revision. Delivery remains represented by ordinary child messages.
6838
7144
  */
@@ -6845,7 +7151,7 @@ export interface GroupBroadcast {
6845
7151
  project_id: OpaqueIdentifier;
6846
7152
  environment: Environment;
6847
7153
  group_id: OpaqueIdentifier;
6848
- group_key: DeveloperKey;
7154
+ group_key: GroupKey;
6849
7155
  audience_revision: number;
6850
7156
  status: "accepted" | "expanding" | "expanded" | "complete";
6851
7157
  aggregate: BroadcastAggregate;
@@ -6915,7 +7221,7 @@ export interface UsageBucket {
6915
7221
  * How many of a day's messages fall in one group. `key` is a `MessageState` when grouping by state, a `Channel` when grouping by channel, and a channel connection id when grouping by connection. Groups with no messages are omitted, and a list holds at most the 200 largest groups, largest first.
6916
7222
  */
6917
7223
  export interface UsageGroupCount {
6918
- key: string;
7224
+ key: GroupKey;
6919
7225
  count: number;
6920
7226
  }
6921
7227
  /**
@@ -7027,6 +7333,17 @@ export interface SelectInteractionRequest {
7027
7333
  */
7028
7334
  correlation_id?: string;
7029
7335
  }
7336
+ export interface InteractionOption {
7337
+ /**
7338
+ * Opaque customer data. It is never interpreted as a command.
7339
+ */
7340
+ value: string;
7341
+ label: string;
7342
+ /**
7343
+ * What choosing this option does, so a channel can present it accordingly. Describes consequence rather than appearance: a channel renders `accept` green where it can, `destructive` red, `informational` prominent, and `neutral` plainly. A channel that cannot colour a control ignores this and the option still renders. Omitted means `neutral`.
7344
+ */
7345
+ intent?: "accept" | "destructive" | "informational" | "neutral";
7346
+ }
7030
7347
  export interface InputInteractionRequest {
7031
7348
  type: "input";
7032
7349
  prompt: string;
@@ -8379,27 +8696,6 @@ export interface OperatorResolution {
8379
8696
  outcome: "resolved" | "ambiguous" | "not_found";
8380
8697
  choices: Operator[];
8381
8698
  }
8382
- /**
8383
- * Send to a teammate by exact name or operator ID, or use me. Omitted recipient means the verified authenticated human only. Shared and service credentials must name a recipient. Preferred channel, service-email billing and marketing restrictions still apply.
8384
- */
8385
- export interface CreateOperatorMessageRequest {
8386
- recipient?: string;
8387
- content: MessageContent;
8388
- /**
8389
- * An RFC 3339 timestamp with a UTC offset. The server is authoritative.
8390
- */
8391
- expires_at?: string;
8392
- correlation_id?: string;
8393
- metadata?: Metadata;
8394
- /**
8395
- * Send-time interaction. Choose expires_in_seconds or expires_at; omit both for 24 hours from server acceptance. Idempotent replays retain the original resolved deadline.
8396
- */
8397
- interaction?: ConfirmInteractionSendRequest | SelectInteractionSendRequest | InputInteractionSendRequest;
8398
- /**
8399
- * Omitted means service. Marketing refuses service-only bindings before charging and at every delayed dispatch.
8400
- */
8401
- purpose?: "service" | "marketing";
8402
- }
8403
8699
  /**
8404
8700
  * Readable acceptance or refusal. Accepted means queued, never proof of provider delivery.
8405
8701
  */
@@ -8556,14 +8852,128 @@ export interface RedeemBillingPromotionRequest {
8556
8852
  */
8557
8853
  code: string;
8558
8854
  }
8559
- export type RotateCustomerEndpointRequest = RotateApiCredentialRequest;
8560
- /** Renames or redescribes an active group under its last observed row version. */
8855
+ export interface CanonicalConfirmInteractionSendRequest {
8856
+ type: "confirm";
8857
+ prompt: string;
8858
+ confirm_label?: string;
8859
+ deny_label?: string;
8860
+ /**
8861
+ * Absolute RFC3339 deadline with an explicit timezone and at most millisecond precision. At least 30 seconds after server acceptance. Mutually exclusive with expires_in_seconds.
8862
+ */
8863
+ expires_at?: string;
8864
+ /**
8865
+ * Caller-owned opaque correlation returned as data, never treated as execution authority.
8866
+ */
8867
+ correlation_id?: string;
8868
+ /**
8869
+ * Whole seconds from server acceptance. No fixed maximum; the resolved timestamp must be representable through year 9999. Mutually exclusive with expires_at. Omit both for 86400 seconds (24 hours).
8870
+ */
8871
+ expires_in_seconds?: number;
8872
+ }
8873
+ export interface CanonicalSelectInteractionSendRequest {
8874
+ type: "select";
8875
+ prompt: string;
8876
+ /**
8877
+ * @minItems 2
8878
+ * @maxItems 6
8879
+ */
8880
+ options: [InteractionOption, InteractionOption] | [InteractionOption, InteractionOption, InteractionOption] | [
8881
+ InteractionOption,
8882
+ InteractionOption,
8883
+ InteractionOption,
8884
+ InteractionOption
8885
+ ] | [
8886
+ InteractionOption,
8887
+ InteractionOption,
8888
+ InteractionOption,
8889
+ InteractionOption,
8890
+ InteractionOption
8891
+ ] | [
8892
+ InteractionOption,
8893
+ InteractionOption,
8894
+ InteractionOption,
8895
+ InteractionOption,
8896
+ InteractionOption,
8897
+ InteractionOption
8898
+ ];
8899
+ /**
8900
+ * Absolute RFC3339 deadline with an explicit timezone and at most millisecond precision. At least 30 seconds after server acceptance. Mutually exclusive with expires_in_seconds.
8901
+ */
8902
+ expires_at?: string;
8903
+ /**
8904
+ * Caller-owned opaque correlation returned as data, never treated as execution authority.
8905
+ */
8906
+ correlation_id?: string;
8907
+ /**
8908
+ * Whole seconds from server acceptance. No fixed maximum; the resolved timestamp must be representable through year 9999. Mutually exclusive with expires_at. Omit both for 86400 seconds (24 hours).
8909
+ */
8910
+ expires_in_seconds?: number;
8911
+ }
8912
+ export interface CanonicalInputInteractionSendRequest {
8913
+ type: "input";
8914
+ prompt: string;
8915
+ /**
8916
+ * Absolute RFC3339 deadline with an explicit timezone and at most millisecond precision. At least 30 seconds after server acceptance. Mutually exclusive with expires_in_seconds.
8917
+ */
8918
+ expires_at?: string;
8919
+ /**
8920
+ * Caller-owned opaque correlation returned as data, never treated as execution authority.
8921
+ */
8922
+ correlation_id?: string;
8923
+ /**
8924
+ * Whole seconds from server acceptance. No fixed maximum; the resolved timestamp must be representable through year 9999. Mutually exclusive with expires_at. Omit both for 86400 seconds (24 hours).
8925
+ */
8926
+ expires_in_seconds?: number;
8927
+ }
8928
+ /**
8929
+ * Creates one group broadcast using the existing ordinary message envelope. The group target comes only from the path.
8930
+ */
8931
+ export interface CanonicalCreateGroupBroadcastRequest {
8932
+ notifier_id?: OpaqueIdentifier;
8933
+ content: MessageContent;
8934
+ expires_at?: Timestamp;
8935
+ correlation_id?: string;
8936
+ metadata?: Metadata;
8937
+ /**
8938
+ * Send-time interaction. Choose expires_in_seconds or expires_at; omit both for 24 hours from server acceptance. Idempotent replays retain the original resolved deadline.
8939
+ */
8940
+ interaction?: CanonicalConfirmInteractionSendRequest | CanonicalSelectInteractionSendRequest | CanonicalInputInteractionSendRequest;
8941
+ /**
8942
+ * Omitted means service. Marketing refuses service-only bindings before charging and at every delayed dispatch.
8943
+ */
8944
+ purpose?: "service" | "marketing";
8945
+ }
8946
+ /**
8947
+ * Send to a teammate by exact name or operator ID, or use me. Omitted recipient means the verified authenticated human only. Shared and service credentials must name a recipient. Preferred channel, service-email billing and marketing restrictions still apply.
8948
+ */
8949
+ export interface CanonicalCreateOperatorMessageRequest {
8950
+ recipient?: string;
8951
+ content: MessageContent;
8952
+ /**
8953
+ * An RFC 3339 timestamp with a UTC offset. The server is authoritative.
8954
+ */
8955
+ expires_at?: string;
8956
+ correlation_id?: string;
8957
+ metadata?: Metadata;
8958
+ /**
8959
+ * Send-time interaction. Choose expires_in_seconds or expires_at; omit both for 24 hours from server acceptance. Idempotent replays retain the original resolved deadline.
8960
+ */
8961
+ interaction?: CanonicalConfirmInteractionSendRequest | CanonicalSelectInteractionSendRequest | CanonicalInputInteractionSendRequest;
8962
+ /**
8963
+ * Omitted means service. Marketing refuses service-only bindings before charging and at every delayed dispatch.
8964
+ */
8965
+ purpose?: "service" | "marketing";
8966
+ }
8967
+ export interface RotateCustomerEndpointRequest {
8968
+ overlap_seconds?: number;
8969
+ }
8970
+ /** Renames or redescribes a group; an omitted version uses last write wins. */
8561
8971
  export type UpdateSubscriberGroupRequest = {
8562
- row_version: number;
8972
+ row_version?: number;
8563
8973
  display_name: string;
8564
8974
  description?: string | null;
8565
8975
  } | {
8566
- row_version: number;
8976
+ row_version?: number;
8567
8977
  display_name?: string;
8568
8978
  description: string | null;
8569
8979
  };