Every node has a menu with few items (depending on the node), which appears after a single click.
- EDIT - displays node modal, double click on the node functions the same,
- DELETE - displays alert asking user if they are sure to delete the node form journey,
- COPY - creates an exact copy of the node (including all of it’s settings),
- VIEW - displays the sample view of data which are processed in the node, and also displays the number of recipients which are/were:
- Currently being processed
- Successfully processed
- Not processed
- RUN - initiates the journey (this item is exclusive to the NOW trigger)
There are several node categories:
The trigger is not started by turning on the entire journey, but by clicking the “RUN” button. The ON/OFF switch for starting/stopping the journey in the position (see the image below) indicates that the journey was started manually, not by other triggers. For further editing, the journey must then be “turned off” again.

The end time is the same as the start time, i.e. when the start time is monday 4:30 PM and the end day is friday, it will also be 4:30 PM.

The journey with a scheduled trigger runs once or multiple times, on the date and time it was scheduled.
Nod má několik režimů, které lze vybrat z nabídky pro “Run on Events”:
Subscribe to recipient list → when a recipient subscribes to the selected recipient list, they will enter the journey.
This only happens when the recipient has subscribed through a subscribe form , or has been added via API call mailkit.mailinglist.adduser.

Email read → when a recipient opens an e-mail from a selected campaign or message, they will enter the journey. A recipient can enter the journey only once.
When a single campaign is selected, it is possible to select a message or multiple messages, when multiple campaigns are selected, the message selection is disabled.
Note: If the account doesn’t yet have any sent campaigns, the Campaign menu doesn’t show up.

Email click → when a recipient clicks an e-mail from a selected campaign or message, they will enter the journey, a recipient can enter the journey only once.
When a single campaign is selected, it is possible to select a message or multiple messages. When multiple campaigns are selected, the message selection is disabled.
The value entered in the “Link” field is compared with the links in the campaing delivery/deliveries as a string with the “contains” operator, i.e. if you want to work with a specific link, you need to enter its entire URL - e.g. https://www.mailkit.com/resources/documentation/
If you fill in the “Link” field with the value https://www.mailkit.com, the journey will respond to clicking on any link in the email that led to our website.
If you enter * as the value in the "Link" field, the journey will respond to clicking on any link in the sent email.
Note: If the account doesn’t yet have any sent campaigns, the menu Campaign doesn’t show up.

Operation Execute → in this mode, the trigger receives recipients from an Operations - Execute node in another journey.

Event API → the trigger reacts to an event the same way a remarketing campaign does. It can react to incomplete or completed events, after a set time. The output is the data from the event, which are in the Event and EventItems data structures, and can be used in the template, the same way as in the remarketing campaign..

API → recipient will be inserted into the scenario using the API call mailkit.journeys.trigger.
In the “Event tag” field, you need to insert the value of the “event_tag” parameter from the API call. Entering the tag name in the “Event tag” field must be confirmed with enter. Multiple event tags can be inserted into the field.

SOURCES
Most common use for the Sources is to insert recipients into the journey, but these nodes also allow the recipient data already in the journey to be enriched by data from various sources, at a given point in the journey.
Enriching data
The first source node in each journey is a primary node, and all other source nodes which come after that are enriching the recipients which came from the primary source node.
There is an exception with the ON EVENT trigger node - since this node is also a source of the recipient data (while not being a source node itself), it is considered a primary source node, and every source node after it, is an enriching source.
In case of multiple source nodes, the primary one is designated by a dark border.
DELIVERY FEED
This source node inserts recipients from the selected delivery feed, or enriches the data of the recipients already in the journey.
SQL
Access to the data in a specific SQL datovém zdroji. After selecting an SQL data source, a list of individual columns is displayed, so the column in which the email is stored can be selected.
When the journey and the node has been selected, a connection is made, and all the recipients from the selected journey will move into the Source Collect -> which means the Operations Collect node will be empty.
Further recipients coming into the Operations Collect node will be moved immediately into the Source Collect node.
EVENT
This source allows you to enrich the recipients data with the data from an event - it mimics the functionality of the Event plug-in for the templates.
It has to be preceded by a node which outputs recipients (either other source nodes, or the ON EVENT trigger), because in order to search for an event, the node has to have the e-mail address to search by.

Title – node title
URL – webhook URL
HTTP method – one of the following methods can be selected:
- GET (default method)
- POST
- PUT
- DELETE
- PATCH
Authentication – if the call needs to be secured/authenticated, enter a Username and Password
Parameters (for POST/PUT/PATCH methods) – variables from scenarios can be used/passed, e.g.:
param1=[VAR recipient.city]¶m2=[VAR recipient.customs.custom_1]
Content type – you can select one of the following types:
- application/json
- application/xml
- application/x-www-form-urlencoded
- text/plain
Regular expression – for structured responses in JSON or XML, the conversion is clear and the structure will be available unchanged. For other responses, a regular expression can be defined to capture specific data (not available for application/json and application/xml types).
Instance name – to make it easier to find data in the data structure, you can specify the name of the webhook instance. If the name is not specified, the instance will be identified by the value in the actual_node field in the data of the given WEBHOOK node.

The data obtained from the webhook will be stored in the scenario in the scenario.webhooks structure, which you can then use in your email template.
Example: A simple webhook that returns voucher information (code and validity):

The webhook returns, for example, this response:
{
"code": "8DqVk44Q",
"valid": "2026-09-30"
}
In the details of the WEBHOOK node, you will then find the following data structure:

