FlowmageDocs

When an expression fails

An expression shows a red message, or a run fails with EXPRESSION_ERROR. Find the message here, most likely first, and change the field to fix it.

While you edit, the message is red under the field. Checks 3 to 5 need no data: they also add a count to the editor's top bar, such as 1 step needs attention, and the flow cannot run or be published until you fix them.

Checks 1, 2 and 6 depend on the data: when a run reaches the node, the step fails with "An expression in a node's settings could not be evaluated — check the field it names." Click the step in the run: its Output names the field and the message.

Check these, in order

1. Is a value missing?

A function "got null", as in upper() got null for 's' — use ?? or default() for missing values: the input has no value at that path.

A failed step's settings and output. The output says an expression in a node's settings could not be evaluated, and under it: field 'message': upper() got null for 's'.

Check the path in the Input pane, capitals included. If real data can lack it, add a fallback:

Expression
{{ upper(json.name ?? "") }}
Input (json)
{
  "email": "anna@example.com"
}

2. Is the value the wrong kind?

The message names what was expected and what came, as in upper() expects a string for 's', got a number or '+' needs two numbers or two strings, got a string of 6 characters + a number (1042) — use interpolation or toString().

  • A number in text: give it its own expression, Order {{ json.id }}.
  • Sums with a number that arrives as text: toNumber first.
Expression
{{ toNumber(json.quantity) * json.price }}
Input (json)
{
  "quantity": "3",
  "price": 2.5
}

3. Is the expression complete?

Unexpected end of expression or Expression opened with '{{' has no closing '}}': an operator with nothing after it, an open bracket or quote, or a missing }}. Finish it, or delete the leftover.

A node's Message field with an unfinished expression, and Unexpected end of expression in red under it.

4. Is every name spelled right?

The messageThe fix
'uper' is not a registered functionFix the function's name; every name is on Functions.
Unknown name 'customer'Start with json, node, trigger or another name the message lists. See What an expression can read.
'Get contact' is not an upstream node label or idThe name in node["…"] must match a node earlier in the flow: check the spelling on the canvas.
Secret 'SHOP_TOKEN' does not exist in this workspaceAdd the secret, or fix its name.

5. Is a secret used inside a function?

The secret can only be used on its own or compared with == / !=: its value stays hidden, so no function may change it. Put {{ secret.NAME }} on its own, with any other text outside it.

6. Is a date in a format Flowmage reads?

  • Ends is not a valid ISO-8601 date, as in formatDate(): a string of 9 characters is not a valid ISO-8601 date for "yesterday". Text such as "21/07/2026" fails too: use 2026-07-21 or 2026-07-21T09:00:00Z.
  • Says unknown pattern token, ending supported: yyyy MM dd HH mm ss SSS. The formatDate pattern has other letters, such as MMMM, or parts with nothing between them: write yyyy-MM-dd, not yyyyMMdd.
Expression
{{ formatDate(json.date, "dd-MM-yyyy") }}
Input (json)
{
  "date": "2026-07-21T09:00:00Z"
}

Still stuck