SuprSend Workflow API
The Workflow API from SuprSend — 4 operation(s) for workflow.
The Workflow API from SuprSend — 4 operation(s) for workflow.
openapi: 3.1.1
info:
title: SuprSend Broadcast Workflow API
description: APIs supported on suprsend platform
version: 1.2.2
servers:
- url: https://hub.suprsend.com
security:
- sec0: []
- BearerAuth: []
tags:
- name: Workflow
paths:
/v1/{workspace}/workflow/:
get:
summary: List Workflows
description: Retrieve a list of workflows in a workspace.
operationId: list-workflows
servers:
- url: https://management-api.suprsend.com
security:
- ServiceTokenAuth: []
x-codeSamples:
- lang: cURL
label: List Workflows
source: "curl -X GET \"https://management-api.suprsend.com/v1/{workspace}/workflow/\" \\\n --header 'Authorization: ServiceToken <token>' \\\n --header 'Content-Type: application/json'\n"
parameters:
- in: path
name: workspace
required: true
schema:
type: string
description: Workspace slug (staging, production, etc.)
- in: query
name: mode
schema:
type: string
enum:
- draft
- live
default: draft
description: Mode to filter workflows (draft or live). By default, draft workflows are returned.
- in: query
name: slugs
schema:
type: string
description: Comma-separated list of workflow slugs to filter. This can be used to filter workflows by slug.
responses:
'200':
description: Successfully retrieved list of workflows
content:
application/json:
schema:
type: object
properties:
meta:
type: object
properties:
count:
type: integer
description: Total number of workflows matching the query
example: 92
limit:
type: integer
description: Number of results returned per page
example: 10
offset:
type: integer
description: Offset value passed in the request
example: 0
description: Metadata related to pagination information
results:
type: array
items:
$ref: '#/components/schemas/Workflow'
description: Array of workflows along with their node tree.
example:
meta:
count: 92
limit: 10
offset: 0
results:
- $schema: https://schema.suprsend.com/workflow/v1/schema.json
slug: survey-reminder
is_enabled: true
created_at: '2025-06-27T03:26:48.793551Z'
last_executed_at: '2025-06-27T04:48:20.653366Z'
name: Survey Reminder
description: null
updated_at: '2025-06-27T03:36:05.623939Z'
commit_message: Survey completed
hash: ed3e630c1526170564c962db00dbfcfef997e995f62f67c068a8c9c1d5efbc13
status: active
category: transactional
tags:
- reminder
ratelimit: null
conditions: []
trigger_type: api
trigger_events: []
override_recipients_type: null
override_recipients_user_expr: null
override_recipients_single_object_fields_expr: null
override_actor_user_expr: null
override_tenant_expr: null
active_at: '2025-06-27T03:36:05.623845Z'
updated_by:
name: Jane Doe
email: user@example.com
tree:
nodes:
- name: Multi-Channel
node_type: send_multi_channel
properties:
template: 11-performance-review-session
channels: []
channels_expr: null
success: seen
success_is_event: false
description: ''
schema_version: '1'
validation_result:
is_valid: true
'404':
$ref: '#/components/responses/NotFoundError'
description: Workflow not found
'401':
$ref: '#/components/responses/AuthenticationError'
description: AuthenticationFailed
tags:
- Workflow
/v1/{workspace}/workflow/{slug}/:
get:
summary: Get Workflow Details
description: Fetch workflow corresponding to the given slug in a workspace.
operationId: get-workflow
servers:
- url: https://management-api.suprsend.com
security:
- ServiceTokenAuth: []
x-codeSamples:
- lang: cURL
label: Get Workflow
source: "curl -X GET \"https://management-api.suprsend.com/v1/{workspace}/workflow/{slug}/\" \\\n --header 'Authorization: ServiceToken <token>' \\\n --header 'Content-Type: application/json'\n"
parameters:
- in: path
name: workspace
required: true
schema:
type: string
description: Workspace slug (staging, production, etc.)
- in: path
name: slug
required: true
schema:
type: string
description: Unique identifier of the workflow. You can get it from workflow settings.
- in: query
name: mode
schema:
type: string
enum:
- draft
- live
default: draft
description: Which workflow version to fetch (draft or live). By default, draft version is returned.
responses:
'200':
description: Successfully retrieved workflow
content:
application/json:
schema:
$ref: '#/components/schemas/Workflow'
example:
$schema: https://schema.suprsend.com/workflow/v1/schema.json
slug: survey-reminder
is_enabled: true
created_at: '2025-06-27T03:26:48.793551Z'
last_executed_at: '2025-06-27T04:48:20.653366Z'
name: Survey Reminder
description: null
updated_at: '2025-06-27T03:36:05.623939Z'
commit_message: Survey completed
hash: ed3e630c1526170564c962db00dbfcfef997e995f62f67c068a8c9c1d5efbc13
status: active
category: transactional
tags:
- reminder
ratelimit: null
conditions: []
trigger_type: api
trigger_events: []
override_recipients_type: null
override_recipients_user_expr: null
override_recipients_single_object_fields_expr: null
override_actor_user_expr: null
override_tenant_expr: null
active_at: '2025-06-27T03:36:05.623845Z'
updated_by:
name: Jane Doe
email: user@example.com
tree:
nodes:
- name: Multi-Channel
node_type: send_multi_channel
properties:
template: 11-performance-review-session
channels: []
channels_expr: null
success: seen
success_is_event: false
description: ''
schema_version: '1'
validation_result:
is_valid: true
'404':
$ref: '#/components/responses/NotFoundError'
description: Workflow not found
'401':
$ref: '#/components/responses/AuthenticationError'
description: AuthenticationFailed - Invalid service token.
tags:
- Workflow
post:
summary: Create or Update Workflow
description: Create a new workflow or update the draft version of an existing one
operationId: upsert-workflow
servers:
- url: https://management-api.suprsend.com
security:
- ServiceTokenAuth: []
x-codeSamples:
- lang: cURL
source: "curl -X POST \"https://management-api.suprsend.com/v1/{workspace}/workflow/{slug}/\" \\\n --header 'Authorization: ServiceToken <token>' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"name\": \"Welcome Email\",\n \"description\": \"Sends welcome email to new users\",\n \"category\": \"transactional\",\n \"tags\": [\"welcome\", \"onboarding\"],\n \"tree\": {\n \"nodes\": [\n {\n \"name\": \"Send Email\",\n \"node_type\": \"send_email\",\n \"properties\": {\n \"template\": \"welcome-email-template\",\n \"subject\": \"Welcome to our platform!\"\n },\n \"description\": \"Send welcome email to new users\"\n }\n ]\n }\n }'\n"
parameters:
- in: path
name: workspace
required: true
schema:
type: string
description: Workspace where the workflow should be created (staging, production, etc.)
- in: path
name: slug
required: true
schema:
type: string
description: Unique identifier of the workflow. You can get it from workflow settings for existing workflows.
- in: query
name: commit
schema:
type: boolean
default: false
description: Whether to commit the workflow immediately. Workflow will be successfully committed only if validation_result.is_valid is true.
- in: query
name: commit_message
schema:
type: string
description: Commit message describing the changes (required if commit=true)
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/WorkflowCreateUpdate'
examples:
workflow_example:
summary: Example workflow creation
description: Example of creating a simple email workflow
value:
name: Welcome Email
description: Sends welcome email to new users
category: transactional
tags:
- welcome
- onboarding
tree:
nodes:
- name: Send Email
node_type: send_email
properties:
template: welcome-email-template
subject: Welcome to our platform!
description: Send welcome email to new users
responses:
'201':
description: The response includes the same workflow object as input along with a validation_result field that indicates whether the workflow configuration is valid.
content:
application/json:
examples:
workflow_example:
summary: Example workflow creation
description: Example of creating a simple email workflow
value:
name: Welcome Email
description: Sends welcome email to new users
category: transactional
tags:
- welcome
- onboarding
tree:
nodes:
- name: Send Email
node_type: send_email
properties:
template: welcome-email-template
subject: Welcome to our platform!
description: Send welcome email to new users
validation_result:
is_valid: true
errors: []
schema:
type: object
properties:
validation_result:
type: object
properties:
is_valid:
type: boolean
description: Whether the workflow configuration is valid and can be committed
errors:
type: array
description: List of validation errors if the workflow is invalid and `is_valid` is false.
items:
type: string
'404':
$ref: '#/components/responses/NotFoundError'
'401':
$ref: '#/components/responses/AuthenticationError'
tags:
- Workflow
delete:
summary: Delete Workflow
description: Permanently deletes a workflow by providing it's slug.
operationId: delete-workflow
servers:
- url: https://management-api.suprsend.com
security:
- ServiceTokenAuth: []
x-codeSamples:
- lang: cURL
label: Delete Workflow
source: "curl -X DELETE \"https://management-api.suprsend.com/v1/{workspace}/workflow/{slug}/\" \\\n --header 'Authorization: ServiceToken <token>' \\\n --header 'Content-Type: application/json'\n"
parameters:
- in: path
name: workspace
required: true
schema:
type: string
description: Which workspace workflow belongs to (staging, production, etc.)
- in: path
name: slug
required: true
schema:
type: string
description: Unique identifier of the workflow. You can get it from workflow settings.
responses:
'204':
description: No Content
'404':
$ref: '#/components/responses/NotFoundError'
description: Workflow not found
'401':
$ref: '#/components/responses/AuthenticationError'
description: AuthenticationFailed - Invalid service token.
tags:
- Workflow
/v1/{workspace}/workflow/{slug}/commit/:
patch:
summary: Commit Workflow
description: Commit a workflow to make the draft version live.
operationId: commit-workflow
servers:
- url: https://management-api.suprsend.com
security:
- ServiceTokenAuth: []
x-codeSamples:
- lang: cURL
source: "curl -X PATCH \"https://management-api.suprsend.com/v1/{workspace}/workflow/{slug}/commit/\" \\\n --header 'Authorization: ServiceToken <token>' \\\n --header 'Content-Type: application/json'\n"
parameters:
- in: path
name: workspace
required: true
schema:
type: string
description: Workspace to which the workflow belongs (staging, production, etc.)
- in: path
name: slug
required: true
schema:
type: string
description: Unique identifier of the workflow. You can get it from workflow settings.
- in: query
name: commit_message
required: false
schema:
type: string
description: Commit message describing the changes
responses:
'202':
description: Workflow committed successfully. The response will be the latest draft version after the commit.
content:
application/json:
schema:
$ref: '#/components/schemas/Workflow'
'404':
$ref: '#/components/responses/NotFoundError'
description: Workflow not found
'401':
$ref: '#/components/responses/AuthenticationError'
description: AuthenticationFailed - Invalid service token.
tags:
- Workflow
/v1/{workspace}/workflow/{slug}/enable/:
patch:
summary: Enable/Disable Workflow
description: Enable or disable a workflow. Disabled workflows will not be executed when triggered. By default, workflows are enabled unless you explicitly disable them.
operationId: toggle-workflow
servers:
- url: https://management-api.suprsend.com
security:
- ServiceTokenAuth: []
x-codeSamples:
- lang: cURL
label: Toggle Workflow
source: "curl -X PATCH \"https://management-api.suprsend.com/v1/{workspace}/workflow/{slug}/enable/\" \\\n --header 'Authorization: ServiceToken <token>' \\\n --header 'Content-Type: application/json' \\\n --data '{\n \"is_enabled\": true\n }'\n"
parameters:
- in: path
name: workspace
required: true
schema:
type: string
description: Workspace to which the workflow belongs (staging, production, etc.)
- in: path
name: slug
required: true
schema:
type: string
description: Unique identifier of the workflow. You can get it from workflow settings.
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- is_enabled
properties:
is_enabled:
type: boolean
description: Set to true to enable the workflow, false to disable it.
example:
is_enabled: true
responses:
'202':
description: Workflow status updated successfully
content:
application/json:
schema:
$ref: '#/components/schemas/Workflow'
'404':
$ref: '#/components/responses/NotFoundError'
description: Workflow not found
'401':
$ref: '#/components/responses/AuthenticationError'
description: AuthenticationFailed - Invalid service token.
tags:
- Workflow
components:
responses:
AuthenticationError:
description: Authentication failed
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
code: 401
error_code: authentication_failed
type: AuthenticationFailed
message: Invalid service token.
detail: Invalid service token.
NotFoundError:
description: Resource not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
code: 404
error_code: not_found
type: NotFound
message: workspace 'demo' not found
detail: workspace 'demo' not found
schemas:
SendMultiChannelNode:
type: object
description: '[**Multi-Channel**](https://docs.suprsend.com/docs/delivery-multi-channel): Sends notifications across multiple channels simultaneously using a specified template.'
required:
- node_type
- name
- template
properties:
name:
type: string
description: Human-readable name of the node
example: Send multi-channel notification
node_type:
type: string
const: send_multi_channel
description:
type: string
nullable: true
description: Description of what this node does
template:
type: string
description: Slug of the template used for notification content across all channels.
minLength: 1
maxLength: 120
pattern: ^[a-z0-9-_]+$
channels:
type: array
description: Specific channels to use when sending multi-channel notification. If not provided, all channels will be used.
required: true
items:
type: string
enum:
- sms
- email
- androidpush
- iospush
- webpush
- inbox
- whatsapp
- slack
- ms_teams
channels_expr:
type: string
description: jq-expression for preparing channel list dynamically at runtime.
minLength: 2
SendMobilePushNode:
type: object
description: '[**Mobile Push**](https://docs.suprsend.com/docs/delivery-single-channel): Sends push notifications to mobile devices (Android and iOS) using a specified template.'
required:
- node_type
- name
- template
properties:
name:
type: string
description: Human-readable name of the node
example: Send mobile push notification
node_type:
type: string
const: send_mobile_push
description:
type: string
nullable: true
description: Description of what this node does
template:
type: string
description: Slug of the template used for mobile push notification content.
minLength: 1
maxLength: 120
pattern: ^[a-z0-9-_]+$
InvokeWorkflowNode:
type: object
description: '[**Invoke Workflow**](https://docs.suprsend.com/docs/invoke-workflow): Triggers another workflow using data from the current workflow run. Generally used when you have to notify different recipients at different stages of the workflow.'
required:
- node_type
- name
- workflow
- recipient_selection
properties:
name:
type: string
description: Human-readable name of the node
example: Escalate to the manager
node_type:
type: string
const: invokeworkflow
description:
type: string
nullable: true
description: Description of what this node does
workflow:
type: string
description: Slug of the workflow to invoke.
minLength: 1
maxLength: 255
pattern: ^[a-z0-9-_]+$
actor_selection:
type: string
enum:
- null
- recipient
- actor
- expression
description: "Where to pick the actor from for the invoke-workflow payload. \n\n**recipient**: Use the recipient of the current workflow run. \n\n**actor**: Use the actor who triggered the current workflow run. \n\n**expression**: Use a JSONNET expression to derive the actor at runtime using data from the current workflow run."
actor_expression:
type: string
description: JSONNET expression to derive the actor at runtime for the invoked workflow. Pass when `actor_selection` is 'expression'. Eg. `data["$recipient"].id`
minLength: 1
recipient_selection:
type: string
enum:
- recipient
- actor
- expression
description: "Where to pick the recipient from for the invoke-workflow payload. \n\n**recipient**: Use the recipient of the current workflow run. \n\n**actor**: Use the actor who triggered the current workflow run. \n\n**expression**: Use a JSONNET expression to derive the recipient at runtime using data from the current workflow run."
recipient_expression:
type: string
description: JSONNET expression to derive the recipient at runtime for the invoked workflow. Pass when `recipient_selection` is 'expression'. Eg. `data["$recipient"].manager_id`
minLength: 1
data:
type: string
description: JSONNET expression to derive the data field for the invoke-workflow payload.
append_current_run_data:
type: boolean
description: Whether the current workflow-run data should be passed as payload of the invoked workflow.
BatchNode:
type: object
description: '[**Batch**](https://docs.suprsend.com/docs/batch): Batches incoming workflow triggers/events for a duration to send consolidated notifications.'
required:
- node_type
- name
- mode
- window_type
properties:
name:
type: string
description: Human-readable name of the node
example: Batch notifications
description:
type: string
nullable: true
description: Description of what this node does
node_type:
type: string
const: batch
mode:
type: string
enum:
- accumulate_all
- flush_leading_item
description: "**accumulate_all**: All events are accumulated in the batch and notification is sent once after batch window closes. \n\n**flush_leading_item**: Notification is sent immediately for the first event in the batch and rest of the events are batched and sent after batch window closes. Eg. Send anomaly alert with first notification sent at the occurrence of first error and next alert sent after 30 minutes if there are further errors."
window_type:
type: string
enum:
- fixed
- dynamic
- relative_to
description: "Type of batching window. \n\n**fixed**: Static window duration added as XXdXXhXXmXXs. Eg. 30s, 1h, 1d. \n\n**dynamic**: Batch window duration is passed as variable in your trigger payload. Add the variable in jq format. Eg. `.window_duration`, `$recipient.batch_duration`, `$actor.window_duration`, `$tenant.window_duration`. \n\n**relative_to**: Batch window is relative to a future timestamp passed in your trigger payload. Eg. 15 m before `.task_end_time`."
fixed_window:
type: string
description: 'Batch window when window_type is ''fixed''. Static batch window for all users. Format: XXdXXhXXmXXs.'
example: 30s
dynamic_window_expr:
type: string
description: Batch window when window_type is 'dynamic'. jq-expression for deriving batch window duration at runtime.
examples:
trigger_payload:
summary: From trigger payload
value: .window_duration
recipient_property:
summary: From recipient properties
value: $recipient.batch_duration
actor_property:
summary: From actor properties
value: $actor.window_duration
tenant_property:
summary: From tenant properties
value: $tenant.window_duration
relative_to:
type: object
description: Batch window when window_type is 'relative_to'. Batch window is calculated relative to a future timestamp.
properties:
pivot_expr:
type: string
description: (jq-expression) variable defining the future timestamp from trigger payload relative to which batch window is calculated.
examples:
trigger_payload:
summary: From trigger payload
value: .start_time
recipient_property:
summary: From recipient properties
value: $recipient.task_end_time
offset_type:
type: string
enum:
- before
- after
description: Whether offset is to be added or subtracted from pivot timestamp.
offset_value_type:
type: string
enum:
- fixed
- dynamic
description: "Defines if the offset value is fixed or dynamic. \n\n**Fixed**: Static duration added as XXdXXhXXmXXs. Eg. 15m before meeting_start_time. \n\n**Dynamic**: offset is passed as variable in your trigger payload or recipient, tenant properties in jq format. Eg. `$recipient.reminder_offset` before meeting_start_time."
offset_value:
type: string
description: Offset value.
examples:
fixed_offset:
summary: Fixed duration offset
value: 15m
dynamic_offset:
summary: Dynamic offset from recipient properties
value: $recipient.reminder_offset
retain_count:
type: integer
minimum: 1
maximum: 100
description: Maximum number of items to retain after batch closes (1-100). The output variable set will have the latest or first n items based on the retain_order.
retain_order:
type: string
enum:
- first
- last
description: Retain items in this order when retain_count is specified.
batch_key:
type: string
description: jq-expression used to group events into separate batches. For example, when sending batched notifications for comments on different documents, use `.document_id` as the batch key to ensure comments from different documents are not combined into the same batch.
example: .document_id
Schedule:
type: object
description: Static schedule configuration for digest notifications.
properties:
frequency:
type: string
enum:
- minutely
- hourly
- daily
- weekly_mo2fr
- weekly
- monthly
description: Frequency of the digest schedule.
interval:
type: integer
minimum: 1
description: Multiplier for recurrence schedule. Eg. 2 for every 2 hours, 3 for every 3 days, etc.
weekdays:
type: array
items:
type: string
enum:
- su
- mo
- tu
- we
- th
- fr
- sa
description: Which days to include when frequency is 'weekly'.
monthdays:
type: array
items:
type: object
properties:
pos:
type: integer
minimum: -31
maximum: 31
day:
type: string
enum:
- null
- su
- mo
- tu
- we
- th
- fr
- sa
description: Which days to include when frequency is 'monthly'.
time:
type: string
description: Time of day to send digest in HH:MM format (24-hour).
examples:
- 09:00
- '18:30'
dtstart:
type: string
description: When to start schedule calculation from in ISO datetime format.
tz_selection:
type: string
enum:
- fixed
- recipient
description: "timezone of the recurring schedule. \n\n**fixed**: Fixed timezone. \n\n**recipient**: Recipient's timezone picked from user properties."
tz_fixed:
type: string
description: Fixed IANA timezone.
pattern: ^[A-Za-z_/]+$
examples:
new_york:
summary: New York timezone
value: America/New_York
london:
summary: London timezone
value: Europe/London
Workflow:
type: object
properties:
$schema:
type: string
format: uri
description: Schema URL for workflow validation
example: https://schema.suprsend.com/workflow/v1/schema.json
slug:
type: string
description: Unique identifier for the workflow
minLength: 1
maxLength: 255
pattern: ^[a-z0-9-_]+$
example: welcome-sequence
is_enabled:
type: boolean
description: Whether the workflow is enabled
example: true
created_at:
type: string
format: date-time
description: When the workflow was created
last_executed_at:
type: string
format: date-time
description: When the workflow was last executed
nullable: true
name:
type: string
description: Human-readable name of the workflow
example: Welcome Sequence
description:
type: string
nullable: true
description: Description explaining the usecase of the workflow
updated_at:
type: string
format: date-time
description: When the workflow was last updated
commit_m
# --- truncated at 32 KB (90 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/suprsend/refs/heads/main/openapi/suprsend-workflow-api-openapi.yml