You can then use the data from this structure, for example:
In the EMAIL TEMPLATE –> for example, to insert the voucher code, use the variable notation in this form:
[% scenario.webhooks.voucher.data.code -%]
In the SET node –> for example, if you want to save values from the response to the recipient for future use – use the following value format to set the voucher code:
[VAR webhooks.voucher.data.code]

QUERY BUILDER
This node allows you to use a recipient list and apply segmentation rules saved in step 4 to it when filtering recipients or during delivery capping setup.

Title – node title
Recipients list – select the recipient list to which the rules should be applied
Query – select one of the saved rules that will be applied to the recipient list selected above. All saved rules can be found in the Mailkit UI in the Profile → Queries menu, where you can add additional rules or edit or delete existing ones.
There are three groups of operators:
STRING – for operations with text values
- equal
- not equal
- begins with
- doesn't begin with
- ends with
- not ends with
- contains
- doesn't contain
Example: recipient.city EQUAL Červené Pečky -> records with the value „Červené Pečky“, „Cervené Pecky“, „cervené pečky“, „ČERVENÉ Pečky“ and others will be searched
- is empty
- is not empty
- exact match
- not exact match
Example: recipient.city EXACT MATCH Červené Pečky -> ONLY records with the value „Červené Pečky“ will be searched, not the records „Cervené Pecky“, „cervené pečky“, „ČERVENÉ Pečky“ and others
NUMERIC – for operations with numeric values
- = (equal)
- != (not equal)
- < (less) – ATTENTION, even an empty value is smaller than any number
- <= (less or equal) – ATTENTION, even an empty value is smaller than any number
- > (greater)
- >= (greater or equal)
DATE &TIME – for operations with time data
- equal
- not equal
- before – searches for values with a date smaller (earlier) than the compared value. ATTENTION, even an empty value is smaller than any time data
- not before – searches for values with data that is greater (later) or equal to the compared value
- after – searches for values with a date greater (later) than the compared value
- not after – searches for values with a date that is smaller (earlier) or equal to the compared value. ATTENTION, even an empty value is smaller than any time date.

When working with time data (using time operators), comparisons are made using intervals (INTERVAL) – see the image above. You can use YEAR, QUARTER, MONTH, WEEK, DAY, HOUR, MINUTE, and SECOND as intervals.
To filter on a value in a field (e.g. a custom recipient field), you can work with values:
- [YEAR] – current year
- [MONTH] – current month
- [DAY] – current day
- [HOUR], [MIN], [SEC] – hour, minute, second
- [CURDATE] – current date (in YYYY-MM-DD format, e.g. 2025-10-20)
- [CURTIME] – current time (in HH:MM:SS format, e.g. 14:30:45)
- [NOW] – current date and time (e.g. 2025-10-20 14:30:45)
- [DAYOFMONTH] – position (number) of the day in the month
- [DAYOFWEEK] – position (number) of the day in the week (0=Monday, 6=Sunday)
- [DAYOFYEAR] – position (number) of the day in the year
- [QUARTER] – position (number) of the quarter in the year
- [WEEK] – position (number) of the week in the year
- [MONTHNAME] – name of the month (January, February...)
- [DAYNAME] – name of the day (Monday, Tuesday...)
- [MONTHNAME_SHORT] – month short name (Jan, Feb...)
- [DAYNAME_SHORT] – day short name (Mon, Tue...)
-> based on the condition in the image above, recipients will be selected who have the date the day before yesterday in their custom field (a date 2 days less than the current date (CURDATE)). It is also possible to work with random numbers, e.g.:
"recipient.custom_field.custom_1" BEFORE "date_eu|[CURDATE] - INTERVAL [RAND 30] DAY"
-> based on this condition, the value in custom field 1 (where the date is stored in the date_eu format (DD.MM.YYYY) will be compared with the current date minus a random number of days (1-30)
To work with time data, it is necessary that the data in the field (e.g. custom field) for recipients be in one of the supported formats:
- datetime – e.g. 2024-01-12 12:13:14 or 2024/01/12 12:13:14
- date_us – e.g. 2024-01-12 or 2024/01/12
- date_us_short – e.g. 24-01-12
- date_eu – e.g. 01.12.2024
- date_eu_short – e.g. 01.12.24
- date_eu_dm – např. 01.12.
- date – e.g. 2024-01-12 or 2024/01/12
- date_dm2 – e.g. 31/12
- date_md – e.g. 12/31
- time – e.g. 12:13:14
Variables can be either typed into the input, or it can be chosen from a list of available variables, which can be displayed by the “List Variables” butto 

TIP: In the CONDITION node, you can also compare recipient values within their data. For example, if you wanted to select recipients for whom the value in custom field 6 is greater than the value in custom field 7, then the condition would look like this:
recipient.custom_fields.custom_6 is greater [VAR recipient.custom_fields.custom_7]

Working with arrays
While when applying a condition to a recipient list (recipient data), the system automatically goes through all records (recipients) in the recipient list, it is a bit more complicated with SQL data sources or Event structures.
By writing it differently, you can get different results:
Simple array ([*])
- e.g. Events[*].currency –> the system will go through the "currency" field for all events
Nested array ([*]…[*])
- e.g. Events[*].EventItems[*].price –> the system will go through all events and in all items the "price" field
Indexed array ([0])
- e.g. Events[0].currency –> the system will will go through the "currency" field of the first ([0]) event
Events data tree example:
'Events' => # 1 record in Events array]
{
'first_name' => 'aaa',
'currency' => 'CZK',
'gender' => '',
'status' => 'finish',
'items_amount' => '200.0000',
'ID_workflow_event' => 11699290,
'email' => 'jiri+1@mailkit.eu',
'items_count' => 2,
'status_url' => '',
'decimal_separator' => '',
'description' => '',
'language' => 'en',
'promo' => '',
'promo_teaser' => '',
'order_no' => '',
'invoice_no' => '',
'modify_date' => '2025-07-23 09:55:04',
'invoice_url' => '',
'create_date' => '2025-07-23 09:55:04',
'promo_value' => '',
'event_tag' => 'kosik',
'return_url' => '',
'thank_you' => '',
'last_name' => 'kkk'
'EventItems' => [# 2 records in EventItems array]
{
'teaser' => '',
'item_available' => '',
'name' => '',
'date' => '2025-07-23 09:55:04',
'item_curr' => 'CZK',
'price' => '100.0000',
'product_id' => 'A001',
'product_category' => '',
'item_total' => '100.0000',
'product_cat_url' => '',
'product_url' => '',
'ID_workflow_event_item' => 62757504,
'item_qty' => '1.0000',
'description' => '',
'item_discount' => '',
'price_orig' => '0.0000',
'image_url' => ''
},
{
'product_id' => 'B001',
'price' => '100.0000',
'teaser' => '',
'item_curr' => 'CZK',
'date' => '2025-07-23 09:55:05',
'name' => '',
'item_available' => '',
'description' => '',
'item_qty' => '1.0000',
'image_url' => '',
'price_orig' => '0.0000',
'item_discount' => '',
'item_total' => '100.0000',
'product_category' => '',
'ID_workflow_event_item' => 62757505,
'product_url' => '',
'product_cat_url' => ''
}
],
}
],
You can then use various condition on events:
- Events[*].EventItems[*].price –> system will go through all ([*]) Events and in them all ([*]) EventItems.price items
- Events[0].EventItems[*].price –> system will go through the first ([0]) Event and in it all ([*]) Eventitems.price items
- Events[0].EventItems[0].price –> system will go through the first ([0]) Event and in it the first ([0]) Eventitems.price item

