Errors and what to do
When a run fails, the results show the error text. The ones you are most likely to meet are collected here, with the cause and the fix. The fastest way to find yours is to copy the error text into the search box above.
The expression did not return a boolean
Condition must evaluate to a boolean value
A Condition node needs the expression to return exactly true or false. The usual causes:
- the expression reads a field that is not there, and comparing with nothing gives nothing rather than a boolean;
- in a dry run a node with side effects is answered by a stub, so the fields of its output are gone;
- the condition is written as
outputs.x.valueinstead of a comparison such asoutputs.x.value > 0.
To check, put true in temporarily — if the run carries on, the expression is at fault. Remember that inside [...] the context is the item, not the flow, so reach the flow through $$: data[id = $$.outputs.incoming.body.id].
The expression did not return a string
Text formatter must evaluate to a string
A Text formatter template is one whole JSONata expression, not text with substitutions. Literals go in quotes and are joined with &:
"Order " & outputs.incoming.body.orderNumber & " is ready"
Plain Order {{...}} is a syntax error here.
The expression failed
Condition evaluation failed · Text formatting failed · JSONata mapping failed · Unable to cast value to a number
The expression did not parse, or threw while running. Common cases:
$number("none")— casting non-numeric text fails the whole run. Check the value first:$contains($trim(x), /^[0-9]+$/);- a node id with a hyphen reads as subtraction — quote it:
outputs."my-node"; - an unclosed bracket or quote in the template.
The body is not valid JSON
Rows are not valid JSON after substitution · Expected valid JSON after resolving template · Filters must be a JSON object
After the {{…}} substitutions the request body is not JSON. Two typical causes:
- a substitution came back empty and the body reads
{"statusId":,"orderId":1}— the value vanished because the expression returned nothing; - the expression returns a string where you expected an array or a number.
$string(...)around an array breaks the JSON, because its quotes get escaped. Drop the$stringand let the substitution serialise the value itself.
The address does not work
The request URL is not a valid address · URL is required for HTTP request node · must use http or https
- An empty variable: if the address is built as
{{variables.BASE_URL}}/ordersand the variable was never filled in, what is left is/orders, which is not an address. Fill in the flow variables. - A constant address in a hybrid field has to be in quotes:
"https://api.example.com/orders". Without them the field is read as an expression.
The address is not public
is not a public address
Flows run in the cloud, so localhost, 127.0.0.1 and private network addresses cannot be reached. You need a public domain or a tunnel.
Nothing answered in time
did not answer within N seconds · timed out after · Could not reach
The other service did not answer within the allowed time. What helps:
- raise the node's
timeoutMsif the service really is slow; - turn on retries for the node — but not for an API with hard rate limits: a retry after a 429 extends the block;
- check that the service accepts requests from our network at all.
The service refused
Telegram refused the message · Slack refused the message · HTTP request refused
The request arrived but was rejected. Read what follows the colon — that is the service talking. Usually it is a wrong token, no rights to the chat, or a stale recipient id.
A required field is empty
is required for · needs a key · Give the list to work on · Say which value to sum
The node is missing something it cannot work without. Open it and the field will be empty. If it holds an expression, the expression returned nothing: look at the previous node's output in the run results.
The flow is too big or loops
exceeded the maximum of 1000 node executions · is already running in this chain · Cycle detected
- A cycle: flows must be acyclic — a connection back to an earlier node is refused.
- The step budget: a thousand node executions per run, counting sub-flows. Usually this is a
ForEachover a long list: lower thelimitin the request, or split the work across runs. - Sub-flows: a sub-flow cannot call itself, not even through another one.
Nothing to start from
No start node found in the flow
The flow has no trigger, or it is not connected to anything. Add a node from the Triggers group and draw a connection from it.
The plan's quota is used up
quota · limit reached
The monthly quota of runs or AI operations has run out. See Limits and plans for what the plan includes and how to buy a pack.
If your error is not here
Open the verify dock at the bottom of the editor: the Diagnostics tab finds problems before a run and links to the page that explains them, and the Runs tab shows each node's output, so you can see where it stopped and with what data.