Portal Community

When to Use

Zero configuration: The ManualTrigger node has no settings. Add it to the canvas, connect the output port, and the workflow is immediately triggerable via the FlowStudio UI "Run" button or the workflow execution REST API endpoint. Any JSON body posted to the API is passed as the workflow's starting InputData.

Configuration

The ManualTrigger node requires no configuration. There are no settings fields. It is the simplest trigger node in the system.

No configuration required. Drop the ManualTrigger node onto the canvas and connect it to the first processing node. The workflow is ready to be triggered immediately.

Output Ports

PortWhen It Fires
main Always. Fires immediately when the workflow is triggered. The port routes to the next node unconditionally. There is no error path for a ManualTrigger — if the workflow cannot start, the API returns an error to the caller before execution begins.

Output Fields

The ManualTrigger passes InputData through unchanged. All fields in the JSON body posted to the trigger API (or provided in the FlowStudio "Run" dialog) are available as output fields on the main port.

FieldTypeDescription
(any field from input body)anyEvery top-level key in the posted JSON body is passed through directly as an output field. Downstream nodes access these via {{ $output.manualTrigger.fieldName }}.
__triggered_bystringThe user ID or API key identifier of the actor who triggered the workflow, injected automatically by the platform.
__triggered_atstringISO 8601 UTC timestamp of when the trigger was invoked.

Sample Configuration

No configuration required. The ManualTrigger has no settings block. To invoke the workflow, POST any JSON body to the workflow's execution API endpoint, or click "Run" in FlowStudio and enter values in the input dialog.

Example API invocation

POST https://app.bizfirstai.com/api/workflows/{workflowId}/execute
Authorization: Bearer <api_token>
Content-Type: application/json

{
  "employeeId": "EMP-00293",
  "firstName": "Sarah",
  "lastName": "Mitchell",
  "department": "Engineering",
  "role": "Senior Software Engineer",
  "startDate": "2026-06-02",
  "managerId": "EMP-00105"
}

Sample Output

Success Port — Workflow Triggered

{
  "triggeredBy": {
    "userId": "usr_admin_001",
    "name": "Sarah Kim",
    "email": "s.kim@company.com",
    "role": "WorkflowAdmin"
  },
  "triggeredAt": "2025-03-15T08:00:00Z",
  "triggerMethod": "manual",
  "inputData": {
    "targetMonth": "2025-03",
    "reportType": "monthly_summary",
    "includeSubsidiaries": true
  },
  "executionId": "exec_20250315_001",
  "workflowId": "wf_monthly_report"
}

Expression Reference

ExpressionValue
{{ $output.manualTrigger.employeeId }}The employeeId field from the posted JSON body.
{{ $output.manualTrigger.department }}The department value supplied at trigger time.
{{ $output.manualTrigger.__triggered_by }}The user or system that invoked the trigger.
{{ $output.manualTrigger.__triggered_at }}ISO timestamp of when the workflow was started.

Node Policies & GuardRails

PolicyRationale
Use ManualTrigger for all development and testing workflowsIts zero-config nature and ability to accept arbitrary input JSON makes it the fastest way to test any workflow during development without configuring event sources.
Add a DataMapping or IfCondition node immediately afterSince the input body is unconstrained, validate and normalize the incoming data before passing it to downstream nodes. This prevents null-reference errors deep in complex workflows.
Protect the trigger API endpoint with authenticationThe workflow execution API requires a Bearer token. Always store this token in your application's secret manager and never expose it in client-side code.
Use ManualTrigger for workflows that run <100 times per dayFor high-frequency automated workflows, use ScheduledTrigger or WebhookTrigger instead. ManualTrigger is optimized for human-or-application-initiated execution, not bulk event processing.

Pattern Examples

Pattern 1 — Employee Onboarding from HR Portal

The HR system calls the workflow API when a new hire is added. The ManualTrigger receives the employee record and routes it through provisioning, notifications, and HR system updates.

// API call from HR system
POST /api/workflows/wf-onboarding-v2/execute
{
  "employeeId": "EMP-00412",
  "firstName": "James",
  "lastName": "Okafor",
  "email": "james.okafor@company.com",
  "role": "Product Manager",
  "department": "Product",
  "startDate": "2026-06-09",
  "managerId": "EMP-00088",
  "officeLocation": "London"
}

// Downstream VariableAssignment — build display name
{
  "VariableName": "employeeFullName",
  "ValueExpression": "{{ $output.manualTrigger.firstName }} {{ $output.manualTrigger.lastName }}"
}

Pattern 2 — On-Demand Report Generation

A director triggers a custom revenue report from the FlowStudio UI, specifying the reporting period and regions. The workflow queries the data warehouse, formats the report, and emails it.

// FlowStudio Run dialog input
{
  "reportType": "revenue_summary",
  "dateFrom": "2026-04-01",
  "dateTo": "2026-06-30",
  "regions": ["EMEA", "APAC"],
  "recipientEmail": "director@company.com",
  "format": "pdf"
}

// Downstream IfCondition — validate date range
{
  "Condition": "{{ $output.manualTrigger.dateFrom }} < {{ $output.manualTrigger.dateTo }}"
}

Pattern 3 — Debugging a New Workflow with Synthetic Data

A developer triggers a payment processing workflow with a synthetic payload to test the happy path, then again with a missing field to verify the error port behaviour.

// Test case 1 — happy path
{
  "paymentId": "PAY-TEST-001",
  "amount": 9500,
  "currency": "USD",
  "customerId": "CUST-TEST-099",
  "orderId": "ORD-TEST-555"
}

// Test case 2 — missing customerId to test validation
{
  "paymentId": "PAY-TEST-002",
  "amount": 500,
  "currency": "GBP"
}