A node has 2 outputs - TRUE and FALSE. The first output always has the value TRUE. If you then click again in the node output, a branch with the value FALSE will appear.
The basic difference between CONDITION and A/B SPLIT, is that A/B SPLIT can have several outputs, while CONDITION has only two. Recipients in the node are divided to two groups at least, to 11 groups at most (10 groups plus Control Group). Each group is a percentage of the whole, the total has to always be 100 %, otherwise the node can’t be saved. Recipients are divided into groups by random.
If a user needs more limits, they can chain them one after the other. There are two outputs, under the limit (TRUE), and above the limit (FALSE).
For example if the node is set to 100 recipients per 1 hour, the first 100 recipients who reach the node will be sent into the below limit output (TRUE), any recipients after that will be sent to above limit output (FALSE). After 1 hour passes since the first recipient arrived, the limit is cleared for another 100 recipients.
If the recipient already has some value in the attribute, it will be overwritten. There is always at least one attribute, and it can’t be deleted.
In addition to specific static values, attributes can also be set using variables:
Basic time data:
- [YEAR] –> a value corresponding to the current year will be inserted (e.g. 2025)
- [MONTH] –> a value (number) corresponding to the current month will be inserted, i.e. values 01 to 12
- [DAY] –> a value (number) corresponding to the current day of the month will be inserted, i.e. values 01 to 31
- [HOUR] –> a value (number) corresponding to the current hour will be inserted, i.e. values 00 to 23
- [MIN] –> a value (number) corresponding to the current minute will be inserted, i.e. values 00 to 59
- [SEC] –> a value (number) corresponding to the current second will be inserted, i.e. values 00 to 59
Date and time format data:
- [CURDATE] –> a value corresponding to the current date in the format YYYY‑MM‑DD (e.g. 2025‑10‑20)
- [CURTIME] –> the value corresponding to the current time in the format HH:MM:SS will be inserted (e.g. 14:30:45)
- [NOW] –> the value corresponding to the current date and time will be inserted (e.g. 2025‑10‑20 14:30:45)
Extended time data:
- [DAYOFMONTH] –> the value (number) corresponding to the order of the current day of the month will be inserted, i.e. values 1 to 31
- [DAYOFWEEK] –> the value (number) corresponding to the order of the current day of the week will be inserted (0=Monday, 6=Sunday)
- [DAYOFYEAR] –> the value (number) corresponding to the order of the current day of the year will be inserted (1-365/366)
- [QUARTER] –> the value (number) corresponding to the order of the current quarter of the year (1-4)
- [WEEK] –> the value (number) corresponding to the order of the order of the current week in the year (1-53)
Day and month names:
- [DAYNAME] –> the full name (text) of the current day of the week in English will be inserted (Monday, Tuesday...)
- [DAYNAME_SHORT] –> the abbreviated name (text) of the current day of the week in English will be inserted (Mon, Tue...)
- [MONTHNAME] –> the full name (text) of the current month in English will be inserted (January, February...)
- [MONTHNAME_SHORT] –> the abbreviated name (text) of the current month in English will be inserted (Jan, Feb...)
Random value:
- [RAND x] –> a random integer with a value from 1 to x will be inserted
Special operations with texts and numbers:
- [INCR x] –> increases the existing value (number) by the specified value x
- [APP text] –> appends the specified text to the existing value (the added text will be separated by a space)
–> e.g., using the [APP [DAY].[MONTH].[YEAR]] will add the current date to the existing value
- [CLEAR] –> deletes the value (sets an empty text field string)
It is also possible to use the value of one field as the value for another field - for example, if we wanted to set the value from the First Name field in CUSTOM7, we could use [VAR recipient.first_name] as the value.

