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.value instead of a comparison such as outputs.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 $string and 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}}/orders and 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 timeoutMs if 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 ForEach over a long list: lower the limit in 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.