Novu · Schema
WorkflowResponseDto
JSON Schema for Novu WorkflowResponseDto.
NotificationsMessagingIn AppEmailSMSPushChatWorkflowsOpen SourceSubscribersTopicsInboxWorkflow OrchestrationMulti ChannelDigestMCPFrameworkReact
Properties
| Name | Type | Description |
|---|---|---|
| name | string | Name of the workflow |
| description | string | Description of the workflow |
| tags | array | Tags associated with the workflow |
| active | boolean | Whether the workflow is active |
| validatePayload | boolean | Enable or disable payload schema validation |
| payloadSchema | objectnull | The payload JSON Schema for the workflow |
| isTranslationEnabled | boolean | Enable or disable translations for this workflow |
| _id | string | Database identifier of the workflow |
| workflowId | string | Workflow identifier |
| slug | string | Slug of the workflow |
| updatedAt | string | Last updated timestamp |
| createdAt | string | Creation timestamp |
| updatedBy | object | User who last updated the workflow |
| lastPublishedAt | stringnull | Timestamp of the last workflow publication |
| lastPublishedBy | object | User who last published the workflow |
| steps | array | Steps of the workflow |
| origin | string | Origin of the layout |
| preferences | object | Preferences for the workflow |
| status | string | Status of the workflow |
| issues | object | Runtime issues for workflow creation and update |
| lastTriggeredAt | stringnull | Timestamp of the last workflow trigger |
| payloadExample | objectnull | Generated payload example based on the payload schema |
| severity | string | Severity of the workflow |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://raw.githubusercontent.com/api-evangelist/novu/main/json-schema/novu-workflow-response-dto-schema.json",
"title": "WorkflowResponseDto",
"description": "JSON Schema for Novu WorkflowResponseDto.",
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Name of the workflow"
},
"description": {
"type": "string",
"description": "Description of the workflow"
},
"tags": {
"description": "Tags associated with the workflow",
"type": "array",
"items": {
"type": "string"
}
},
"active": {
"type": "boolean",
"description": "Whether the workflow is active",
"default": false
},
"validatePayload": {
"type": "boolean",
"description": "Enable or disable payload schema validation"
},
"payloadSchema": {
"type": [
"object",
"null"
],
"description": "The payload JSON Schema for the workflow",
"additionalProperties": true
},
"isTranslationEnabled": {
"type": "boolean",
"description": "Enable or disable translations for this workflow",
"default": false
},
"_id": {
"type": "string",
"description": "Database identifier of the workflow"
},
"workflowId": {
"type": "string",
"description": "Workflow identifier"
},
"slug": {
"type": "string",
"description": "Slug of the workflow"
},
"updatedAt": {
"type": "string",
"description": "Last updated timestamp"
},
"createdAt": {
"type": "string",
"description": "Creation timestamp"
},
"updatedBy": {
"description": "User who last updated the workflow",
"allOf": [
{
"type": "object",
"properties": {
"_id": {
"type": "string",
"description": "User ID"
},
"firstName": {
"type": [
"string",
"null"
],
"description": "User first name"
},
"lastName": {
"type": [
"string",
"null"
],
"description": "User last name"
},
"externalId": {
"type": [
"string",
"null"
],
"description": "User external ID"
}
},
"required": [
"_id"
]
}
]
},
"lastPublishedAt": {
"type": [
"string",
"null"
],
"description": "Timestamp of the last workflow publication"
},
"lastPublishedBy": {
"description": "User who last published the workflow",
"allOf": [
{
"type": "object",
"properties": {
"_id": {
"type": "string",
"description": "User ID"
},
"firstName": {
"type": [
"string",
"null"
],
"description": "User first name"
},
"lastName": {
"type": [
"string",
"null"
],
"description": "User last name"
},
"externalId": {
"type": [
"string",
"null"
],
"description": "User external ID"
}
},
"required": [
"_id"
]
}
]
},
"steps": {
"type": "array",
"description": "Steps of the workflow",
"items": {
"oneOf": [
{
"type": "object",
"properties": {
"controls": {
"description": "Controls metadata for the in-app step",
"allOf": [
{
"type": "object",
"properties": {
"dataSchema": {
"type": "object",
"description": "JSON Schema for data",
"additionalProperties": true
},
"uiSchema": {
"description": "UI Schema for rendering",
"allOf": [
{
"type": "object",
"properties": {
"group": {
"type": "string",
"description": "Group of the UI Schema",
"enum": [
"IN_APP",
"EMAIL",
"DIGEST",
"DELAY",
"THROTTLE",
"SMS",
"CHAT",
"PUSH",
"SKIP",
"LAYOUT",
"HTTP_REQUEST"
]
},
"properties": {
"type": "object",
"description": "Properties of the UI Schema",
"additionalProperties": {
"type": "object",
"properties": {
"placeholder": {
"description": "Placeholder for the UI Schema Property",
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "object",
"additionalProperties": true
},
{
"type": "array",
"items": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "object",
"additionalProperties": true
}
]
}
}
]
},
"component": {
"type": "object"
},
"properties": {
"type": "object",
"description": "Properties of the UI Schema",
"additionalProperties": {
"type": "object",
"description": "Reference to UiSchemaProperty"
}
}
},
"required": [
"component"
]
}
}
}
}
]
},
"values": {
"description": "Control values specific to In-App",
"allOf": [
{
"type": "object",
"properties": {
"skip": {
"type": "object",
"description": "JSONLogic filter conditions for conditionally skipping the step execution. Supports complex logical operations with AND, OR, and comparison operators. See https://jsonlogic.com/ for full typing reference.",
"example": {
"and": [
{
"==": [
{
"var": "payload.tier"
},
"pro"
]
},
{
"==": [
{
"var": "subscriber.data.role"
},
"admin"
]
},
{
">": [
{
"var": "payload.amount"
},
"4"
]
}
]
},
"additionalProperties": true
},
"body": {
"type": "string",
"description": "Content/body of the in-app message. Required if subject is empty.",
"minLength": 1
},
"subject": {
"type": "string",
"description": "Subject/title of the in-app message. Required if body is empty.",
"minLength": 1
},
"avatar": {
"type": "string",
"description": "URL for an avatar image. Must be a valid URL or start with / or {{ variable }}."
},
"primaryAction": {
"description": "Primary action button details.",
"allOf": [
{
"type": "object",
"properties": {
"label": {
"type": "string",
"description": "Label for the action button."
},
"redirect": {
"description": "Redirect configuration for the action.",
"allOf": [
{
"type": "object"
}
]
}
}
}
]
},
"secondaryAction": {
"description": "Secondary action button details.",
"allOf": [
{
"type": "object",
"properties": {
"label": {
"type": "string",
"description": "Label for the action button."
},
"redirect": {
"description": "Redirect configuration for the action.",
"allOf": [
{
"type": "object"
}
]
}
}
}
]
},
"redirect": {
"description": "Redirection URL configuration for the main content click (if no actions defined/clicked)..",
"allOf": [
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "URL to redirect to"
},
"target": {
"type": "string",
"description": "Target attribute for the redirect link",
"enum": [
"_self",
"_blank",
"_parent",
"_top",
"_unfencedTop"
]
}
},
"required": [
"url"
]
}
]
},
"disableOutputSanitization": {
"type": "boolean",
"description": "Disable sanitization of the output.",
"default": false
},
"data": {
"type": "object",
"description": "Additional data payload for the step.",
"additionalProperties": true
}
}
}
]
}
},
"required": [
"values"
]
}
]
},
"controlValues": {
"description": "Control values for the in-app step",
"additionalProperties": true,
"allOf": [
{
"type": "object",
"properties": {
"skip": {
"type": "object",
"description": "JSONLogic filter conditions for conditionally skipping the step execution. Supports complex logical operations with AND, OR, and comparison operators. See https://jsonlogic.com/ for full typing reference.",
"example": {
"and": [
{
"==": [
{
"var": "payload.tier"
},
"pro"
]
},
{
"==": [
{
"var": "subscriber.data.role"
},
"admin"
]
},
{
">": [
{
"var": "payload.amount"
},
"4"
]
}
]
},
"additionalProperties": true
},
"body": {
"type": "string",
"description": "Content/body of the in-app message. Required if subject is empty.",
"minLength": 1
},
"subject": {
"type": "string",
"description": "Subject/title of the in-app message. Required if body is empty.",
"minLength": 1
},
"avatar": {
"type": "string",
"description": "URL for an avatar image. Must be a valid URL or start with / or {{ variable }}."
},
"primaryAction": {
"description": "Primary action button details.",
"allOf": [
{
"type": "object",
"properties": {
"label": {
"type": "string",
"description": "Label for the action button."
},
"redirect": {
"description": "Redirect configuration for the action.",
"allOf": [
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "URL to redirect to"
},
"target": {
"type": "string",
"description": "Target attribute for the redirect link",
"enum": [
"_self",
"_blank",
"_parent",
"_top",
"_unfencedTop"
]
}
},
"required": [
"url"
]
}
]
}
}
}
]
},
"secondaryAction": {
"description": "Secondary action button details.",
"allOf": [
{
"type": "object",
"properties": {
"label": {
"type": "string",
"description": "Label for the action button."
},
"redirect": {
"description": "Redirect configuration for the action.",
"allOf": [
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "URL to redirect to"
},
"target": {
"type": "string",
"description": "Target attribute for the redirect link",
"enum": [
"_self",
"_blank",
"_parent",
"_top",
"_unfencedTop"
]
}
},
"required": [
"url"
]
}
]
}
}
}
]
},
"redirect": {
"description": "Redirection URL configuration for the main content click (if no actions defined/clicked)..",
"allOf": [
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "URL to redirect to"
},
"target": {
"type": "string",
"description": "Target attribute for the redirect link",
"enum": [
"_self",
"_blank",
"_parent",
"_top",
"_unfencedTop"
]
}
},
"required": [
"url"
]
}
]
},
"disableOutputSanitization": {
"type": "boolean",
"description": "Disable sanitization of the output.",
"default": false
},
"data": {
"type": "object",
"description": "Additional data payload for the step.",
"additionalProperties": true
}
}
}
]
},
"variables": {
"type": "object",
"description": "JSON Schema for variables, follows the JSON Schema standard",
"additionalProperties": true
},
"stepId": {
"type": "string",
"description": "Unique identifier of the step"
},
"_id": {
"type": "string",
"description": "Database identifier of the step"
},
"name": {
"type": "string",
"description": "Name of the step"
},
"slug": {
"type": "string",
"description": "Slug of the step"
},
"type": {
"type": "string",
"description": "Type of the step",
"enum": [
"in_app",
"email",
"sms",
"chat",
"push",
"digest",
"trigger",
"delay",
"throttle",
"custom",
"http_request"
]
},
"origin": {
"type": "string",
"description": "Origin of the layout",
"enum": [
"novu-cloud",
"novu-cloud-v1",
"external"
]
},
"workflowId": {
"type": "string",
"description": "Workflow identifier"
},
"workflowDatabaseId": {
"type": "string",
"description": "Workflow database identifier"
},
"issues": {
"description": "Issues associated with the step",
"allOf": [
{
"type": "object",
"properties": {
"controls": {
"type": "object",
"description": "Controls-related issues",
"additionalProperties": {
"type": "array",
"items": {
"type": "object",
"properties": {
"issueType": {
"type": "string",
"description": "Type of step content issue",
"enum": [
"ILLEGAL_VARIABLE_IN_CONTROL_VALUE",
"INVALID_FILTER_ARG_IN_VARIABLE",
"INVALID_URL",
"MISSING_VALUE",
"TIER_LIMIT_EXCEEDED"
]
},
"variableName": {
"type": "string",
"description": "Name of the variable related to the issue"
},
"message": {
"type": "string",
"description": "Detailed message describing the issue"
}
},
"required": [
"issueType",
"message"
]
}
}
},
"integration": {
"type": "object",
"description": "Integration-related issues",
"additionalProperties": {
"type": "array",
"items": {
"type": "object",
"properties": {
"issueType": {
"type": "string",
"description": "Type of integration issue",
"enum": [
"MISSING_INTEGRATION",
"INBOX_NOT_CONNECTED"
]
},
"variableName": {
"type": "string",
"description": "Name of the variable related to the issue"
},
"message": {
"type": "string",
"description": "Detailed message describing the issue"
}
},
"required": [
"issueType",
"message"
]
}
}
}
}
}
]
},
"stepResolverHash": {
"type": "string",
"description": "Hash identifying the deployed Cloudflare Worker for this step"
}
},
"required": [
"controls",
"variables",
"stepId",
"_id",
"name",
"slug",
"type",
"origin",
"workflowId",
"workflowDatabaseId"
]
},
{
"type": "object",
"properties": {
"controls": {
"description": "Controls metadata for the email step",
"allOf": [
{
"type": "object",
"properties": {
"dataSchema": {
"type": "object",
"description": "JSON Schema for data",
"additionalProperties": true
},
"uiSchema": {
"description": "UI Schema for rendering",
"allOf": [
{
"type": "object",
"properties": {
"group": {
"type": "string",
"description": "Group of the UI Schema",
"enum": [
"IN_APP",
"EMAIL",
"DIGEST",
"DELAY",
"THROTTLE",
"SMS",
"CHAT",
"PUSH",
"SKIP",
"LAYOUT",
"HTTP_REQUEST"
]
},
"properties": {
"type": "object",
"description": "Properties of the UI Schema",
"additionalProperties": {
"type": "object",
"properties": {
"placeholder": {
"description": "Placeholder for the UI Schema Property",
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "object",
"additionalProperties": true
},
{
"type": "array",
"items": {
"anyOf": [
{
# --- truncated at 32 KB (185 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/novu/refs/heads/main/json-schema/novu-workflow-response-dto-schema.json