EXECUTE
A node which sends recipients to the ON EVENT trigger in the Operation - Execute mode, in another journey.
Recipients retain all the data they got in the current journey, so those can be used in the CONDITION node, for example. Execute doesn’t have an output, because recipients which enter it are moved from the journey.
There can be several collections in a journey. Recipients remain in the node for 6 months - they are stored continuously, meaning each recipient will have a set period, and after that period (6 months) it will be removed from the node.
Selecting this node (its name) in a Source - COLLECT node will move all the recipients collected so far, into the Source node. When the connection between the source and operation nodes is made, everytime the journey runs, all the collected recipients will be moved. COLLECT node doesn’t have an output.
Title – node title
Time period – time for which the recipient will "wait" in the WAIT node. After the time has elapsed, the recipient continues to the next (following) node in the scenario.
Leave on Events – the waiting time in the node can be shortened if one of the following actions/events occurs:
- Disabled –> the waiting time will not be shortened and all recipients will leave the node only after the set time has elapsed.
- Subscribe to recipients list → if the recipient has consented, it immediately continues to the next node
- E-mail read → if the recipient opens an email from the selected campaign, it immediately continues to the next node.
- If only one campaign is selected, it is necessary to select a specific campaign delivery/deliveries, or select "Select all messages", then all future campaign deliveries that will be sent from the selected campaign after the scenario is started will be included.
- If multiple campaigns are selected, specific campaign deliveries can no longer be selected and all (even future) campaign deliveries from the selected campaigns will be included.
- E-mail click → if the recipient clicks on a link in an email from a selected campaign, it immediately continues to the next node.
- Link (RegExp) = window for inserting a link or regular expression. The filled-in value is compared with the links in the campaign delivery/deliveries as a string with the "contains" operator, i.e. if you want to work with a specific link, you need to fill in its entire URL - e.g. https://www.mailkit.com/resource/dokumentation/
- If you fill in "https://www.mailkit.com" as the value, the script will respond to clicking on any link in the email that led to our website.
- If you enter * as the value in the field, the script will respond to clicking on any link in the sent email.
- If one campaign is selected, it is possible to select a specific campaign delivery/deliveries, or select "Select all messages", then all future campaign deliveries that will be sent from the selected campaign after the scenario is started will be included.
- If multiple campaigns are selected, the selection of campaign deliveries is not available.
- Link (RegExp) = window for inserting a link or regular expression. The filled-in value is compared with the links in the campaign delivery/deliveries as a string with the "contains" operator, i.e. if you want to work with a specific link, you need to fill in its entire URL - e.g. https://www.mailkit.com/resource/dokumentation/
- Event API → tthis mode reacts to events in the same way as a remarketing campaign. Therefore, if a recipient waiting in the WAIT node has a selected event recorded, it will leave the WAIT node before the set time has elapsed. The system can react to completed or incompleted events with the selected label (tag) after the set time.
- API → waiting can be terminated prematurely by calling the API mailkit.journeys.trigger. Entering the tag name in the "Event label" field must be confirmed with enter. Multiple event labels can be entered in the field.

If none of the events/activities occur within the specified "time", the recipient continues to the next node after it expires.

REACTION
Evaluates reactions in an email message sent from the previous EMAIL node(s) in the given scenario (i.e. one of the EMAIL nodes that precedes the REACTION node).
The REACTION node does not have to be immediately adjacent to the EMAIL node; for example, there may be a WAIT node between them.

Title – node title
Read (YES/NO) – after selecting one specific EMAIL node from the drop-down menu, it will be evaluated whether the recipient has read the email or not.
Click – a click in the sent email selected in the “Read” item will be evaluated
- ANO → you can enter a specific link or a regular expression that will be evaluated. The value is compared with the links in the sent email as a string with the “contains” operator, i.e.:
- if you want to work with a specific link, you need to fill in its entire URL - e.g. https://www.mailkit.com/resources/documentation/,
- if you fill in the value https://www.mailkit.com, the scenario will evaluate clicking on any link in the email that led to our website
- if the field remains empty, the system will respond to all links in the sent email, i.e. if the recipient clicks on any link in the defined sent email, the condition will be met.
- NO → the click in the sent email will not be evaluated, i.e. it is irrelevant whether the recipient clicked in the sent email or not.
The evaluation of the condition for "Click" is active only if the condition "Read" is set to "YES".
The REACTION node, like the CONDITION node, has 2 outputs - TRUE and FALSE. The first output always has the value TRUE. If you then click again in the node output, a branch with the value FALSE will appear.

Unlike the SET node, which merely assigns values, the TRANSFORM node applies transformation functions to existing data and stores the results in the scenario.
The transformation results are stored in the „transform“ branch and can also be used to modify data in the "recipient" branch (within the recipient details—standard recipient fields can be modified, with the exception of the email address and system data such as email ID, recipient ID, consent_date, and consent).

