For the complete documentation index, see llms.txt. This page is also available as Markdown.

How to interpret personalization errors?

You may find different types of errors when writing dynamic content. Here’s a list of the errors you may find and an explanation for each of them.

“Illegal char…”

Meaning: A character appeared where only a name, number, separator, or part of a string was expected.

Typical Causes:

  • Using the string delimiter (') or variable prefix ($) in the wrong place.

  • Mixing double quotes where the language requires single quotes.

  • Introducing a non-alphanumeric character while building an identifier or a number.

Examples:

👉 {% if trigger_event.name == “John” %} instead of {% if trigger_event.name == 'John' %}

The issue is the double quotes “”.

👉price $ 30 instead of price == 30

$ on its own becomes an illegal char.

“Illegal token…”

Meaning: A symbol of this type is not allowed in this part of the code.

Typical Causes

  • Forgetting a comma between arguments.

  • Using the wrong operator.

Examples:

👉 price => 3 instead of price >= 3

The correct operator is >=.

👉 {% set $product = lookup('products' '1') %} instead of

{% set $product = lookup('products', '1') %}

There should be a comma between the catalog name ‘products’ and the catalog id ‘1’.

“Unbalanced parenthesis…”

Meaning: Closing a parenthesis incorrectly or without valid arguments.

Example :

👉{% set $product = lookup('products', '1' %} instead of

{% set $product = lookup('products', '1') %}

The second parenthesis after the catalog id ‘1’ is missing.

“Unbalanced sections…”

Meaning: The control block was not properly closed.

Example:

👉 {% if age > 5 %} CONTENT instead of {% if age > 5 %} CONTENT {% endif %}

The closing block {% endif %} is missing.

“Unbalanced string…” :

Meaning: A string was opened but not properly closed.

Example:

👉 {% if name == 'XYZ %} instead of {% if name == 'XYZ' %}

The closing quote is missing.

“Illegal attribute/tag/event name …”

Meaning: The name doesn’t match the expected format, scope, or permissions.

Example:

👉 user..age instead of u.age or age

The format of the attribute is incorrect.

“A var name and then the equal operator was expected”

Meaning: After {% set, there must be a $variable followed by =.

Example:

👉 {% set = 3 %} instead of {% set $user_id = 3 %}

The $variable is missing.

“A var name and then the 'in' keyword was expected”

Meaning: After {% for, there must be a variable followed by in.

Example:

👉 {% for $item list %} instead of {% for $item in list %}

The in is missing.

“The body can't be empty”

Meaning: The block associated with an if, else if, else or for is empty.

Example:

👉{% if condition %}{% endif %} instead of {% if condition %}CONTENT{% endif %}

There is no content between the display conditions (for dynamic content in SMS, push and In-App).

“Illegal sign operator”

Meaning:

+ or - is used in front of a value that is not a number.

Example:

👉 {% if -true > user_score %} instead of {% if -4 > user_score %}

true is not a number, and therefore -true is not valid.

“Invalid filter”

Meaning: The filter used to transform the argument is incorrect.

Example:

👉{% if first_name|title(nullIfEmpty:true) != None %} instead of

{% if first_name|trim(nullIfEmpty:true) != None %}

The filter title(nullIfEmpty:true) is incorrect.

“Illegal end of string…”

Meaning: The string ends too early due to a closing parenthesis missing or placed incorrectly.

Example:

👉 hello {{first_name instead of hello {{first_name}}

The closing parenthesis is missing.

“Illegal decimal separator…”

Meaning: The symbol used to separate the whole part from the fractional part of a number is incorrect.

Example:

👉 {% if age > 1..5 %} instead of {% if age > 1.5 %}

The decimal is incorrect.

“Illegal unit char…”

Meaning: A character that isn’t allowed appeared inside a unit (the part that describes measurement like kg, ms, cm).

Example:

👉{% if distance > 10km@ %} instead of {% if distance > 10km %}

The unit is incorrect.

“Unable to parse this constant…”

Meaning: The system couldn’t read the constant because it’s malformed or contains invalid characters.

Example:

👉 {% if subscription_date == 90days %} instead of {% if subscription_date == 90d %}

The constant days is incorrect.

“Partial tag… is not allowed”

Meaning: A partial tag is a tag whose full set of values cannot be listed. If a tag is partial (like b.custom_audiences), you cannot use it where the system must enumerate or join all values.

Example:

👉 {{ b.custom_audiences | join(", ") }}

The system cannot return the complete list of audiences for an installation.

Last updated