POST /v1/workflows/analyze-funds
Analyze the fund requirements of an inline workflow definition without saving or executing it. Same response shape as the workflow-scoped variant, with `workflowId` empty. Read-only — does not consume CU.

Request Body required

Inline workflow definition

application/json
One of:
Option 1
Option 2
defaultWalletAddress string
DefaultWalletAddress overrides the wallet used when a node has no explicit connector or payload wallet field. When empty, the org's default wallet is used (same fallback as the saved-workflow path).
definition object REQUIRED
Definition is the inline workflow graph to analyze. Same shape as a saved workflow's definition. Unlike the ephemeral-run endpoint there is no trigger restriction — analysis is read-only and method-agnostic.
blockExpansions object
Set on run snapshots only (not workflow DB)
inputSchema object[]
Array of:
description string
key string
required boolean
type string
"string", "number", "boolean", "object", "array"
nodes object REQUIRED
triggerNodeIds string[]
TriggerNodeIDs lists the node IDs that are trigger (root) nodes. Every workflow declares this — single-trigger workflows ship ["root"] (the legacy node id), multi-trigger workflows list every trigger node id. Treating single-trigger as a forest-of-1 removes the two-path branching throughout the BE + FE; older rows without the field are backfilled by migration 000282 and the field-missing path stays as a read-side safety net (see FindTriggerNodeIDs) but is no longer exercised by saves. "root" is also a runtime alias for "the trigger that fired this run" — {{root.X}} variable references resolve to the firing trigger regardless of which trigger fired. Don't repurpose the literal "root" as a trigger id on a multi-trigger workflow.
Array of:
variableDefs object[]
VariableDefs is a snapshot of the workflow's declared variables at run creation time. The canonical source lives on the workflows row (Workflow.VariableDefs column). Snapshotted into the run definition so the worker can resolve {{$vars.x}} lookups and route variable-action writes to the right scope without an extra DB round trip.
Array of:
default unknown
description string
lifetime string
Enum: persist, reset
name string
type string
Enum: number, text, boolean, list, object

Responses

200 OK
application/json
code integer
data object
balancesFetched boolean
requirements object[]
Array of:
amountIsHumanReadable boolean
balance object
amount string
raw units (wei)
amountUsd number
chainId integer
decimals integer
isInsufficient boolean
amount < requiredAmount
isLow boolean
gas only: balance below LowGasThreshold
symbol string
tokenAddress string
walletAddress string
chainId integer
chainName string
decimals integer
isNative boolean
nodeId string
nodeName string
nodeType string
reason string
requiredAmount string
source string
Enum: requiredTokens, fundsMovement.sent, requiresGas
symbol string
tokenAddress string
unresolved boolean
unresolvedReason string
Enum: chainId, tokenAddress, parseError, template
walletAddress string
unresolved object[]
Array of:
amountIsHumanReadable boolean
chainId integer
chainName string
decimals integer
isNative boolean
nodeId string
nodeName string
nodeType string
reason string
requiredAmount string
source string
Enum: requiredTokens, fundsMovement.sent, requiresGas
symbol string
tokenAddress string
unresolved boolean
unresolvedReason string
Enum: chainId, tokenAddress, parseError, template
walletAddress string
workflowId string
workflowVersion integer
message string
requestId string
400 Invalid definition
403 Missing org context
curl -X POST 'https://api.example.com/v1/workflows/analyze-funds' \  -H 'Authorization: Bearer YOUR_API_TOKEN' \  -H 'Content-Type: application/json' \  -d '{}'
const response = await fetch('https://api.example.com/v1/workflows/analyze-funds', {  method: 'POST',  headers: {      "Authorization": "Bearer YOUR_API_TOKEN",      "Content-Type": "application/json"  },  body: JSON.stringify({})});const data = await response.json();console.log(data);
import requestsheaders = {    'Authorization': 'Bearer YOUR_API_TOKEN'}response = requests.post('https://api.example.com/v1/workflows/analyze-funds', headers=headers, json={})print(response.json())
package mainimport (	"fmt"	"io"	"net/http"	"strings")func main() {	body := strings.NewReader(`{}`)	req, _ := http.NewRequest("POST", "https://api.example.com/v1/workflows/analyze-funds", body)	req.Header.Set("Authorization", "Bearer YOUR_API_TOKEN")	req.Header.Set("Content-Type", "application/json")	resp, _ := http.DefaultClient.Do(req)	defer resp.Body.Close()	result, _ := io.ReadAll(resp.Body)	fmt.Println(string(result))}
200 Response
{  "code": 200,  "data": {    "balancesFetched": true,    "requirements": [      {        "amountIsHumanReadable": true,        "balance": {          "amount": "<string>",          "amountUsd": 123,          "chainId": 123,          "decimals": 123,          "isInsufficient": true,          "isLow": true,          "symbol": "<string>",          "tokenAddress": "<string>",          "walletAddress": "<string>"        },        "chainId": 123,        "chainName": "<string>",        "decimals": 123,        "isNative": true,        "nodeId": "<string>",        "nodeName": "<string>",        "nodeType": "<string>",        "reason": "<string>",        "requiredAmount": "<string>",        "source": "requiredTokens",        "symbol": "<string>",        "tokenAddress": "<string>",        "unresolved": true,        "unresolvedReason": "chainId",        "walletAddress": "<string>"      }    ],    "unresolved": [      {        "amountIsHumanReadable": true,        "chainId": 123,        "chainName": "<string>",        "decimals": 123,        "isNative": true,        "nodeId": "<string>",        "nodeName": "<string>",        "nodeType": "<string>",        "reason": "<string>",        "requiredAmount": "<string>",        "source": "requiredTokens",        "symbol": "<string>",        "tokenAddress": "<string>",        "unresolved": true,        "unresolvedReason": "chainId",        "walletAddress": "<string>"      }    ],    "workflowId": "<string>",    "workflowVersion": 123  },  "message": "success",  "requestId": "abc-123"}