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.

Check the path in the Input pane, capitals included. If real data can lack it, add a fallback:
{{ 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:
toNumberfirst.
{{ 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.

4. Is every name spelled right?
| The message | The fix |
|---|---|
'uper' is not a registered function | Fix 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 id | The 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 workspace | Add 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 informatDate(): a string of 9 characters is not a valid ISO-8601 datefor "yesterday". Text such as "21/07/2026" fails too: use2026-07-21or2026-07-21T09:00:00Z. - Says
unknown pattern token, endingsupported: yyyy MM dd HH mm ss SSS. TheformatDatepattern has other letters, such asMMMM, or parts with nothing between them: writeyyyy-MM-dd, notyyyyMMdd.
{{ formatDate(json.date, "dd-MM-yyyy") }}Input (json){
"date": "2026-07-21T09:00:00Z"
}
