Input & Output
Understand the data structure produced by the Manual Trigger node and how to access it in downstream workflow nodes.
Trigger Nodes Have No Upstream Inputs
The Manual Trigger is always the first node in a workflow and has no upstream data connections. All output data comes from: (a) the payload passed by the caller in the POST body, and (b) metadata generated by BizFirstAI at trigger time, such as who triggered it and when.
Output Ports
| Port Name | When Triggered | Description |
|---|---|---|
main |
On every successful manual invocation (UI button or API call) | The primary output port. Contains the caller's input payload merged with BizFirstAI execution metadata. All subsequent nodes receive this as their starting data object. |
Output Data
| Key | Type | Description |
|---|---|---|
input |
Object | The parsed JSON body submitted by the caller. When triggered from the portal form, this contains the values the user entered. When triggered via API, this is the deserialized POST body. Empty object {} if no body was provided. |
triggered_by |
Object | Information about the identity that triggered the workflow. Contains user_id, email, display_name, and roles array for human triggers. Contains api_key_id and label for API key triggers. |
triggered_at |
ISO 8601 String | UTC timestamp of when the workflow was manually triggered. Format: 2024-06-15T09:15:00.000Z. |
trigger_source |
Enum String | How the workflow was triggered. One of: portal_ui (clicked from the BizFirstAI portal), api (called via the REST API), embedded_button (triggered from an embedded application button). |
execution_id |
String | Unique identifier for this execution instance. Use this to track the run in execution logs or return it to the caller for polling. |
workflow_id |
String | The ID of the workflow that is running. Useful for audit logging within the workflow itself. |
workflow_version |
String | The version of the workflow definition that is executing. Helps with debugging when workflows have multiple deployed versions. |
Data Flow Example
Below is the complete output object produced when an HR manager triggers an employee onboarding workflow from the BizFirstAI portal, having filled in the input form with the new hire's details.
{
"input": {
"employee_name": "Priya Sharma",
"employee_email": "priya.sharma@acmecorp.com",
"department": "Engineering",
"start_date": "2024-07-01",
"manager_email": "rob.patel@acmecorp.com"
},
"triggered_by": {
"user_id": "usr_K7mNpQr9",
"email": "sarah.jones@acmecorp.com",
"display_name": "Sarah Jones",
"roles": ["hr_manager", "employee"]
},
"triggered_at": "2024-06-15T09:15:30.000Z",
"trigger_source": "portal_ui",
"execution_id": "exec_9Wm4kRt2vXpLnZ",
"workflow_id": "wf_employee_onboarding_v2",
"workflow_version": "2.3.1"
}
Accessing Data in Downstream Nodes
Reference any part of the trigger output using BizFirst expressions in subsequent nodes:
| Expression | Returns |
|---|---|
{{ $trigger.input.employee_name }} | "Priya Sharma" |
{{ $trigger.input.employee_email }} | "priya.sharma@acmecorp.com" |
{{ $trigger.input.department }} | "Engineering" |
{{ $trigger.triggered_by.email }} | "sarah.jones@acmecorp.com" |
{{ $trigger.triggered_by.display_name }} | "Sarah Jones" |
{{ $trigger.triggered_at }} | "2024-06-15T09:15:30.000Z" |
{{ $trigger.execution_id }} | "exec_9Wm4kRt2vXpLnZ" |
Input Validation
If you define an
input_schema, BizFirstAI validates the caller's payload before the workflow starts. If the payload does not conform to the schema, the trigger returns a 400 Bad Request response and the workflow does not execute — no output is produced on the main port.