Skip to main content
Subprocesses are smaller process flows triggered by actions in the main process. They can inherit some process parameter values from the parent process and communicate with front-end apps using the same connection details as their parent process.

Overview

Subprocesses can be started in two modes:
  • Asynchronous: Execute alongside the parent process without delaying it.
  • Synchronous: The parent process waits until subprocesses are finished before advancing.

Configuring & starting subprocesses

Design subprocesses within the FlowX.AI Designer, mirroring the main process structure.
1

Start Subprocess Action

  • Within user tasks or task nodes.
2

Call Activity node

  • Custom node type in the main process.
3

Start Embedded Subprocess node

  • Using the corresponding node.

Parameter inheritance

Available for Start Subprocess action and Call Activity node.
By default, subprocesses inherit all parent process parameter values. Configure inheritance by:
  • Copy from Current State: Select keys to copy.
  • Exclude from Current State: Specify keys to ignore.
Sub-processes can also have an Append Params to Parent Process action configured inside their process definitions which will append their results to the parent process parameter values.

Append Params to Parent Process

Executing subprocesses

Define subprocess execution mode:
  • Asynchronous/Synchronous: Set the startedAsync parameter accordingly.
In synchronous mode, subprocesses notify completion to the parent process. The parent process then resumes its flow and handles subprocess data.

How data flows between subprocess and parent

When a subprocess needs to send data back to the parent process, FlowX provides several mechanisms. Choosing the right one depends on whether you need data in the parent UI, the parent data model, or both.

Data return mechanisms

MechanismWhat it doesParent data modelParent UIWhen to use
Append Params to Parent ProcessCopies specified keys from subprocess into the parent process data modelYesNo (until next UI refresh)Business logic in the parent needs subprocess results (conditions, validations, downstream actions)
Send data to user interface (target: Parent)Pushes data to the parent process UI via SSENoYes (real-time)Real-time UI updates while the subprocess runs (progress indicators, live previews)
Call Activity output key (sync mode)Automatically returns subprocess data under a configured key when the subprocess completesYesNoSync subprocesses where the parent waits for results
Embedded subprocessShares the parent data model directly, no data transfer neededSharedSharedSimple subprocess logic that operates on the same data

Common patterns

“I need data in both the parent data model and the parent UI” Use both actions: configure Append Params to Parent Process to persist the data, and Send data to user interface (target: Parent) to push the update to the UI immediately. “My subprocess has a throw event before the end node — do output parameters still get sent?” Output parameters configured on the Call Activity node are sent when the subprocess token reaches the End node. If the subprocess ends via a throw event before reaching End, the output parameters are not automatically returned. Use Append Params to Parent Process before the throw event to ensure data reaches the parent.

Message format example

When using Send data to user interface to push data to the parent UI, the message body follows this format:
{
  "application": {
    "clientName": "${application.client.firstName}",
    "status": "verified"
  }
}
This data is sent via SSE and rendered in the parent process UI, but is not stored in the parent process data model.

Additional resources

Call activity node

Start a subprocess action

Start embedded subprocess

Synchronous Subprocesses course

Academy course covering embedded/call activities, UI updates, and data passing patterns
Academy playground — explore the Academy_Synchronous_Subprocesses project for working examples of subprocess data passing, call activities, and embedded subprocesses.
Last modified on April 9, 2026