addedInput schema / properties / channels / additionalProperties
Added value: +{
+ "additionalProperties": false,
+ "properties": {
+ "brand_id": {
+ "description": "Brand applied when delivering on this channel",
+ "type": "string"
+ },
+ "if": {
+ "description": "Expression; the channel is used only when truthy",
+ "type": "string"
+ },
+ "metadata": {
+ "additionalProperties": false,
+ "properties": {
+ "utm": {
+ "additionalProperties": false,
+ "properties": {
+ "campaign": {
+ "type": "string"
+ },
+ "content": {
+ "type": "string"
+ },
+ "medium": {
+ "type": "string"
+ },
+ "source": {
+ "type": "string"
+ },
+ "term": {
+ "type": "string"
+ }
+ },
+ "type": "object"
+ }
+ },
+ "type": "object"
+ },
+ "override": {
+ "additionalProperties": {},
+ "description": "Channel-specific overrides, e.g. email subject/from or push title/icon",
+ "type": "object"
+ },
+ "providers": {
+ "description": "Providers eligible for this channel, in preference order",
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "routing_method": {
+ "description": "\"all\" delivers via every provider; \"single\" stops after the first success",
+ "enum": [
+ "all",
+ "single"
+ ],
+ "type": "string"
+ },
+ "timeouts": {
+ "additionalProperties": false,
+ "properties": {
+ "channel": {
+ "description": "Whole-channel timeout in ms",
+ "type": "number"
+ },
+ "provider": {
+ "description": "Per-provider timeout in ms",
+ "type": "number"
+ }
+ },
+ "type": "object"
+ }
+ },
+ "type": "object"
+}
changedInput schema / properties / channels / description
Previous value: -"Channel-specific delivery configuration"New value: +"Per-channel delivery configuration, keyed by channel name. Example: { \"email\": { \"providers\": [\"sendgrid\"], \"routing_method\": \"single\" } }"
addedInput schema / properties / channels / type
Added value: +"object"
addedInput schema / properties / content / additionalProperties
Added value: +false
changedInput schema / properties / content / description
Previous value: -"Elemental content object (e.g. elements and version per Courier Elemental schema)"New value: +"Elemental content document. Example: { \"version\": \"2022-01-01\", \"elements\": [{ \"type\": \"meta\", \"title\": \"Welcome\" }, { \"type\": \"text\", \"content\": \"Thanks for signing up.\" }] }"
addedInput schema / properties / content / properties
Added value: +{
+ "brand": {
+ "additionalProperties": {},
+ "description": "Inline brand overrides",
+ "type": "object"
+ },
+ "elements": {
+ "description": "Elemental nodes. Channel and group containers nest to any depth",
+ "items": {
+ "anyOf": [
+ {
+ "anyOf": [
+ {
+ "additionalProperties": false,
+ "properties": {
+ "channels": {
+ "description": "Restrict this element to these channels",
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "content": {
+ "description": "The text to render",
+ "type": "string"
+ },
+ "format": {
+ "const": "markdown",
+ "description": "Set to \"markdown\" to render markdown",
+ "type": "string"
+ },
+ "if": {
+ "description": "Expression; the element renders only when truthy",
+ "type": "string"
+ },
+ "loop": {
+ "description": "Expression resolving to a list to repeat this element over",
+ "type": "string"
+ },
+ "ref": {
+ "description": "Reference name for this element",
+ "type": "string"
+ },
+ "type": {
+ "const": "text",
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "content"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "channels": {
+ "$ref": "#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/channels"
+ },
+ "if": {
+ "$ref": "#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/if"
+ },
+ "loop": {
+ "$ref": "#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/loop"
+ },
+ "ref": {
+ "$ref": "#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/ref"
+ },
+ "title": {
+ "description": "Message title (email subject, push title, etc.)",
+ "type": "string"
+ },
+ "type": {
+ "const": "meta",
+ "type": "string"
+ }
+ },
+ "required": [
+ "type"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "align": {
+ "enum": [
+ "center",
+ "left",
+ "right",
+ "full"
+ ],
+ "type": "string"
+ },
+ "altText": {
+ "type": "string"
+ },
+ "channels": {
+ "$ref": "#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/channels"
+ },
+ "href": {
+ "description": "Link the image points to",
+ "type": "string"
+ },
+ "if": {
+ "$ref": "#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/if"
+ },
+ "loop": {
+ "$ref": "#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/loop"
+ },
+ "ref": {
+ "$ref": "#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/ref"
+ },
+ "src": {
+ "description": "Image URL",
+ "type": "string"
+ },
+ "type": {
+ "const": "image",
+ "type": "string"
+ },
+ "width": {
+ "description": "Rendered width, e.g. \"300px\"",
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "src"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "actionId": {
+ "type": "string"
+ },
+ "align": {
+ "$ref": "#/properties/content/properties/elements/items/anyOf/0/anyOf/2/properties/align"
+ },
+ "backgroundColor": {
+ "type": "string"
+ },
+ "channels": {
+ "$ref": "#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/channels"
+ },
+ "content": {
+ "description": "Button or link label",
+ "type": "string"
+ },
+ "href": {
+ "description": "URL the action opens",
+ "type": "string"
+ },
+ "if": {
+ "$ref": "#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/if"
+ },
+ "loop": {
+ "$ref": "#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/loop"
+ },
+ "ref": {
+ "$ref": "#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/ref"
+ },
+ "style": {
+ "enum": [
+ "button",
+ "link"
+ ],
+ "type": "string"
+ },
+ "type": {
+ "const": "action",
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "content",
+ "href"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "channels": {
+ "$ref": "#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/channels"
+ },
+ "color": {
+ "type": "string"
+ },
+ "if": {
+ "$ref": "#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/if"
+ },
+ "loop": {
+ "$ref": "#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/loop"
+ },
+ "ref": {
+ "$ref": "#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/ref"
+ },
+ "type": {
+ "const": "divider",
+ "type": "string"
+ }
+ },
+ "required": [
+ "type"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "align": {
+ "$ref": "#/properties/content/properties/elements/items/anyOf/0/anyOf/2/properties/align"
+ },
+ "borderColor": {
+ "type": "string"
+ },
+ "channels": {
+ "$ref": "#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/channels"
+ },
+ "content": {
+ "type": "string"
+ },
+ "if": {
+ "$ref": "#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/if"
+ },
+ "loop": {
+ "$ref": "#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/loop"
+ },
+ "ref": {
+ "$ref": "#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/ref"
+ },
+ "textStyle": {
+ "enum": [
+ "text",
+ "h1",
+ "h2",
+ "subtext"
+ ],
+ "type": "string"
+ },
+ "type": {
+ "const": "quote",
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "content"
+ ],
+ "type": "object"
+ }
+ ]
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "channel": {
+ "description": "Channel these elements target, e.g. \"email\", \"push\", \"inbox\"",
+ "type": "string"
+ },
+ "channels": {
+ "$ref": "#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/channels"
+ },
+ "elements": {
+ "description": "Elements rendered for this channel",
+ "items": {
+ "$ref": "#/properties/content/properties/elements/items"
+ },
+ "type": "array"
+ },
+ "if": {
+ "$ref": "#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/if"
+ },
+ "loop": {
+ "$ref": "#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/loop"
+ },
+ "raw": {
+ "additionalProperties": {},
+ "description": "Channel-native payload passed through untouched",
+ "type": "object"
+ },
+ "ref": {
+ "$ref": "#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/ref"
+ },
+ "type": {
+ "const": "channel",
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "channel"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "channels": {
+ "$ref": "#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/channels"
+ },
+ "elements": {
+ "description": "Grouped elements",
+ "items": {
+ "$ref": "#/properties/content/properties/elements/items"
+ },
+ "type": "array"
+ },
+ "if": {
+ "$ref": "#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/if"
+ },
+ "loop": {
+ "$ref": "#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/loop"
+ },
+ "ref": {
+ "$ref": "#/properties/content/properties/elements/items/anyOf/0/anyOf/0/properties/ref"
+ },
+ "type": {
+ "const": "group",
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "elements"
+ ],
+ "type": "object"
+ }
+ ]
+ },
+ "type": "array"
+ },
+ "version": {
+ "const": "2022-01-01",
+ "description": "Elemental schema version",
+ "type": "string"
+ }
+}
addedInput schema / properties / content / required
Added value: +[
+ "version",
+ "elements"
+]
addedInput schema / properties / content / type
Added value: +"object"
addedInput schema / properties / providers / additionalProperties
Added value: +{
+ "additionalProperties": false,
+ "properties": {
+ "if": {
+ "description": "Expression; the provider is used only when truthy",
+ "type": "string"
+ },
+ "override": {
+ "additionalProperties": {},
+ "description": "Provider-native payload fields merged into the request",
+ "type": "object"
+ },
+ "timeouts": {
+ "description": "Provider timeout in ms",
+ "type": "number"
+ }
+ },
+ "type": "object"
+}
changedInput schema / properties / providers / description
Previous value: -"Provider-specific routing configuration"New value: +"Per-provider configuration, keyed by provider name. Example: { \"sendgrid\": { \"override\": { \"from\": \"noreply@example.com\" } } }"
addedInput schema / properties / providers / type
Added value: +"object"
addedInput schema / properties / routing / additionalProperties
Added value: +false
changedInput schema / properties / routing / description
Previous value: -"Message routing configuration"New value: +"Message routing tree. Example: { \"method\": \"single\", \"channels\": [\"email\", \"sms\"] }"
addedInput schema / properties / routing / properties
Added value: +{
+ "channels": {
+ "description": "Channels to attempt, in order. Entries may be names or config objects",
+ "items": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "additionalProperties": false,
+ "properties": {
+ "channel": {
+ "description": "Channel name",
+ "type": "string"
+ },
+ "config": {
+ "additionalProperties": {},
+ "type": "object"
+ },
+ "if": {
+ "type": "string"
+ },
+ "method": {
+ "enum": [
+ "all",
+ "single"
+ ],
+ "type": "string"
+ },
+ "providers": {
+ "items": {
+ "anyOf": [
+ {
+ "additionalProperties": false,
+ "properties": {
+ "config": {
+ "additionalProperties": {},
+ "type": "object"
+ },
+ "if": {
+ "type": "string"
+ },
+ "metadata": {
+ "additionalProperties": false,
+ "properties": {
+ "utm": {
+ "$ref": "#/properties/channels/additionalProperties/properties/metadata/properties/utm"
+ }
+ },
+ "type": "object"
+ },
+ "name": {
+ "description": "Provider name",
+ "type": "string"
+ }
+ },
+ "required": [
+ "name"
+ ],
+ "type": "object"
+ },
+ {
+ "type": "string"
+ }
+ ]
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "channel"
+ ],
+ "type": "object"
+ },
+ {
+ "$ref": "#/properties/routing/properties/channels/items/anyOf/1/properties/providers/items/anyOf/0"
+ }
+ ]
+ },
+ "type": "array"
+ },
+ "method": {
+ "description": "\"all\" delivers to every channel; \"single\" stops after the first success",
+ "enum": [
+ "all",
+ "single"
+ ],
+ "type": "string"
+ }
+}
addedInput schema / properties / routing / required
Added value: +[
+ "method",
+ "channels"
+]
addedInput schema / properties / routing / type
Added value: +"object"
changedInput schema / required
Previous value: -[
- "tenant_id",
- "template_id"
-]New value: +[
+ "tenant_id",
+ "template_id",
+ "content"
+]