Title – node title
Transformation – select the type/method of data transformation
Variable name – the name assigned to the transformation value (output) within the transform branch – for example, if you want to map the transformation result as a value into a template, use the syntax [% scenario.transform.name %], where name is the identifier you specified in the node settings.
Source – selection of the source variable for the transformation
Additional transformation settings fields will appear depending on the selected transformation type or method.
List of transformations
TEXT TRANSFORMATIONS
uppercase – converts text to UPPERCASE
lowercase – converts text to lowercase
capitalize – capitalizes the first letter and makes the rest lowercase (if the text contains multiple words, the first letter of the first word becomes uppercase, while all other letters (in all subsequent words) become lowercase)
title case – capitalizes the first letter of every word
trim – removes spaces from the beginning and end (if the text contains multiple words, only the spaces before the first word and after the last word are removed; spaces between words remain)
ltrim – removes spaces from the left (if the text contains multiple words, only the spaces before the first word are removed)
rtrim – removes spaces from the right (if the text contains multiple words, only the spaces after the last word are removed)
reverse – reverses the order of characters
length – returns the length of the string
substr – extracts a part of a string
- Start – how many characters from the string (counting from the left) are to be skipped, or rather, after which character the extraction should begin (spaces are counted, including those at the beginning, before the first word)
- Length – the number of characters to be extracted, including spaces (this represents the maximum number of characters the function can return)
Example 1:
source string = documentation
start = 4
length = 5
–> transformation result = menta
Example 2:
source string = documentation
start = 9
length = 5
–> transformation result = tion (the length of the extracted string was supposed to be 5 characters. However, the extraction began after the 9th character, leaving only 4 characters, so the transformation result is simply the string "tion")
TEXT OPERATIONS
replace – replaces text
- Search – the string to be searched for in the source variable (NOTE: the system searches for an exact match only—i.e., it is case-sensitive and respects diacritics –> for example, if you enter "červená" as the search text, the operation will replace only that exact text in the source variable, whereas strings like "cervena" or "ČERVENÁ" will not be found or replaced, and the original value of the source variable will be stored as the result)
- Replace – the string that will replace the string found in the source variable
split – splits the source text using a delimiter and returns the value at a specific position as the result of the operation
- Delimiter – a character (space, comma, semicolon, or any other character) at which the source text is "cut."
- Index – a numerical value (an integer greater than or equal to 0) specifying a particular position within the source text relative to the delimiter. The text before the first delimiter has position (index) 0, the text after the first delimiter (and before the second, if one exists) has position (index) 1, and so on.
Example 1:
source string = jan,novak,praha
delimiter = , (comma)
→ index 0 = jan
→ index 1 = novak
→ index 2 = praha
Example 2:
source string = Jan Novak Praha
delimiter = $
→ index 0 = Jan Novak Praha (the $ character does not appear in the source string "Jan Novak Praha" at all. Therefore, the split function has nowhere to split the string and returns a list with a single element – the original string. Index 0 then returns that very first (and only) element)
→ index 1 = empty value (the split function returns a list with a single element (Jan Novak Praha), so index 1 does not exist (the list only has index 0).
join – combines the elements of an array (or list) into a single text string, inserting a specified delimiter between the individual elements.
- Delimiter – a character (hyphen, comma, space, or any other character) inserted between the individual elements when joining them.
Example 1:
source = ["jan", "novak", "praha"]
delimiter = , (comma)
→ result = jan,novak,praha
Example 2:
source = [1, 2, 3, 4]
delimiter = - (hyphen)
→ result = 1-2-3-4
Example 3:
source = ["Jan"]
delimiter = , (comma)
→ result = Jan (the array has only one element; there is nothing to join, so the delimiter is not used)
The difference compared to split is that split cuts text into individual pieces based on a delimiter, whereas join is the reverse operation – it takes already separated pieces (an array) and stitches them back together into a single text, using the delimiter as the character inserted between the individual pieces.
pad left – adding (prepending) one or more (identical) characters to the beginning of a text string (before the first character) until the string reaches a predefined total length.
- Length – the definition of the string's total length. If the source string is shorter than the defined length, the appropriate number of (identical) characters is added to the beginning so that the string reaches the required length. If the source string is longer than the required (defined) length, no characters are added, and the result of the operation is the original (source) value.
- Character – the character to be (repeatedly) added to the beginning of the source string (before the first character). Any character, including a space, may be added.
Example 1:
source = Mailkit
length = 10
character = X
–> result = XXXMailkit
Example 2:
source = Mailkit
length = 5
character = X
–> result = Mailkit
Example 3:
source = (no value/empty field)
length = 5
character = X
–> result = XXXXX
pad right – appending one or more (identical) characters to the end of a text string (after the last character) until the string reaches a predefined total length.
- Length – the definition of the string's total length. If the source string is shorter than the defined length, the appropriate number of (identical) characters is appended to it (at the end) so that the string reaches the required length. If the source string is longer than the required (defined) length, no characters are added, and the result of the operation is the original (source) value.
- Character – the character to be (repeatedly) appended to the end of the source string (after the last character). Any character, including a space, may be added.
Example 1:
source = Mailkit
length = 10
character = X
–> result = MailkitXXX
Example 2:
source = Mailkit
length = 5
character = X
–> result = Mailkit
Example 3:
source = (no value/empty field)
length = 5
character = X
–> result = XXXXX
HASHING AND ENCODING
md5 – returns the MD5 hash of the source variable
sha1 – returns the SHA1 hash of the source variable
base64 encode – returns the Base64-encoded value of the source variable
base64 decode – returns the Base64-decoded value of the source variable
url encode – returns the URL-encoded form of the source variable
url decode – returns the URL-decoded form of the source variable
NUMERIC OPERATIONS
abs – returns the absolute value of the source variable.
→ if the source variable value is 2.2356, the operation returns 2.2356
→ if the source variable value is -2.2356, the operation returns 2.2356
→ if the source variable value is 2,2356, the operation returns 2
→ if the source variable value is -2,2356, the operation returns 2
→ if the source variable value is text, the operation returns 0
→ if the source variable has no value (the field is empty), the operation returns 0
round – rounds a number to a specified number of decimal places. If the operation rounds to, for example, 3 decimal places, the following applies:
→ if the source variable value = 2, the operation returns the value 2.000
→ if the source variable value = -2, the operation returns the value -2.000
→ if the source variable value = 2.2356, the operation returns the value 2.236
→ if the source variable value = -2.2356, the operation returns the value -2.236
→ if the source variable value = 2,2356, the operation returns the value 2.000
→ if the source variable value = -2,2356, the operation returns the value -2.000
→ if the source variable value is text, the operation returns the value 0.000
→ if the source variable has no value (the field is empty), the operation returns the value 0.000
ceil – rounds a number up to the nearest integer
→ if the source variable value = 2, the operation returns 2
→ if the source variable value = -2, the operation returns -2
→ if the source variable value = 2.2356, the operation returns 3
→ if the source variable value = -2.2356, the operation returns -2
→ if the source variable value = 2,2356, the operation returns 2
→ if the source variable value = -2,2356, the operation returns -2
→ if the source variable value is text, the operation returns 0
→ if the source variable has no value (the field is empty), the operation returns 0
floor – rounds the number down to an integer
→ if the source variable value = 2, the operation returns 2
→ if the source variable value = -2, the operation returns -2
→ if the source variable value = 2.2356, the operation returns 2
→ if the source variable value = -2.2356, the operation returns -3
→ if the source variable value = 2,2356, the operation returns 2
→ if the source variable value = -2,2356, the operation returns -2
→ if the source variable value is text, the operation returns 0
→ if the source variable has no value (the field is empty), the operation returns 0
add – the operation adds a specified value. Decimal numbers can also be added. If the operation adds, for example, the value 2.56 to the source variable, the following applies:
→ if the source variable value = 2, the operation returns 4.56
→ if the source variable value = -2, the operation returns 0.56
→ if the source variable value = 2.2356, the operation returns 4.7956
→ if the source variable value = -2.2356, the operation returns 0.3244
→ if the source variable value = 2,2356, the operation returns 4.56
→ if the source variable value = -2,2356, the operation returns 0.56
→ if the source variable value is text, the operation returns 2.56
→ if the source variable has no value (the field is empty), the operation returns 2.56
subtract – the operation subtracts a specified value from the source variable. Decimal numbers can also be subtracted. If the operation subtracts, for example, the value 2.55 from the source variable, the following applies:
→ if the source variable value = 2, the operation returns -0.55
→ if the source variable value = -2, the operation returns -4.55
→ if the source variable value = 2.2356, the operation returns -0.3144
→ if the source variable value = -2.2356, the operation returns -4.7856
→ if the source variable value = 2,2356, the operation returns -0.55
→ if the source variable value = -2,2356, the operation returns -4.55
→ if the source variable value is text, the operation returns -2.55
→ if the source variable has no value (the field is empty), the operation returns -2.55
multiply – the operation multiplies the source variable by a specified value. Multiplication by a decimal number is also possible. If the operation multiplies the source variable by, for example, the value 2.55, the following applies:
→ if the source variable value = 2, the operation returns the value 5.1
→ if the source variable value = -2, the operation returns the value -5.1
→ if the source variable value = 2.2356, the operation returns the value 5.70078
→ if the source variable value = -2.2356, the operation returns the value -5.70078
→ if the source variable value = 2,2356, the operation returns the value 5.1
→ if the source variable value = -2,2356, the operation returns the value -5.1
→ if the source variable value is text, the operation returns the value 0
→ if the source variable has no value (the field is empty), the operation returns the value 0
divide – the operation divides the source variable by a specified value. Division by a decimal number is also possible. If the operation divides the source variable by, for example, the value 2.5, the following applies:
→ if the source variable value is 2, the operation returns 0.8
→ if the source variable value is -2, the operation returns -0.8
→ if the source variable value is 2.2356, the operation returns 0.89424
→ if the source variable value is -2.2356, the operation returns -0.89424
→ if the source variable value is 2,2356, the operation returns 0.8
→ if the source variable value is -2,2356, the operation returns -0.8
→ if the source variable value is text, the operation returns 0
→ if the source variable has no value (the field is empty), the operation returns 0
modulo – returns the remainder of the integer division of two numbers. If the operation divides the source variable by, for example, the value 3, then:
→ if the source variable value = 10, the operation returns the value 1
→ if the source variable value = -10, the operation returns the value 2
→ if the source variable value = 11.18, the operation returns the value 2
→ if the source variable value = -11.18, the operation returns the value 1
→ if the source variable value = 11,18, the operation returns the value 2
→ if the source variable value = -11,18, the operation returns the value 1
→ if the source variable value is text, the operation returns the value 0
→ if the source variable has no value (the field is empty), the operation returns the value 0
power – the operation powers the source variable to the power of the specified value. Decimal numbers can also be used as the exponent. If the operation powers the source variable to the power of 2, for example, the following applies:
→ if the source variable value is 2, the operation returns 4
→ if the source variable value is -2, the operation returns 4
→ if the source variable value is 2.2356, the operation returns 4.99790736
→ if the source variable value is -2.2356, the operation returns 4.99790736
→ if the source variable value is 2,2356, the operation returns 4
→ if the source variable value is -2,2356, the operation returns 4
→ if the source variable value is text, the operation returns 0
→ if the source variable has no value (the field is empty), the operation returns 0
DATE & TIME
format date – converts a timestamp (UNIX timestamp – i.e., the number of seconds since 1970) into the desired date (and time) format
Example:
source = 1685439686
date format: transformation output format: e.g., %Y-%m-%d (standard formatting placeholders can be found HERE)
result –> 2023-05-30
parse timestamp – the inverse operation of format date –> converts the source value (date/time) into a UNIX timestamp (number of seconds since 1970)
Example:
source = 2023-05-30 11:41:26
date/time format in the source: %Y-%m-%d %H:%M:%S (standard formatting placeholders can be found HERE)
result –> 1685439686
ARRAY OPERATIONS
array unique – removes duplicate values from an array (list) and returns a new array in which each value appears only once.
- Source – the array (list) of values from which duplicates are to be removed.
- Variable name – the name under which the resulting (cleaned) array is stored for further use.
Example 1:
source = ["apple", "pear", "apple", "banana", "pear"]
→ result = ["apple", "pear", "banana"]
Example 2:
source = [1, 2, 2, 3, 4, 4, 4]
→ result = [1, 2, 3, 4]
Example 3:
source = ["car", "house", "bicycle", "tree"]
→ result = ["car", "house", "bicycle", "tree"] (the array contains no duplicate values, so nothing is removed and the result is the same as the source)
array sort – sorts the elements of an array (list) and returns a new, sorted array.
- Source – the array (list) of values to be sorted
- Variable name – the name under which the resulting array will be stored for future use.
- Sort as
- Text – if the source contains both text and numeric values, text values are sorted first, followed by numbers. Numbers are treated as text; e.g., if the source array contains the values 1, 24, 11, 3, 2, they are sorted as text—i.e., 1, 11, 2, 24, 3 (if sorted in ascending order).
- Numbers – if the source contains both text and numeric values, numeric values are sorted first, followed by text values. Numbers are treated as numbers; e.g., if the source array contains the values 1, 24, 11, 3, 2, they are sorted as numbers—i.e., 1, 2, 3, 11, 24 (if sorted in ascending order).
- Order
- Ascending (from smallest to largest, or A to Z)
- Descending (from largest to smallest, or Z to A)
Example 1 (sort as numbers, order ascending):
source = [5, 2, 8, 1, 4]
→ result = [1, 2, 4, 5, 8]
Example 2 (sort as text, order ascending):
source = ["banana", "bread", "apple", "pear", "lemon", "sugar", "roll", "banana"]
→ result =["apple", "banana", "banana", "bread", "lemon", "pear", "roll", "sugar"]
Example 3:
source: [1,"car",11,5,2,22,"bicycle","toy","leg"19,"toy","bike","zebra",13]
→ result
- text, ascending = ['bicycle','bike','car','leg','toy','toy','zebra',1,11,13,19,2,22,5]
- text, descending = ['zebra','toy','toy','leg','car','bike','bicycle',5,22,2,19,13,11,1]
- numbers, ascending = [1,2,5,11,13,19,22,'bicycle','bike','car','leg','toy','toy','zebra']
- text, descending = [22,19,13,11,5,2,1,'zebra','toy','toy','leg','car','bike','bicycle']
array reverse – reverses the order of elements in an array (list)—meaning the last element becomes the first, the second-to-last becomes the second, and so on—and returns a new array with the reversed order.
- Source – the array (list) of values whose order is to be reversed.
- Variable name – the name under which the resulting (reversed) array is stored for further use.
Example 1:
source = [1, 2, 3, 4, 5]
→ result = [5, 4, 3, 2, 1]
Example 2:
source =["autumn", "spring", "winter", "summer"]
→ result = ["summer", "winter", "spring", "autumn"]
Example 3 (mixed text and numbers, with a repeated element):
source = ["car", 3, "house", "house", 7]
→ result = [7, "house", "house", 3, "car"]
Difference compared to array sort: array sort arranges elements based on their values (e.g., alphabetically or numerically), whereas array reverse does not evaluate the elements' values at all – it simply reverses their order completely, regardless of what the values actually are.
array count – určuje, kolik prvků pole (seznam) obsahuje, a vrací toto číslo jako výsledek
- Source – an array (list) of values
- Variable name – the name under which the result is stored for future use.
Example 1:
source = [4, 9, 2, 7, 5]
→ result = 5
Example 2:
source = ["car", "house", "bike"]
→ result = 3
Example 3 (mix of text and numbers with a repeated element):
source = ["apple", 3, "apple", 8]
→ result = 4
array first – returns the first element of an array (or list), i.e., the one with index (position) 0.
- Source – an array (or list) of values
- Variable name – the name under which the result is stored for future use.
Example 1:
source = [4, 9, 2, 7, 5]
→ result = 4
Example 2:
source = ["car", "house", "bike"]
→ result = car
Example 3 (mix of text and numbers with a repeated element):
source = ["apple", 3, "apple", 8]
→ result = apple
array last – returns the last element of an array (list), i.e., the one with the highest index (the last position in the sequence).
- Source – the array (list) of values from which the last element is to be taken.
- Variable name – the name under which the resulting value (the last element) is stored for further use.
Example 1:
source = [4, 9, 2, 7, 5]
→ result = 5
Example 2:
source = ["car", "house", "bike"]
→ result = bike
Example 3 (mix of text and numbers with a repeated element):
source = ["apple", 3, "apple", 8]
→ result = 8
array slice – extracts (removes) a specific part from an array (list) based on a specified starting position and length, and returns a new, shorter segment of the array.
- Source – the array (list) of values from which the part is to be extracted.
- Variable name – the name under which the resulting value is stored for further use.
- Start – the number of positions to be removed from the array, or... The position at which extraction should begin (a numeric value (an integer, 0 or greater) specifying the position (index) where the array slice starts. As with "split", the first array element has the position (index) 0).
- Length – a numeric value specifying the number of elements to take from the start position for the resulting slice.
Example 1:
source = [10, 20, 30, 40, 50]
start = 1
length = 3
→ result = [20, 30, 40]
Example 2:
source = ["car", "house", "bike", "tree", "lamp"]
start = 0
length = 2
→ result = ["car", "house"]
Example 3:
source = ["spring", "summer", "autumn", "winter"]
start = 2
length = 5
→ result = ["autumn", "winter"] (only two elements remain in the array from position 2, so even though the length requests 5, only the elements that actually exist in the array are returned)
CONDITIONAL TRANSFORMATIONS
default – sets a default value for source variables that are empty. For source variables with any value (even a "space"), the operation returns the source value (if the source variable is a "space," it returns a "space").
- Value – the value resulting from the transformation for empty source variables
if empty/if null – replaces empty values
- Value – the value used to replace empty values
An "empty" field can mean two different things:
- The field is missing entirely (the key is absent; it was never filled in)
- The field exists but is empty (contains "")
–> default – fills in the "value" in both cases
–> if empty – works exactly the same way as default
–> if null – works only when the field does not exist. It leaves an empty field (containing "") as is.
Example:
When an empty value (containing "") is a valid response that you do not want to overwrite—e.g., an "order note" field:
–> the customer wrote a note → you want to know its content
–> the customer left it blank → this is valid information (there is no note) → you want to keep it blank
–> the field was not received at all (broken feed, missing API key) → here, you want to know that data is missing
(A default value would treat the last two cases the same way, making it impossible to distinguish between "the customer wrote nothing" and "the feed is broken".)
DATA TYPES
string – text, a sequence of characters. Always enclosed in quotation marks.
number – a numeric value that can be used in calculations (addition, multiplication, etc.).
boolean – can only take one of two values: true or false.
json (JavaScript Object Notation) – a structured format used to group data together (objects and arrays), composed of strings, numbers, boolean values, and other objects or arrays.
to string – converts the source variable's value into a text string
to number – converts the source variable into a number
→ if the source variable's value is 2,2356, the operation returns the value 2
→ if the source variable's value is -2,2356, the operation returns the value -2
→ if the source variable's value is text, the operation returns the value 0
→ if the source variable has no value (the field is empty), the operation returns the value 0
to boolean – convert to boolean values:
–> if the array is empty, returns 0
–> if the array is NOT empty, returns 1
to json – converts a source value (a variable, an array, or even an entire object) into text in JSON format – a standardized text representation that is easy to transmit or process further.
Example 1 (array):
source value = ["apple", "pear", "banana"]
→ result = ["apple","pear","banana"] (as text)
Example 2 (simple value):
source value = 42
→ result = 42 (as text)
Example 3 (object with keys and values):
source value = name = "Jan", age = 30
→ result = {"name":"Jan","age":30} (as text)
Difference compared to to string: to string converts only a single value into text, whereas to json can serialize even complex structures (arrays, objects with multiple keys and values) into a single, precisely defined text format that preserves the structure of the original data.
from json – deserializes from JSON
source value = text containing a valid JSON string.
→ result = converts the text string in JSON format back to a real data structure (object/array) that can be further worked with.
Example:
source value = '{"name":"Jan","age":30}' → object { name: "Jan", age: 30 }
→ result = a structure where name = "Jan" and age = 30 (can then be accessed, e.g., as variable_name.age)
to xml/from xml – similar to to JSON/from JSON, with the difference that these transformations work with the XML format.
GENERATORS
generate uuid – generates a UUID (Universally Unique Identifier) in version 1, based on the timestamp and the server's MAC address, in the format:
XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
where X represents letters and digits, e.g.:
550e8400-e29b-11d4-a716-446655440000
→ 32 hex characters separated by hyphens into groups of 8-4-4-4-12, i.e., a total of 36 characters including the hyphens.
generate random string – generates a random text string
- Length – the number of characters in the generated string (the maximum value is 100; if you enter a higher value, the string will be automatically truncated to 100 characters)
- Charset – here you can specify the set of characters to be used for generating the text string:
- if you enter, for example, ABC123, a random text string of the specified length will be generated using only these characters (in various orders; characters may, of course, repeat)
- if you leave the field blank, the default setting is used, consisting of uppercase and lowercase letters (without diacritics) and digits—i.e., A-Z, a-z, and 0-9.
generate random number – generates a random integer within a specified range. Values from 0 to 1015 can be entered (negative values are not supported).
- Min – minimum value
- Max – maximum value
Sends a selected email campaign. Campaigns sent from the journey have to have the “journey mode” enabled in the advanced campaign settings..
A campaign with journey mode set cannot be sent other than from the journey.
Before the sending itself the recipient has to be saved/updated with the data from the journey, and the recipient list has to be selected. If the recipient should stay in the same list from which it came to the journey, the first item „* Recipient origin“ has to be selected.
SMS
Sends a selected SMS campaign. Campaigns sent from the journey have to have the “journey mode” enabled in the advanced campaign settings.
Before the sending itself the recipient has to be saved/updated with the data from the journey, and the recipient list has to be selected. If the recipient should stay in the same list from which it came to the journey, the first item „* Recipient origin“ has to be selected.
It has several modes, which are selectable from the Action dropdown:
Insert —> recipients which reach this node will be inserted into selected mailing list.
Move —> in this mode the recipient will be moved from one mailing list to another.
If a „* Recipient origin“ is selected, the recipient will be moved from the list in which they were currently in, to the selected list.
Delete —> recipient will be deleted from the selected mailing list.
If a * Recipient origin“ is selected, the recipient will be deleted from the list in which they were currently in.
Unsubscribe —> recipient will be unsubscribed.

