@whooshbang/contracts 2.4.0 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/README.md +21 -21
- package/contract-manifest.json +35 -32
- package/dist/generated/artifact-index.d.ts +34 -34
- package/dist/generated/artifact-index.js +35 -32
- package/dist/generated/artifact-index.js.map +1 -1
- package/dist/generated/interaction-v1.d.ts +77 -4
- package/dist/generated/validators-standalone.d.ts +522 -483
- package/dist/generated/validators-standalone.js +12972 -6118
- package/dist/generated/validators-standalone.js.map +1 -1
- package/dist/generated/validators.d.ts +5 -2
- package/dist/generated/validators.js +4 -1
- package/dist/generated/validators.js.map +1 -1
- package/dist/generated/whooshbang-v1.d.ts +634 -116
- package/dist/index.d.ts +5 -2
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/input-defaults.d.ts +7 -0
- package/dist/input-defaults.js +59 -0
- package/dist/input-defaults.js.map +1 -0
- package/dist/interaction-expiry.js +2 -1
- package/dist/interaction-expiry.js.map +1 -1
- package/fixtures/core-v1/fixture-index.json +24 -1
- package/fixtures/core-v1/problems/idempotency-key-required.json +2 -2
- package/fixtures/core-v1/requests/redeem-billing-promotion.json +3 -0
- package/fixtures/core-v1/scenarios/api-credential-invalid-indistinguishable.json +1 -1
- package/fixtures/core-v1/scenarios/api-credential-one-time-reveal.json +1 -1
- package/fixtures/core-v1/scenarios/api-credential-revocation-replay.json +1 -1
- package/fixtures/core-v1/scenarios/api-credential-rotation-overlap.json +1 -1
- package/fixtures/core-v1/scenarios/cancellation-too-late.json +1 -1
- package/fixtures/core-v1/scenarios/cross-organization-project.json +1 -1
- package/fixtures/core-v1/scenarios/cross-project-resource.json +1 -1
- package/fixtures/core-v1/scenarios/environment-mismatch.json +1 -1
- package/fixtures/core-v1/scenarios/idempotency-conflict.json +1 -1
- package/fixtures/core-v1/scenarios/idempotency-equivalent-replay.json +1 -1
- package/fixtures/core-v1/scenarios/malformed-bearer.json +1 -1
- package/fixtures/core-v1/scenarios/metadata-overrun.json +1 -1
- package/fixtures/core-v1/scenarios/missing-scope.json +1 -1
- package/fixtures/core-v1/scenarios/project-create-equivalent-replay.json +1 -1
- package/fixtures/core-v1/scenarios/project-slug-conflict.json +1 -1
- package/fixtures/core-v1/scenarios/provider-outcome-unknown.json +1 -1
- package/fixtures/core-v1/scenarios/subscription-activation-replay.json +1 -1
- package/fixtures/core-v1/scenarios/subscription-authorization-capability-opacity.json +1 -1
- package/fixtures/core-v1/scenarios/subscription-cross-connection-callback-rejected.json +1 -1
- package/fixtures/core-v1/scenarios/subscription-expired-replay.json +1 -1
- package/fixtures/core-v1/scenarios/subscription-selected-connection-replay.json +1 -1
- package/fixtures/core-v1/success/billing-promotion.json +14 -0
- package/fixtures/core-v1/success/billing-promotions.json +64 -0
- package/fixtures/core-v1/success/credit-purchase.json +2 -0
- package/fixtures/core-v1/success/subscription-change.json +7 -0
- package/fixtures/interaction-machine-v1/scenarios/ack-conflict.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/ack-cross-machine.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/ack-out-of-order.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/ack-replay.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/ambiguous-free-text.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/callback-token-opacity.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/credential-registration-conflict.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/credential-registration-replay.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/credential-revocation-replay.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/credential-rotation.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/first-credential-activates.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/interaction-duplicate.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/interaction-expired.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/interaction-mismatch.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/interaction-retired.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/interaction-stale.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/machine-admin-denied.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/machine-bound-message-create.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/machine-cancel-denied.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/machine-crash-before-ack.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/machine-notifier-mismatch.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/machine-other-message-read.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/machine-owned-message-read.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/machine-subscriber-mismatch.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/poll-uncommitted-cursor-rejected.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/project-credential-machine-endpoint-denied.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/quarantine-integrity-rejected.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/quarantine-signature-rejected.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/quarantine-valid.json +1 -1
- package/fixtures/interaction-machine-v1/scenarios/revoked-machine-credential.json +1 -1
- package/fixtures/recipient-experience-v1/scenarios/membership-broadcast-snapshot.json +1 -1
- package/fixtures/recipient-experience-v1/scenarios/preferred-binding-resolution.json +1 -1
- package/fixtures/recipient-experience-v1/scenarios/recipient-session-security.json +1 -1
- package/fixtures/recipient-experience-v1/scenarios/subscriber-initial-groups-transaction.json +1 -1
- package/openapi/generated/whooshbang-v1.bundle.json +1338 -254
- package/openapi/whooshbang-v1.yaml +547 -73
- package/package.json +1 -1
- package/schemas/core-scenario.schema.json +1 -1
- package/schemas/events/agent-binding-degraded-v1.schema.json +1 -1
- package/schemas/events/interaction-expired-v1.schema.json +1 -1
- package/schemas/events/interaction-received-v1.schema.json +1 -1
- package/schemas/events/message-delivered-v1.schema.json +1 -1
- package/schemas/events/message-expired-v1.schema.json +1 -1
- package/schemas/events/message-failed-v1.schema.json +1 -1
- package/schemas/events/message-provider-accepted-v1.schema.json +1 -1
- package/schemas/events/subscription-activated-v1.schema.json +1 -1
- package/schemas/events/subscription-revoked-v1.schema.json +1 -1
- package/schemas/events/whooshbang-event-v1.schema.json +1 -1
- package/schemas/fixture-index.schema.json +1 -1
- package/schemas/interaction-machine-scenario.schema.json +1 -1
- package/schemas/interaction-v1.schema.json +192 -5
- package/schemas/machine-v1.schema.json +1 -1
- package/schemas/provider-capabilities-v1.schema.json +1 -1
- package/schemas/webhooks/webhook-delivery-case-v1.schema.json +1 -1
- package/schemas/webhooks/webhook-signing-vector-v1.schema.json +1 -1
- package/schemas/whooshbang-v1.schema.json +769 -63
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
3
|
"$id": "https://whooshbang.flowxo.com/schemas/whooshbang-v1.schema.json",
|
|
4
|
-
"x-contract-version": "2.
|
|
4
|
+
"x-contract-version": "2.6.0",
|
|
5
5
|
"title": "WhooshBangV1ContractDocument",
|
|
6
6
|
"description": "Public request, resource, summary, and Problem Details models for the WhooshBang V1 REST API.",
|
|
7
7
|
"anyOf": [
|
|
@@ -394,6 +394,24 @@
|
|
|
394
394
|
},
|
|
395
395
|
{
|
|
396
396
|
"$ref": "#/$defs/WhoAmI"
|
|
397
|
+
},
|
|
398
|
+
{
|
|
399
|
+
"$ref": "#/$defs/BillingPromotions"
|
|
400
|
+
},
|
|
401
|
+
{
|
|
402
|
+
"$ref": "#/$defs/BillingPromotion"
|
|
403
|
+
},
|
|
404
|
+
{
|
|
405
|
+
"$ref": "#/$defs/RedeemBillingPromotionRequest"
|
|
406
|
+
},
|
|
407
|
+
{
|
|
408
|
+
"$ref": "#/$defs/CanonicalCreateMessageRequest"
|
|
409
|
+
},
|
|
410
|
+
{
|
|
411
|
+
"$ref": "#/$defs/CanonicalCreateGroupBroadcastRequest"
|
|
412
|
+
},
|
|
413
|
+
{
|
|
414
|
+
"$ref": "#/$defs/CanonicalCreateOperatorMessageRequest"
|
|
397
415
|
}
|
|
398
416
|
],
|
|
399
417
|
"$defs": {
|
|
@@ -3715,7 +3733,7 @@
|
|
|
3715
3733
|
"maxItems": 50,
|
|
3716
3734
|
"uniqueItems": true,
|
|
3717
3735
|
"items": {
|
|
3718
|
-
"$ref": "#/$defs/
|
|
3736
|
+
"$ref": "#/$defs/GroupKey"
|
|
3719
3737
|
}
|
|
3720
3738
|
}
|
|
3721
3739
|
},
|
|
@@ -3806,7 +3824,7 @@
|
|
|
3806
3824
|
"uniqueItems": true,
|
|
3807
3825
|
"description": "The keys of the static groups this subscriber belongs to in the environment asked about. Present when one subscriber is read.",
|
|
3808
3826
|
"items": {
|
|
3809
|
-
"$ref": "#/$defs/
|
|
3827
|
+
"$ref": "#/$defs/GroupKey"
|
|
3810
3828
|
}
|
|
3811
3829
|
},
|
|
3812
3830
|
"last_activity_at": {
|
|
@@ -4040,10 +4058,10 @@
|
|
|
4040
4058
|
"CreateSubscriberGroupRequest": {
|
|
4041
4059
|
"type": "object",
|
|
4042
4060
|
"description": "Creates one static, developer-managed subscriber group.",
|
|
4043
|
-
"required": ["key"
|
|
4061
|
+
"required": ["key"],
|
|
4044
4062
|
"properties": {
|
|
4045
4063
|
"key": {
|
|
4046
|
-
"$ref": "#/$defs/
|
|
4064
|
+
"$ref": "#/$defs/GroupKey"
|
|
4047
4065
|
},
|
|
4048
4066
|
"display_name": {
|
|
4049
4067
|
"type": "string",
|
|
@@ -4060,8 +4078,8 @@
|
|
|
4060
4078
|
"UpdateSubscriberGroupRequest": {
|
|
4061
4079
|
"type": "object",
|
|
4062
4080
|
"description": "Renames or redescribes an active group. Its key and static membership model cannot change.",
|
|
4063
|
-
"required": [
|
|
4064
|
-
"minProperties":
|
|
4081
|
+
"required": [],
|
|
4082
|
+
"minProperties": 1,
|
|
4065
4083
|
"properties": {
|
|
4066
4084
|
"row_version": {
|
|
4067
4085
|
"type": "integer",
|
|
@@ -4077,7 +4095,21 @@
|
|
|
4077
4095
|
"maxLength": 500
|
|
4078
4096
|
}
|
|
4079
4097
|
},
|
|
4080
|
-
"additionalProperties": false
|
|
4098
|
+
"additionalProperties": false,
|
|
4099
|
+
"anyOf": [
|
|
4100
|
+
{
|
|
4101
|
+
"required": ["display_name"],
|
|
4102
|
+
"properties": {
|
|
4103
|
+
"display_name": {}
|
|
4104
|
+
}
|
|
4105
|
+
},
|
|
4106
|
+
{
|
|
4107
|
+
"required": ["description"],
|
|
4108
|
+
"properties": {
|
|
4109
|
+
"description": {}
|
|
4110
|
+
}
|
|
4111
|
+
}
|
|
4112
|
+
]
|
|
4081
4113
|
},
|
|
4082
4114
|
"SubscriberGroup": {
|
|
4083
4115
|
"type": "object",
|
|
@@ -4111,7 +4143,7 @@
|
|
|
4111
4143
|
"$ref": "#/$defs/Environment"
|
|
4112
4144
|
},
|
|
4113
4145
|
"key": {
|
|
4114
|
-
"$ref": "#/$defs/
|
|
4146
|
+
"$ref": "#/$defs/GroupKey"
|
|
4115
4147
|
},
|
|
4116
4148
|
"display_name": {
|
|
4117
4149
|
"type": "string",
|
|
@@ -4220,7 +4252,7 @@
|
|
|
4220
4252
|
"$ref": "#/$defs/OpaqueIdentifier"
|
|
4221
4253
|
},
|
|
4222
4254
|
"group_key": {
|
|
4223
|
-
"$ref": "#/$defs/
|
|
4255
|
+
"$ref": "#/$defs/GroupKey"
|
|
4224
4256
|
},
|
|
4225
4257
|
"subscriber_id": {
|
|
4226
4258
|
"$ref": "#/$defs/OpaqueIdentifier"
|
|
@@ -4297,7 +4329,7 @@
|
|
|
4297
4329
|
"required": ["group_key", "membership_revision", "items"],
|
|
4298
4330
|
"properties": {
|
|
4299
4331
|
"group_key": {
|
|
4300
|
-
"$ref": "#/$defs/
|
|
4332
|
+
"$ref": "#/$defs/GroupKey"
|
|
4301
4333
|
},
|
|
4302
4334
|
"membership_revision": {
|
|
4303
4335
|
"type": "integer",
|
|
@@ -4331,7 +4363,7 @@
|
|
|
4331
4363
|
"CreateGroupBroadcastRequest": {
|
|
4332
4364
|
"type": "object",
|
|
4333
4365
|
"description": "Creates one group broadcast using the existing ordinary message envelope. The group target comes only from the path.",
|
|
4334
|
-
"required": [
|
|
4366
|
+
"required": [],
|
|
4335
4367
|
"properties": {
|
|
4336
4368
|
"notifier_id": {
|
|
4337
4369
|
"allOf": [
|
|
@@ -4342,10 +4374,11 @@
|
|
|
4342
4374
|
"default": "default"
|
|
4343
4375
|
},
|
|
4344
4376
|
"content": {
|
|
4345
|
-
"$ref": "#/$defs/
|
|
4377
|
+
"$ref": "#/$defs/MessageContentInput"
|
|
4346
4378
|
},
|
|
4347
4379
|
"expires_at": {
|
|
4348
|
-
"$ref": "#/$defs/Timestamp"
|
|
4380
|
+
"$ref": "#/$defs/Timestamp",
|
|
4381
|
+
"description": "Optional server-authoritative expiry after acceptance, through year 9999. Omit for 24 hours."
|
|
4349
4382
|
},
|
|
4350
4383
|
"correlation_id": {
|
|
4351
4384
|
"type": "string",
|
|
@@ -4364,7 +4397,31 @@
|
|
|
4364
4397
|
"description": "Omitted means service. Marketing refuses service-only bindings before charging and at every delayed dispatch."
|
|
4365
4398
|
}
|
|
4366
4399
|
},
|
|
4367
|
-
"additionalProperties": false
|
|
4400
|
+
"additionalProperties": false,
|
|
4401
|
+
"allOf": [
|
|
4402
|
+
{
|
|
4403
|
+
"anyOf": [
|
|
4404
|
+
{
|
|
4405
|
+
"required": ["content"],
|
|
4406
|
+
"properties": {
|
|
4407
|
+
"content": {
|
|
4408
|
+
"$ref": "#/$defs/MessageContentInput"
|
|
4409
|
+
}
|
|
4410
|
+
},
|
|
4411
|
+
"additionalProperties": true
|
|
4412
|
+
},
|
|
4413
|
+
{
|
|
4414
|
+
"required": ["interaction"],
|
|
4415
|
+
"properties": {
|
|
4416
|
+
"interaction": {
|
|
4417
|
+
"$ref": "interaction-v1.schema.json#/$defs/InteractionSendRequest"
|
|
4418
|
+
}
|
|
4419
|
+
},
|
|
4420
|
+
"additionalProperties": true
|
|
4421
|
+
}
|
|
4422
|
+
]
|
|
4423
|
+
}
|
|
4424
|
+
]
|
|
4368
4425
|
},
|
|
4369
4426
|
"BroadcastAggregate": {
|
|
4370
4427
|
"type": "object",
|
|
@@ -4455,7 +4512,7 @@
|
|
|
4455
4512
|
"$ref": "#/$defs/OpaqueIdentifier"
|
|
4456
4513
|
},
|
|
4457
4514
|
"group_key": {
|
|
4458
|
-
"$ref": "#/$defs/
|
|
4515
|
+
"$ref": "#/$defs/GroupKey"
|
|
4459
4516
|
},
|
|
4460
4517
|
"audience_revision": {
|
|
4461
4518
|
"type": "integer",
|
|
@@ -4490,7 +4547,7 @@
|
|
|
4490
4547
|
"CreateSubscriptionLinkRequest": {
|
|
4491
4548
|
"type": "object",
|
|
4492
4549
|
"description": "Creates one project- and environment-scoped, single-use authorization link.",
|
|
4493
|
-
"required": ["subscriber_id"
|
|
4550
|
+
"required": ["subscriber_id"],
|
|
4494
4551
|
"properties": {
|
|
4495
4552
|
"subscriber_id": {
|
|
4496
4553
|
"$ref": "#/$defs/OpaqueIdentifier"
|
|
@@ -4514,7 +4571,7 @@
|
|
|
4514
4571
|
},
|
|
4515
4572
|
"connection_id": {
|
|
4516
4573
|
"$ref": "#/$defs/OpaqueIdentifier",
|
|
4517
|
-
"description": "
|
|
4574
|
+
"description": "Optional exact connection. Otherwise the default or only compatible connection is used."
|
|
4518
4575
|
},
|
|
4519
4576
|
"address": {
|
|
4520
4577
|
"$ref": "#/$defs/EmailAddress",
|
|
@@ -4563,22 +4620,6 @@
|
|
|
4563
4620
|
}
|
|
4564
4621
|
}
|
|
4565
4622
|
}
|
|
4566
|
-
},
|
|
4567
|
-
{
|
|
4568
|
-
"if": {
|
|
4569
|
-
"properties": {
|
|
4570
|
-
"channels": {
|
|
4571
|
-
"const": ["slack"]
|
|
4572
|
-
}
|
|
4573
|
-
},
|
|
4574
|
-
"required": ["channels"]
|
|
4575
|
-
},
|
|
4576
|
-
"then": {
|
|
4577
|
-
"required": ["connection_id"],
|
|
4578
|
-
"properties": {
|
|
4579
|
-
"connection_id": {}
|
|
4580
|
-
}
|
|
4581
|
-
}
|
|
4582
4623
|
}
|
|
4583
4624
|
],
|
|
4584
4625
|
"additionalProperties": false
|
|
@@ -5069,7 +5110,7 @@
|
|
|
5069
5110
|
"CreateCustomerEndpointRequest": {
|
|
5070
5111
|
"type": "object",
|
|
5071
5112
|
"description": "Creates one project/environment endpoint. The service validates the final normalized destination and never returns it from health or diagnostic reads.",
|
|
5072
|
-
"required": ["url"
|
|
5113
|
+
"required": ["url"],
|
|
5073
5114
|
"properties": {
|
|
5074
5115
|
"url": {
|
|
5075
5116
|
"type": "string",
|
|
@@ -5097,12 +5138,13 @@
|
|
|
5097
5138
|
},
|
|
5098
5139
|
"RotateCustomerEndpointRequest": {
|
|
5099
5140
|
"type": "object",
|
|
5100
|
-
"required": [
|
|
5141
|
+
"required": [],
|
|
5101
5142
|
"properties": {
|
|
5102
5143
|
"overlap_seconds": {
|
|
5103
5144
|
"type": "integer",
|
|
5104
5145
|
"minimum": 60,
|
|
5105
|
-
"maximum": 86400
|
|
5146
|
+
"maximum": 86400,
|
|
5147
|
+
"default": 86400
|
|
5106
5148
|
}
|
|
5107
5149
|
},
|
|
5108
5150
|
"additionalProperties": false
|
|
@@ -5361,10 +5403,17 @@
|
|
|
5361
5403
|
"CreateMessageRequest": {
|
|
5362
5404
|
"type": "object",
|
|
5363
5405
|
"description": "Creates one logical message for one subscriber and one resolved channel binding.",
|
|
5364
|
-
"required": ["to"
|
|
5406
|
+
"required": ["to"],
|
|
5365
5407
|
"properties": {
|
|
5366
5408
|
"to": {
|
|
5367
|
-
"
|
|
5409
|
+
"oneOf": [
|
|
5410
|
+
{
|
|
5411
|
+
"$ref": "#/$defs/MessageTarget"
|
|
5412
|
+
},
|
|
5413
|
+
{
|
|
5414
|
+
"$ref": "#/$defs/OpaqueIdentifier"
|
|
5415
|
+
}
|
|
5416
|
+
]
|
|
5368
5417
|
},
|
|
5369
5418
|
"notifier_id": {
|
|
5370
5419
|
"allOf": [
|
|
@@ -5387,11 +5436,11 @@
|
|
|
5387
5436
|
"description": "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`."
|
|
5388
5437
|
},
|
|
5389
5438
|
"content": {
|
|
5390
|
-
"$ref": "#/$defs/
|
|
5439
|
+
"$ref": "#/$defs/MessageContentInput"
|
|
5391
5440
|
},
|
|
5392
5441
|
"expires_at": {
|
|
5393
5442
|
"$ref": "#/$defs/Timestamp",
|
|
5394
|
-
"description": "Optional server-authoritative expiry
|
|
5443
|
+
"description": "Optional server-authoritative expiry after acceptance, through year 9999. Omit for 24 hours."
|
|
5395
5444
|
},
|
|
5396
5445
|
"correlation_id": {
|
|
5397
5446
|
"type": "string",
|
|
@@ -5425,6 +5474,28 @@
|
|
|
5425
5474
|
}
|
|
5426
5475
|
}
|
|
5427
5476
|
}
|
|
5477
|
+
},
|
|
5478
|
+
{
|
|
5479
|
+
"anyOf": [
|
|
5480
|
+
{
|
|
5481
|
+
"required": ["content"],
|
|
5482
|
+
"properties": {
|
|
5483
|
+
"content": {
|
|
5484
|
+
"$ref": "#/$defs/MessageContentInput"
|
|
5485
|
+
}
|
|
5486
|
+
},
|
|
5487
|
+
"additionalProperties": true
|
|
5488
|
+
},
|
|
5489
|
+
{
|
|
5490
|
+
"required": ["interaction"],
|
|
5491
|
+
"properties": {
|
|
5492
|
+
"interaction": {
|
|
5493
|
+
"$ref": "interaction-v1.schema.json#/$defs/InteractionSendRequest"
|
|
5494
|
+
}
|
|
5495
|
+
},
|
|
5496
|
+
"additionalProperties": true
|
|
5497
|
+
}
|
|
5498
|
+
]
|
|
5428
5499
|
}
|
|
5429
5500
|
],
|
|
5430
5501
|
"additionalProperties": false
|
|
@@ -6502,7 +6573,7 @@
|
|
|
6502
6573
|
"const": "https://whooshbang.flowxo.com/problems/idempotency_key_required"
|
|
6503
6574
|
},
|
|
6504
6575
|
"title": {
|
|
6505
|
-
"
|
|
6576
|
+
"enum": ["Invalid idempotency key", "Idempotency key required"]
|
|
6506
6577
|
},
|
|
6507
6578
|
"status": {
|
|
6508
6579
|
"const": 400
|
|
@@ -9597,21 +9668,14 @@
|
|
|
9597
9668
|
{
|
|
9598
9669
|
"type": "object",
|
|
9599
9670
|
"description": "Atomically create or resolve one subscriber and assert existing consent for an exact customer-owned email connection and domain. No verification message is sent. Revocation, suppression, recipient pause, holds and unhealthy authority take precedence. An omitted source is recorded as customer.",
|
|
9600
|
-
"required": [
|
|
9601
|
-
"subscriber_id",
|
|
9602
|
-
"notifier_id",
|
|
9603
|
-
"connection_id",
|
|
9604
|
-
"domain_id",
|
|
9605
|
-
"address",
|
|
9606
|
-
"consented",
|
|
9607
|
-
"consented_at"
|
|
9608
|
-
],
|
|
9671
|
+
"required": ["subscriber_id", "address", "consented", "consented_at"],
|
|
9609
9672
|
"properties": {
|
|
9610
9673
|
"subscriber_id": {
|
|
9611
9674
|
"$ref": "#/$defs/OpaqueIdentifier"
|
|
9612
9675
|
},
|
|
9613
9676
|
"notifier_id": {
|
|
9614
|
-
"$ref": "#/$defs/OpaqueIdentifier"
|
|
9677
|
+
"$ref": "#/$defs/OpaqueIdentifier",
|
|
9678
|
+
"default": "default"
|
|
9615
9679
|
},
|
|
9616
9680
|
"connection_id": {
|
|
9617
9681
|
"$ref": "#/$defs/OpaqueIdentifier"
|
|
@@ -9644,9 +9708,6 @@
|
|
|
9644
9708
|
"description": "Enroll an application-verified user for service email. This is relationship evidence, never consent or WhooshBang mailbox verification. An existing prior-consent binding with the same subscriber, address, notifier, connection and domain is reused with its original evidence and status.",
|
|
9645
9709
|
"required": [
|
|
9646
9710
|
"subscriber_id",
|
|
9647
|
-
"notifier_id",
|
|
9648
|
-
"connection_id",
|
|
9649
|
-
"domain_id",
|
|
9650
9711
|
"address",
|
|
9651
9712
|
"basis",
|
|
9652
9713
|
"source",
|
|
@@ -9657,7 +9718,8 @@
|
|
|
9657
9718
|
"$ref": "#/$defs/OpaqueIdentifier"
|
|
9658
9719
|
},
|
|
9659
9720
|
"notifier_id": {
|
|
9660
|
-
"$ref": "#/$defs/OpaqueIdentifier"
|
|
9721
|
+
"$ref": "#/$defs/OpaqueIdentifier",
|
|
9722
|
+
"default": "default"
|
|
9661
9723
|
},
|
|
9662
9724
|
"connection_id": {
|
|
9663
9725
|
"$ref": "#/$defs/OpaqueIdentifier"
|
|
@@ -9821,9 +9883,7 @@
|
|
|
9821
9883
|
"required": ["key", "count"],
|
|
9822
9884
|
"properties": {
|
|
9823
9885
|
"key": {
|
|
9824
|
-
"
|
|
9825
|
-
"minLength": 1,
|
|
9826
|
-
"maxLength": 128
|
|
9886
|
+
"$ref": "#/$defs/GroupKey"
|
|
9827
9887
|
},
|
|
9828
9888
|
"count": {
|
|
9829
9889
|
"type": "integer",
|
|
@@ -10782,6 +10842,12 @@
|
|
|
10782
10842
|
"purchase_cents": {
|
|
10783
10843
|
"type": "integer",
|
|
10784
10844
|
"enum": [500, 1000, 2500, 5000, 10000]
|
|
10845
|
+
},
|
|
10846
|
+
"approved_charge_usd": {
|
|
10847
|
+
"type": "string",
|
|
10848
|
+
"pattern": "^(0|[1-9][0-9]*)\\.[0-9]{6}$",
|
|
10849
|
+
"maxLength": 40,
|
|
10850
|
+
"description": "Optional. The card charge the customer approved: the pack price less any promotion shown to them. When it differs from what would be charged, the purchase is refused with credit_purchase_price_changed and nothing is charged."
|
|
10785
10851
|
}
|
|
10786
10852
|
},
|
|
10787
10853
|
"description": "Buy one credit pack now with the default card. The amount is the explicit approval of the charge."
|
|
@@ -10793,6 +10859,8 @@
|
|
|
10793
10859
|
"id",
|
|
10794
10860
|
"purchase_cents",
|
|
10795
10861
|
"credit_usd",
|
|
10862
|
+
"charged_usd",
|
|
10863
|
+
"discount_usd",
|
|
10796
10864
|
"status",
|
|
10797
10865
|
"failure",
|
|
10798
10866
|
"client_secret",
|
|
@@ -10813,6 +10881,18 @@
|
|
|
10813
10881
|
"pattern": "^(0|[1-9][0-9]*)\\.[0-9]{6}$",
|
|
10814
10882
|
"maxLength": 40
|
|
10815
10883
|
},
|
|
10884
|
+
"charged_usd": {
|
|
10885
|
+
"type": "string",
|
|
10886
|
+
"pattern": "^(0|[1-9][0-9]*)\\.[0-9]{6}$",
|
|
10887
|
+
"maxLength": 40,
|
|
10888
|
+
"description": "What the card is charged: the pack price less any promotional discount. The pack's credit is unchanged."
|
|
10889
|
+
},
|
|
10890
|
+
"discount_usd": {
|
|
10891
|
+
"type": "string",
|
|
10892
|
+
"pattern": "^(0|[1-9][0-9]*)\\.[0-9]{6}$",
|
|
10893
|
+
"maxLength": 40,
|
|
10894
|
+
"description": "The promotional discount taken off the pack price, or 0.000000."
|
|
10895
|
+
},
|
|
10816
10896
|
"status": {
|
|
10817
10897
|
"type": "string",
|
|
10818
10898
|
"enum": ["processing", "requires_action", "paid", "failed"]
|
|
@@ -11406,6 +11486,8 @@
|
|
|
11406
11486
|
"monthly_price_usd",
|
|
11407
11487
|
"charge_now_usd",
|
|
11408
11488
|
"unused_time_credit_usd",
|
|
11489
|
+
"promotion",
|
|
11490
|
+
"renewal_promotion",
|
|
11409
11491
|
"effective_at",
|
|
11410
11492
|
"expires_at",
|
|
11411
11493
|
"client_secret",
|
|
@@ -11467,6 +11549,95 @@
|
|
|
11467
11549
|
],
|
|
11468
11550
|
"description": "Compatibility field: new upgrades return 0.000000; starts and boundary changes return null. Historical quotes can retain their recorded unused-time credit. No new automatic unused-time refunds or offsets."
|
|
11469
11551
|
},
|
|
11552
|
+
"promotion": {
|
|
11553
|
+
"anyOf": [
|
|
11554
|
+
{
|
|
11555
|
+
"type": "object",
|
|
11556
|
+
"required": ["percent_off", "duration", "months", "discount_usd"],
|
|
11557
|
+
"properties": {
|
|
11558
|
+
"percent_off": {
|
|
11559
|
+
"type": "integer",
|
|
11560
|
+
"minimum": 1,
|
|
11561
|
+
"maximum": 90
|
|
11562
|
+
},
|
|
11563
|
+
"duration": {
|
|
11564
|
+
"type": "string",
|
|
11565
|
+
"enum": ["once", "repeating"]
|
|
11566
|
+
},
|
|
11567
|
+
"months": {
|
|
11568
|
+
"anyOf": [
|
|
11569
|
+
{
|
|
11570
|
+
"type": "integer",
|
|
11571
|
+
"minimum": 1,
|
|
11572
|
+
"maximum": 12
|
|
11573
|
+
},
|
|
11574
|
+
{
|
|
11575
|
+
"type": "null"
|
|
11576
|
+
}
|
|
11577
|
+
]
|
|
11578
|
+
},
|
|
11579
|
+
"discount_usd": {
|
|
11580
|
+
"type": "string",
|
|
11581
|
+
"pattern": "^(0|[1-9][0-9]*)\\.[0-9]{6}$",
|
|
11582
|
+
"maxLength": 40,
|
|
11583
|
+
"description": "What the promotion takes off charge_now_usd."
|
|
11584
|
+
}
|
|
11585
|
+
},
|
|
11586
|
+
"additionalProperties": false
|
|
11587
|
+
},
|
|
11588
|
+
{
|
|
11589
|
+
"type": "null"
|
|
11590
|
+
}
|
|
11591
|
+
],
|
|
11592
|
+
"description": "A promotion code's plan discount applied to this first plan or add-on purchase: charge_now_usd is already reduced by it, and the monthly charges keep it for its months. Null when no plan discount applies."
|
|
11593
|
+
},
|
|
11594
|
+
"renewal_promotion": {
|
|
11595
|
+
"anyOf": [
|
|
11596
|
+
{
|
|
11597
|
+
"type": "object",
|
|
11598
|
+
"required": [
|
|
11599
|
+
"percent_off",
|
|
11600
|
+
"duration",
|
|
11601
|
+
"renewal_price_usd",
|
|
11602
|
+
"ends_at"
|
|
11603
|
+
],
|
|
11604
|
+
"properties": {
|
|
11605
|
+
"percent_off": {
|
|
11606
|
+
"type": "integer",
|
|
11607
|
+
"minimum": 1,
|
|
11608
|
+
"maximum": 90
|
|
11609
|
+
},
|
|
11610
|
+
"duration": {
|
|
11611
|
+
"type": "string",
|
|
11612
|
+
"enum": ["once", "repeating"]
|
|
11613
|
+
},
|
|
11614
|
+
"renewal_price_usd": {
|
|
11615
|
+
"type": "string",
|
|
11616
|
+
"pattern": "^(0|[1-9][0-9]*)\\.[0-9]{6}$",
|
|
11617
|
+
"maxLength": 40,
|
|
11618
|
+
"description": "What the next monthly charge for this selection comes to with the promotion: monthly_price_usd less its percentage."
|
|
11619
|
+
},
|
|
11620
|
+
"ends_at": {
|
|
11621
|
+
"anyOf": [
|
|
11622
|
+
{
|
|
11623
|
+
"type": "string",
|
|
11624
|
+
"format": "date-time"
|
|
11625
|
+
},
|
|
11626
|
+
{
|
|
11627
|
+
"type": "null"
|
|
11628
|
+
}
|
|
11629
|
+
],
|
|
11630
|
+
"description": "When a repeating promotion stops applying. Null for a once promotion, which applies to the next monthly charge only."
|
|
11631
|
+
}
|
|
11632
|
+
},
|
|
11633
|
+
"additionalProperties": false
|
|
11634
|
+
},
|
|
11635
|
+
{
|
|
11636
|
+
"type": "null"
|
|
11637
|
+
}
|
|
11638
|
+
],
|
|
11639
|
+
"description": "A plan discount already running on the subscription, which keeps lowering the monthly charges after this change. It never reduces charge_now_usd. Null when none applies to the next monthly charge, and once a change is no longer a quote."
|
|
11640
|
+
},
|
|
11470
11641
|
"effective_at": {
|
|
11471
11642
|
"anyOf": [
|
|
11472
11643
|
{
|
|
@@ -11624,7 +11795,7 @@
|
|
|
11624
11795
|
"CreateOperatorMessageRequest": {
|
|
11625
11796
|
"type": "object",
|
|
11626
11797
|
"description": "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.",
|
|
11627
|
-
"required": [
|
|
11798
|
+
"required": [],
|
|
11628
11799
|
"properties": {
|
|
11629
11800
|
"recipient": {
|
|
11630
11801
|
"type": "string",
|
|
@@ -11632,11 +11803,11 @@
|
|
|
11632
11803
|
"maxLength": 128
|
|
11633
11804
|
},
|
|
11634
11805
|
"content": {
|
|
11635
|
-
"$ref": "#/$defs/
|
|
11806
|
+
"$ref": "#/$defs/MessageContentInput"
|
|
11636
11807
|
},
|
|
11637
11808
|
"expires_at": {
|
|
11638
11809
|
"$ref": "#/$defs/Timestamp",
|
|
11639
|
-
"description": "Optional server-authoritative expiry
|
|
11810
|
+
"description": "Optional server-authoritative expiry after acceptance, through year 9999. Omit for 24 hours."
|
|
11640
11811
|
},
|
|
11641
11812
|
"correlation_id": {
|
|
11642
11813
|
"type": "string",
|
|
@@ -11655,7 +11826,31 @@
|
|
|
11655
11826
|
"description": "Omitted means service. Marketing refuses service-only bindings before charging and at every delayed dispatch."
|
|
11656
11827
|
}
|
|
11657
11828
|
},
|
|
11658
|
-
"additionalProperties": false
|
|
11829
|
+
"additionalProperties": false,
|
|
11830
|
+
"allOf": [
|
|
11831
|
+
{
|
|
11832
|
+
"anyOf": [
|
|
11833
|
+
{
|
|
11834
|
+
"required": ["content"],
|
|
11835
|
+
"properties": {
|
|
11836
|
+
"content": {
|
|
11837
|
+
"$ref": "#/$defs/MessageContentInput"
|
|
11838
|
+
}
|
|
11839
|
+
},
|
|
11840
|
+
"additionalProperties": true
|
|
11841
|
+
},
|
|
11842
|
+
{
|
|
11843
|
+
"required": ["interaction"],
|
|
11844
|
+
"properties": {
|
|
11845
|
+
"interaction": {
|
|
11846
|
+
"$ref": "interaction-v1.schema.json#/$defs/InteractionSendRequest"
|
|
11847
|
+
}
|
|
11848
|
+
},
|
|
11849
|
+
"additionalProperties": true
|
|
11850
|
+
}
|
|
11851
|
+
]
|
|
11852
|
+
}
|
|
11853
|
+
]
|
|
11659
11854
|
},
|
|
11660
11855
|
"OperatorMessageResult": {
|
|
11661
11856
|
"type": "object",
|
|
@@ -11895,6 +12090,517 @@
|
|
|
11895
12090
|
}
|
|
11896
12091
|
},
|
|
11897
12092
|
"additionalProperties": false
|
|
12093
|
+
},
|
|
12094
|
+
"BillingPromotion": {
|
|
12095
|
+
"type": "object",
|
|
12096
|
+
"required": [
|
|
12097
|
+
"id",
|
|
12098
|
+
"source",
|
|
12099
|
+
"name",
|
|
12100
|
+
"status",
|
|
12101
|
+
"starts_at",
|
|
12102
|
+
"ends_at",
|
|
12103
|
+
"ended_at",
|
|
12104
|
+
"benefit"
|
|
12105
|
+
],
|
|
12106
|
+
"properties": {
|
|
12107
|
+
"id": {
|
|
12108
|
+
"type": "string",
|
|
12109
|
+
"pattern": "^grn_[0-9a-z]{26}$"
|
|
12110
|
+
},
|
|
12111
|
+
"source": {
|
|
12112
|
+
"type": "string",
|
|
12113
|
+
"enum": ["whooshbang", "code"],
|
|
12114
|
+
"description": "`whooshbang` for a reward WhooshBang gave the organization directly; `code` for a promotion code the organization redeemed."
|
|
12115
|
+
},
|
|
12116
|
+
"name": {
|
|
12117
|
+
"anyOf": [
|
|
12118
|
+
{
|
|
12119
|
+
"type": "string",
|
|
12120
|
+
"minLength": 1,
|
|
12121
|
+
"maxLength": 120
|
|
12122
|
+
},
|
|
12123
|
+
{
|
|
12124
|
+
"type": "null"
|
|
12125
|
+
}
|
|
12126
|
+
],
|
|
12127
|
+
"description": "The promotion's name for a redeemed code. Null for a direct reward."
|
|
12128
|
+
},
|
|
12129
|
+
"status": {
|
|
12130
|
+
"type": "string",
|
|
12131
|
+
"enum": ["active", "pending", "expired", "used", "revoked"],
|
|
12132
|
+
"description": "`pending` is a credit pack discount carried by a payment still waiting for the customer's bank; it is not available to another purchase. `used` applies only to a discount that has been applied to a purchase or put on a plan. `revoked` means WhooshBang withdrew what remained."
|
|
12133
|
+
},
|
|
12134
|
+
"starts_at": {
|
|
12135
|
+
"type": "string",
|
|
12136
|
+
"format": "date-time"
|
|
12137
|
+
},
|
|
12138
|
+
"ends_at": {
|
|
12139
|
+
"anyOf": [
|
|
12140
|
+
{
|
|
12141
|
+
"type": "string",
|
|
12142
|
+
"format": "date-time"
|
|
12143
|
+
},
|
|
12144
|
+
{
|
|
12145
|
+
"type": "null"
|
|
12146
|
+
}
|
|
12147
|
+
],
|
|
12148
|
+
"description": "When the benefit stops. Null for a discount, which ends when it is used or, for a plan discount, after its months."
|
|
12149
|
+
},
|
|
12150
|
+
"ended_at": {
|
|
12151
|
+
"anyOf": [
|
|
12152
|
+
{
|
|
12153
|
+
"type": "string",
|
|
12154
|
+
"format": "date-time"
|
|
12155
|
+
},
|
|
12156
|
+
{
|
|
12157
|
+
"type": "null"
|
|
12158
|
+
}
|
|
12159
|
+
],
|
|
12160
|
+
"description": "When the promotion was used or withdrawn, if it was."
|
|
12161
|
+
},
|
|
12162
|
+
"benefit": {
|
|
12163
|
+
"oneOf": [
|
|
12164
|
+
{
|
|
12165
|
+
"type": "object",
|
|
12166
|
+
"required": ["kind", "credit_usd", "remaining_usd"],
|
|
12167
|
+
"properties": {
|
|
12168
|
+
"kind": {
|
|
12169
|
+
"const": "message_credit"
|
|
12170
|
+
},
|
|
12171
|
+
"credit_usd": {
|
|
12172
|
+
"type": "string",
|
|
12173
|
+
"pattern": "^(0|[1-9][0-9]*)\\.[0-9]{6}$",
|
|
12174
|
+
"maxLength": 40
|
|
12175
|
+
},
|
|
12176
|
+
"remaining_usd": {
|
|
12177
|
+
"type": "string",
|
|
12178
|
+
"pattern": "^(0|[1-9][0-9]*)\\.[0-9]{6}$",
|
|
12179
|
+
"maxLength": 40
|
|
12180
|
+
}
|
|
12181
|
+
},
|
|
12182
|
+
"additionalProperties": false,
|
|
12183
|
+
"description": "Promotional credit for messages. Spent before purchased, bonus and welcome credit; it never pays the shared-email charge."
|
|
12184
|
+
},
|
|
12185
|
+
{
|
|
12186
|
+
"type": "object",
|
|
12187
|
+
"required": ["kind", "shared_emails", "remaining"],
|
|
12188
|
+
"properties": {
|
|
12189
|
+
"kind": {
|
|
12190
|
+
"const": "shared_emails"
|
|
12191
|
+
},
|
|
12192
|
+
"shared_emails": {
|
|
12193
|
+
"type": "integer",
|
|
12194
|
+
"minimum": 1,
|
|
12195
|
+
"maximum": 1000000
|
|
12196
|
+
},
|
|
12197
|
+
"remaining": {
|
|
12198
|
+
"type": "integer",
|
|
12199
|
+
"minimum": 0,
|
|
12200
|
+
"maximum": 1000000
|
|
12201
|
+
}
|
|
12202
|
+
},
|
|
12203
|
+
"additionalProperties": false,
|
|
12204
|
+
"description": "Emails through WhooshBang's shared email service with no shared-email charge. The message itself is still paid for."
|
|
12205
|
+
},
|
|
12206
|
+
{
|
|
12207
|
+
"type": "object",
|
|
12208
|
+
"required": ["kind"],
|
|
12209
|
+
"properties": {
|
|
12210
|
+
"kind": {
|
|
12211
|
+
"const": "branding"
|
|
12212
|
+
}
|
|
12213
|
+
},
|
|
12214
|
+
"additionalProperties": false,
|
|
12215
|
+
"description": "WhooshBang branding can be removed from recipient messages until ends_at."
|
|
12216
|
+
},
|
|
12217
|
+
{
|
|
12218
|
+
"type": "object",
|
|
12219
|
+
"required": [
|
|
12220
|
+
"kind",
|
|
12221
|
+
"applies_to",
|
|
12222
|
+
"percent_off",
|
|
12223
|
+
"amount_off_usd",
|
|
12224
|
+
"duration",
|
|
12225
|
+
"months"
|
|
12226
|
+
],
|
|
12227
|
+
"properties": {
|
|
12228
|
+
"kind": {
|
|
12229
|
+
"const": "discount"
|
|
12230
|
+
},
|
|
12231
|
+
"applies_to": {
|
|
12232
|
+
"type": "string",
|
|
12233
|
+
"enum": ["credit_packs", "subscriptions"]
|
|
12234
|
+
},
|
|
12235
|
+
"percent_off": {
|
|
12236
|
+
"anyOf": [
|
|
12237
|
+
{
|
|
12238
|
+
"type": "integer",
|
|
12239
|
+
"minimum": 1,
|
|
12240
|
+
"maximum": 90
|
|
12241
|
+
},
|
|
12242
|
+
{
|
|
12243
|
+
"type": "null"
|
|
12244
|
+
}
|
|
12245
|
+
]
|
|
12246
|
+
},
|
|
12247
|
+
"amount_off_usd": {
|
|
12248
|
+
"anyOf": [
|
|
12249
|
+
{
|
|
12250
|
+
"type": "string",
|
|
12251
|
+
"pattern": "^(0|[1-9][0-9]*)\\.[0-9]{6}$",
|
|
12252
|
+
"maxLength": 40
|
|
12253
|
+
},
|
|
12254
|
+
{
|
|
12255
|
+
"type": "null"
|
|
12256
|
+
}
|
|
12257
|
+
]
|
|
12258
|
+
},
|
|
12259
|
+
"duration": {
|
|
12260
|
+
"type": "string",
|
|
12261
|
+
"enum": ["once", "repeating"]
|
|
12262
|
+
},
|
|
12263
|
+
"months": {
|
|
12264
|
+
"anyOf": [
|
|
12265
|
+
{
|
|
12266
|
+
"type": "integer",
|
|
12267
|
+
"minimum": 1,
|
|
12268
|
+
"maximum": 12
|
|
12269
|
+
},
|
|
12270
|
+
{
|
|
12271
|
+
"type": "null"
|
|
12272
|
+
}
|
|
12273
|
+
]
|
|
12274
|
+
}
|
|
12275
|
+
},
|
|
12276
|
+
"additionalProperties": false,
|
|
12277
|
+
"description": "Money off the next credit pack, or off plan and add-on charges for one charge or a number of months."
|
|
12278
|
+
}
|
|
12279
|
+
]
|
|
12280
|
+
}
|
|
12281
|
+
},
|
|
12282
|
+
"additionalProperties": false,
|
|
12283
|
+
"description": "One promotion an organization holds. Promotional value has no cash value, is never refunded and cannot move to another organization."
|
|
12284
|
+
},
|
|
12285
|
+
"BillingPromotions": {
|
|
12286
|
+
"type": "object",
|
|
12287
|
+
"required": [
|
|
12288
|
+
"promotional_credit_usd",
|
|
12289
|
+
"free_shared_emails",
|
|
12290
|
+
"branding_removed_until",
|
|
12291
|
+
"promotions"
|
|
12292
|
+
],
|
|
12293
|
+
"properties": {
|
|
12294
|
+
"promotional_credit_usd": {
|
|
12295
|
+
"type": "string",
|
|
12296
|
+
"pattern": "^(0|[1-9][0-9]*)\\.[0-9]{6}$",
|
|
12297
|
+
"maxLength": 40,
|
|
12298
|
+
"description": "Unexpired promotional message credit available now."
|
|
12299
|
+
},
|
|
12300
|
+
"free_shared_emails": {
|
|
12301
|
+
"type": "integer",
|
|
12302
|
+
"minimum": 0,
|
|
12303
|
+
"maximum": 2147483647,
|
|
12304
|
+
"description": "Unexpired free shared emails available now."
|
|
12305
|
+
},
|
|
12306
|
+
"branding_removed_until": {
|
|
12307
|
+
"anyOf": [
|
|
12308
|
+
{
|
|
12309
|
+
"type": "string",
|
|
12310
|
+
"format": "date-time"
|
|
12311
|
+
},
|
|
12312
|
+
{
|
|
12313
|
+
"type": "null"
|
|
12314
|
+
}
|
|
12315
|
+
],
|
|
12316
|
+
"description": "When the latest active branding promotion ends, if one is active."
|
|
12317
|
+
},
|
|
12318
|
+
"promotions": {
|
|
12319
|
+
"type": "array",
|
|
12320
|
+
"items": {
|
|
12321
|
+
"$ref": "#/$defs/BillingPromotion"
|
|
12322
|
+
},
|
|
12323
|
+
"maxItems": 200
|
|
12324
|
+
}
|
|
12325
|
+
},
|
|
12326
|
+
"additionalProperties": false,
|
|
12327
|
+
"description": "An organization's promotions: rewards WhooshBang gave it and promotion codes it redeemed, newest first."
|
|
12328
|
+
},
|
|
12329
|
+
"RedeemBillingPromotionRequest": {
|
|
12330
|
+
"type": "object",
|
|
12331
|
+
"required": ["code"],
|
|
12332
|
+
"properties": {
|
|
12333
|
+
"code": {
|
|
12334
|
+
"type": "string",
|
|
12335
|
+
"minLength": 4,
|
|
12336
|
+
"maxLength": 64,
|
|
12337
|
+
"pattern": "^[A-Za-z0-9][A-Za-z0-9 _-]*$",
|
|
12338
|
+
"description": "The promotion code. Case, spaces, hyphens and underscores are ignored."
|
|
12339
|
+
}
|
|
12340
|
+
},
|
|
12341
|
+
"additionalProperties": false
|
|
12342
|
+
},
|
|
12343
|
+
"CanonicalCreateMessageRequest": {
|
|
12344
|
+
"type": "object",
|
|
12345
|
+
"description": "Creates one logical message for one subscriber and one resolved channel binding.",
|
|
12346
|
+
"required": ["to", "content"],
|
|
12347
|
+
"properties": {
|
|
12348
|
+
"to": {
|
|
12349
|
+
"$ref": "#/$defs/MessageTarget"
|
|
12350
|
+
},
|
|
12351
|
+
"notifier_id": {
|
|
12352
|
+
"allOf": [
|
|
12353
|
+
{
|
|
12354
|
+
"$ref": "#/$defs/OpaqueIdentifier"
|
|
12355
|
+
}
|
|
12356
|
+
],
|
|
12357
|
+
"default": "default"
|
|
12358
|
+
},
|
|
12359
|
+
"delivery_target": {
|
|
12360
|
+
"$ref": "#/$defs/MessageDeliveryTarget",
|
|
12361
|
+
"description": "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."
|
|
12362
|
+
},
|
|
12363
|
+
"connection_id": {
|
|
12364
|
+
"allOf": [
|
|
12365
|
+
{
|
|
12366
|
+
"$ref": "#/$defs/OpaqueIdentifier"
|
|
12367
|
+
}
|
|
12368
|
+
],
|
|
12369
|
+
"description": "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`."
|
|
12370
|
+
},
|
|
12371
|
+
"content": {
|
|
12372
|
+
"$ref": "#/$defs/MessageContent"
|
|
12373
|
+
},
|
|
12374
|
+
"expires_at": {
|
|
12375
|
+
"$ref": "#/$defs/Timestamp",
|
|
12376
|
+
"description": "Optional server-authoritative expiry within the representable range through year 9999 after acceptance."
|
|
12377
|
+
},
|
|
12378
|
+
"correlation_id": {
|
|
12379
|
+
"type": "string",
|
|
12380
|
+
"minLength": 1,
|
|
12381
|
+
"maxLength": 128
|
|
12382
|
+
},
|
|
12383
|
+
"metadata": {
|
|
12384
|
+
"$ref": "#/$defs/Metadata"
|
|
12385
|
+
},
|
|
12386
|
+
"interaction": {
|
|
12387
|
+
"$ref": "interaction-v1.schema.json#/$defs/CanonicalInteractionSendRequest"
|
|
12388
|
+
},
|
|
12389
|
+
"purpose": {
|
|
12390
|
+
"enum": ["service", "marketing"],
|
|
12391
|
+
"default": "service",
|
|
12392
|
+
"description": "Omitted means service. Marketing refuses service-only bindings before charging and at every delayed dispatch."
|
|
12393
|
+
}
|
|
12394
|
+
},
|
|
12395
|
+
"allOf": [
|
|
12396
|
+
{
|
|
12397
|
+
"if": {
|
|
12398
|
+
"required": ["connection_id"],
|
|
12399
|
+
"properties": {
|
|
12400
|
+
"connection_id": true
|
|
12401
|
+
}
|
|
12402
|
+
},
|
|
12403
|
+
"then": {
|
|
12404
|
+
"properties": {
|
|
12405
|
+
"delivery_target": {
|
|
12406
|
+
"const": "connection"
|
|
12407
|
+
}
|
|
12408
|
+
}
|
|
12409
|
+
}
|
|
12410
|
+
}
|
|
12411
|
+
],
|
|
12412
|
+
"additionalProperties": false
|
|
12413
|
+
},
|
|
12414
|
+
"CanonicalCreateGroupBroadcastRequest": {
|
|
12415
|
+
"type": "object",
|
|
12416
|
+
"description": "Creates one group broadcast using the existing ordinary message envelope. The group target comes only from the path.",
|
|
12417
|
+
"required": ["content"],
|
|
12418
|
+
"properties": {
|
|
12419
|
+
"notifier_id": {
|
|
12420
|
+
"allOf": [
|
|
12421
|
+
{
|
|
12422
|
+
"$ref": "#/$defs/OpaqueIdentifier"
|
|
12423
|
+
}
|
|
12424
|
+
],
|
|
12425
|
+
"default": "default"
|
|
12426
|
+
},
|
|
12427
|
+
"content": {
|
|
12428
|
+
"$ref": "#/$defs/MessageContent"
|
|
12429
|
+
},
|
|
12430
|
+
"expires_at": {
|
|
12431
|
+
"$ref": "#/$defs/Timestamp"
|
|
12432
|
+
},
|
|
12433
|
+
"correlation_id": {
|
|
12434
|
+
"type": "string",
|
|
12435
|
+
"minLength": 1,
|
|
12436
|
+
"maxLength": 128
|
|
12437
|
+
},
|
|
12438
|
+
"metadata": {
|
|
12439
|
+
"$ref": "#/$defs/Metadata"
|
|
12440
|
+
},
|
|
12441
|
+
"interaction": {
|
|
12442
|
+
"$ref": "interaction-v1.schema.json#/$defs/CanonicalInteractionSendRequest"
|
|
12443
|
+
},
|
|
12444
|
+
"purpose": {
|
|
12445
|
+
"enum": ["service", "marketing"],
|
|
12446
|
+
"default": "service",
|
|
12447
|
+
"description": "Omitted means service. Marketing refuses service-only bindings before charging and at every delayed dispatch."
|
|
12448
|
+
}
|
|
12449
|
+
},
|
|
12450
|
+
"additionalProperties": false
|
|
12451
|
+
},
|
|
12452
|
+
"CanonicalCreateOperatorMessageRequest": {
|
|
12453
|
+
"type": "object",
|
|
12454
|
+
"description": "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.",
|
|
12455
|
+
"required": ["content"],
|
|
12456
|
+
"properties": {
|
|
12457
|
+
"recipient": {
|
|
12458
|
+
"type": "string",
|
|
12459
|
+
"minLength": 1,
|
|
12460
|
+
"maxLength": 128
|
|
12461
|
+
},
|
|
12462
|
+
"content": {
|
|
12463
|
+
"$ref": "#/$defs/MessageContent"
|
|
12464
|
+
},
|
|
12465
|
+
"expires_at": {
|
|
12466
|
+
"$ref": "#/$defs/Timestamp",
|
|
12467
|
+
"description": "Optional server-authoritative expiry within the representable range through year 9999 after acceptance."
|
|
12468
|
+
},
|
|
12469
|
+
"correlation_id": {
|
|
12470
|
+
"type": "string",
|
|
12471
|
+
"minLength": 1,
|
|
12472
|
+
"maxLength": 128
|
|
12473
|
+
},
|
|
12474
|
+
"metadata": {
|
|
12475
|
+
"$ref": "#/$defs/Metadata"
|
|
12476
|
+
},
|
|
12477
|
+
"interaction": {
|
|
12478
|
+
"$ref": "interaction-v1.schema.json#/$defs/CanonicalInteractionSendRequest"
|
|
12479
|
+
},
|
|
12480
|
+
"purpose": {
|
|
12481
|
+
"enum": ["service", "marketing"],
|
|
12482
|
+
"default": "service",
|
|
12483
|
+
"description": "Omitted means service. Marketing refuses service-only bindings before charging and at every delayed dispatch."
|
|
12484
|
+
}
|
|
12485
|
+
},
|
|
12486
|
+
"additionalProperties": false
|
|
12487
|
+
},
|
|
12488
|
+
"MessageContentInput": {
|
|
12489
|
+
"oneOf": [
|
|
12490
|
+
{
|
|
12491
|
+
"type": "string",
|
|
12492
|
+
"minLength": 1,
|
|
12493
|
+
"maxLength": 8192,
|
|
12494
|
+
"x-max-utf8-bytes": 8192
|
|
12495
|
+
},
|
|
12496
|
+
{
|
|
12497
|
+
"$ref": "#/$defs/TextContentInput"
|
|
12498
|
+
},
|
|
12499
|
+
{
|
|
12500
|
+
"$ref": "#/$defs/DocumentContentInput"
|
|
12501
|
+
}
|
|
12502
|
+
]
|
|
12503
|
+
},
|
|
12504
|
+
"TextContentInput": {
|
|
12505
|
+
"type": "object",
|
|
12506
|
+
"required": ["text"],
|
|
12507
|
+
"properties": {
|
|
12508
|
+
"type": {
|
|
12509
|
+
"const": "text"
|
|
12510
|
+
},
|
|
12511
|
+
"format": {
|
|
12512
|
+
"type": "string",
|
|
12513
|
+
"enum": ["plain", "markdown"],
|
|
12514
|
+
"description": "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."
|
|
12515
|
+
},
|
|
12516
|
+
"text": {
|
|
12517
|
+
"description": "The complete notification content. This remains authoritative and sufficient when an adapter cannot render optional structure.",
|
|
12518
|
+
"type": "string",
|
|
12519
|
+
"minLength": 1,
|
|
12520
|
+
"maxLength": 8192,
|
|
12521
|
+
"x-max-utf8-bytes": 8192
|
|
12522
|
+
},
|
|
12523
|
+
"title": {
|
|
12524
|
+
"description": "An optional semantic title. The adapter chooses its native presentation.",
|
|
12525
|
+
"type": "string",
|
|
12526
|
+
"minLength": 1,
|
|
12527
|
+
"maxLength": 200,
|
|
12528
|
+
"x-max-utf8-bytes": 800
|
|
12529
|
+
},
|
|
12530
|
+
"sections": {
|
|
12531
|
+
"description": "Optional ordered semantic sections that enhance, but never replace, the complete text.",
|
|
12532
|
+
"type": "array",
|
|
12533
|
+
"minItems": 1,
|
|
12534
|
+
"maxItems": 12,
|
|
12535
|
+
"items": {
|
|
12536
|
+
"$ref": "#/$defs/StructuredTextSection"
|
|
12537
|
+
}
|
|
12538
|
+
},
|
|
12539
|
+
"image": {
|
|
12540
|
+
"$ref": "#/$defs/NotificationImageInput"
|
|
12541
|
+
}
|
|
12542
|
+
},
|
|
12543
|
+
"additionalProperties": false
|
|
12544
|
+
},
|
|
12545
|
+
"DocumentContentInput": {
|
|
12546
|
+
"description": "An authoritative ordered portable notification document that every delivery adapter renders faithfully.",
|
|
12547
|
+
"type": "object",
|
|
12548
|
+
"required": ["blocks"],
|
|
12549
|
+
"properties": {
|
|
12550
|
+
"type": {
|
|
12551
|
+
"const": "document"
|
|
12552
|
+
},
|
|
12553
|
+
"title": {
|
|
12554
|
+
"description": "An optional semantic document title. The adapter chooses its native presentation.",
|
|
12555
|
+
"type": "string",
|
|
12556
|
+
"minLength": 1,
|
|
12557
|
+
"maxLength": 200,
|
|
12558
|
+
"x-max-utf8-bytes": 800
|
|
12559
|
+
},
|
|
12560
|
+
"blocks": {
|
|
12561
|
+
"description": "The complete portable document in exact authored order.",
|
|
12562
|
+
"type": "array",
|
|
12563
|
+
"minItems": 1,
|
|
12564
|
+
"maxItems": 24,
|
|
12565
|
+
"items": {
|
|
12566
|
+
"$ref": "#/$defs/DocumentBlock"
|
|
12567
|
+
}
|
|
12568
|
+
},
|
|
12569
|
+
"image": {
|
|
12570
|
+
"$ref": "#/$defs/NotificationImageInput"
|
|
12571
|
+
}
|
|
12572
|
+
},
|
|
12573
|
+
"additionalProperties": false
|
|
12574
|
+
},
|
|
12575
|
+
"NotificationImageInput": {
|
|
12576
|
+
"type": "object",
|
|
12577
|
+
"description": "One optional provider-neutral illustrative image. The notification content remains complete without the pixels.",
|
|
12578
|
+
"required": ["asset_id"],
|
|
12579
|
+
"properties": {
|
|
12580
|
+
"asset_id": {
|
|
12581
|
+
"$ref": "#/$defs/NotificationImageAssetId"
|
|
12582
|
+
},
|
|
12583
|
+
"purpose": {
|
|
12584
|
+
"const": "illustration",
|
|
12585
|
+
"default": "illustration"
|
|
12586
|
+
},
|
|
12587
|
+
"description": {
|
|
12588
|
+
"type": "string",
|
|
12589
|
+
"minLength": 1,
|
|
12590
|
+
"maxLength": 1000,
|
|
12591
|
+
"pattern": "^(?=.*\\S)[^\\u0000-\\u001F\\u007F]+$",
|
|
12592
|
+
"x-max-utf8-bytes": 4000,
|
|
12593
|
+
"description": "Optional accessible description preserved by every adapter. Omit it for a decorative illustration; notification text must remain complete without the image."
|
|
12594
|
+
}
|
|
12595
|
+
},
|
|
12596
|
+
"additionalProperties": false
|
|
12597
|
+
},
|
|
12598
|
+
"GroupKey": {
|
|
12599
|
+
"type": "string",
|
|
12600
|
+
"minLength": 1,
|
|
12601
|
+
"maxLength": 63,
|
|
12602
|
+
"pattern": "^[A-Za-z0-9]+(?:[-_][A-Za-z0-9]+)*$",
|
|
12603
|
+
"description": "A stable, case-sensitive subscriber group key. Existing keys are preserved exactly."
|
|
11898
12604
|
}
|
|
11899
12605
|
}
|
|
11900
12606
|
}
|