Output & Results
The output field allows you to extract values from Warp execution (smart contract returns, events, or API responses) and use them in messages, chained Warps, or logic transforms.
Basic Structure
{
"output": {
"RESULT_NAME": "resolution.path"
}
}Resolution Paths
Contract & Query Returns (out.N)
Extracts the Nth return value from a function call.
out.1: First return value.out.2: Second return value.
{
"output": {
"BALANCE": "out.1"
}
}Event Data (event.Name.N)
Extracts arguments from emitted blockchain events.
- Format:
event.{EventName}.{ArgumentIndex}
{
"output": {
"TOKEN_ID": "event.Transfer.3",
"FROM": "event.Transfer.1"
}
}API Responses (out.path)
For collect actions, traverse the JSON response object.
{
"output": {
"USER_ID": "out.data.id",
"PRICE": "out.market_data.current_price.usd"
}
}Transforms
You can compute derived values using JavaScript. Transforms run in a sandboxed environment.
Syntax
transform:() => { ... }
Accessing Previous Results
The result object contains all previously resolved outputs.
{
"output": {
"RAW_BALANCE": "out.1",
"FORMATTED": "transform:() => { return (result.RAW_BALANCE / 1e18).toFixed(2) }",
"IS_ELIGIBLE": "transform:() => { return result.RAW_BALANCE > 100 ? 'Yes' : 'No' }"
}
}Transform Rules
- Order Matters: Transforms execute sequentially. You can rely on values defined earlier in the object.
- Synchronous: Functions must be synchronous.
- Sandboxed: No access to
window,document, or external APIs.
Using Outputs
In Messages
{
"messages": {
"success": "Balance: {{FORMATTED}} Tokens"
}
}In Chained Warps (Next URL)
Pass results as query parameters to the next Warp.
{
"next": "view-profile?id={{USER_ID}}"
}Inline Action Output Mapping
The output field can also be used on inline actions to extract values from a sub-warp's execution:
{
"type": "inline",
"warp": "@joai/service-create",
"output": {
"SERVICE_ID": "out.data.id"
}
}Append to Array
Prefix the path with append: to add the resolved value to an existing array rather than replacing it:
{
"type": "inline",
"warp": "@joai/product-fetch",
"output": {
"productIds": "append:out.data.id"
}
}If the target variable doesn't exist yet, it's created as a new array. If the when condition skips the action, no output mapping occurs.