The Two Data Sources
QuivaWorks flows work with two primary data sources that you can reference using variable mapping:Trigger Data
Data provided when the flow starts (webhooks, API calls, manual triggers)
Node Data
Output data from any previously executed node in your flow
Core Syntax Pattern
The basic syntax follows this pattern:$- Root indicator (always required)source- Eithertriggeror aNODE_IDproperty- The data you want to access
The
$. prefix tells QuivaWorks to evaluate this as a variable mapping expression rather than treating it as a literal string.Accessing Trigger Data
Trigger data is available from the very first node in your flow. It contains the data provided when the flow was initiated.- Webhook Trigger
- API Trigger
- Manual Trigger
When a webhook triggers your flow:Result:
Webhook Payload
Variable Mapping
Accessing Node Data
Node data becomes available after a node completes execution. You can reference any previously executed node using its unique ID.Basic Node Access
Execution Order Matters
1
Node 1: fetch_customer
Executes first. Can access
$.trigger.* but no other nodes yet.2
Node 2: fetch_orders
Can access
$.trigger.* and $.fetch_customer.*3
Node 3: send_email
Can access
$.trigger.*, $.fetch_customer.*, and $.fetch_orders.*Nested Properties
Access deeply nested data using dot notation:- Simple Nesting
- Complex Nesting
- Mixed Sources
Data
Mapping
Array Access
Arrays use zero-based indexing (first element is at index0).
Accessing Array Elements
Accessing Properties in Array Items
Data
Mapping
Result
Combining Trigger and Node Data
Real-world flows typically combine both data sources:Type Handling
Variable mapping preserves data types from the source:- Strings
- Numbers
- Booleans
- Arrays & Objects
Input
Mapping
Output (Strings)
Handling Missing Data
When a path doesn’t exist, variable mapping removes the property from the output entirely:Type Handling with Pipe Operator
The trailing pipe (|) forces string conversion, which affects different data types:
- Primitives
- Arrays
- Objects
Data
Mapping
Result (unchanged)
Best Practices
Use Descriptive Node IDs
Use Descriptive Node IDs
Choose clear, meaningful node IDs that describe what the node does:
Check Data Availability
Check Data Availability
Only reference nodes that have already executed:Use the Flow Debugger to verify node execution order.
Handle Missing Values
Handle Missing Values
Always plan for missing or null data. Use a trailing pipe to ensure empty strings:Or use static text concatenation for default messages:
Test with Real Data
Test with Real Data
Use the Flow Debugger to test mappings with actual data:
- Run your flow with test data
- Inspect each node’s output
- Verify mapping expressions return expected values
- Check for undefined or null values
Common Patterns
- Webhook to Database
- Enrichment
- Notification
Quick Syntax Reference
Try It Yourself
1
Create a Test Flow
Set up a simple flow with a manual trigger
2
Add Test Data
Provide sample JSON data in the trigger form
3
Add a Node
Create a node that uses variable mapping to access trigger data
4
Run and Debug
Execute the flow and inspect the results in the debugger
What’s Next?
JSONPath Features
Learn advanced selectors like wildcards, slicing, and recursive descent
Pipe Operator
Build dynamic strings and provide fallback values
Examples
See real-world variable mapping patterns
Reference
Quick syntax lookup and troubleshooting
Questions? Check the Reference for troubleshooting or visit our Help Center.