Formulas
	
	
	In an  you can apply Formulas to extract, format or process your data as they flow in the workflow. It’s  as same as working with a spreadsheet software such as MS Excel, where you use formulas (built-in functions) like sum(…), power(…), concatenate(…) …etc.   In the same way, you can use formulas in  that performs following functionalities.
- Concatenate first & last name to create full name. e.g. {{ @contact(#firstName, #lastName) }}. Here #firstName&#lastNameare two macros that resolve tofirstName&lastNamevalues that comes from the previous step of your ICApp each time it’s executed.
- When using emailas an action, you can add date & time to your email content to specifydate(),time()functions.
Formulas must start with a @ mark & they can contain zero or more parameters.
String Functions
| Function | Description | 
| to_lower( s ) | Convert a string to lower case | 
| to_upper( s ) | Convert a string to upper case | 
| to_caps( s ) | Capitalize a string | 
| split( s, regex) | Split the string around the matches. e.g. {{@split( “Freeman”, “e” )[0]}} -> “Fr” | 
| trim( s ) | Remove leading and trailing white spaces from a string | 
| to_str( s ) | Convert Numbers, JSON, Boolean values to their string form | 
| is_empty( s ) | Check if a string is empty | 
| length( s ) | Returns length of the string | 
| compare( s1, s2) | Compares two strings s1 & s2 lexicographically (alphabetical order of the dictionary). returns 0 => if equals, 1 => if s1 > s2, -1 => if s1 < s2 | 
| equals( s1, s2) | Compares if s1 & s2 are exactly matches. Match is case sensitive. | 
| concat( s1, s2) | Concatenate two strings | 
| contains( s, search) | Check if the string contains the specified ‘search’ strings | 
| matches( s, regex) | Check if the string matches the given regex | 
| mstart( s, prefix) | Check if a string starts with the given prefix | 
| mend( s, suffix) | Check if a string ends with the given suffix | 
| substr( s, start, end) | Get a substring from start index to end index, note that first character of the string is at 0th index. | 
| extract( s, regex) | Extract all matching strings, for a given regex, in the string given as first argument to the function and produce the results as a json array | 
| replace( s, what, rep) | Replace ALL the occurrences of what found in the given string with the rep string | 
| replace_1st( s, what, rep) | Replace First occurrence of what found in the given string with the rep string | 
| replace_rx( s, regex, rep) | Replace ALL the occurrences that matches with the given regex, found in the given string, with the rep string | 
Date Functions
All date & time functions (unless you specify a timezone) uses UTC to avoid any regional differences.
| Function | Description | 
| date() | Today’s date as at UTC | 
| time() | Time as at UTC | 
| time24h() | Time as at UTC in 24h format | 
| datetime() | Date & time as at UTC | 
| timestamp() | Timestamp in number of seconds from the epoch of 1970-01-01T00:00:00Z | 
| date_at( tz ) | Today’s date at a given timezone | 
| time_at( tz ) | Time at a given timezone | 
| datetime_at( tz ) | Date & time at a given timezone | 
| to_datetime( s ) | Convert ISO 8601 date time string to a format suitable for processing, e.g. 2022-02-03T12:15:30+01:00 | 
| ex_date( s ) | Extract date from ISO 8601 format string. e.g. 2022-02-03T12:15:30+01:00 => 2022-02-03 | 
| ex_time( s ) | Extract time from ISO 8601 format string. e.g. 2022-02-03T12:15:30+01:00 => 12:15:30 | 
Math Functions
| Function | Description | 
| abs( n ) | Get absolute value of a Number | 
| ceiling( n ) | Get the least integer number greater than or equal to the given number | 
| floor( n ) | Get the greatest integer less than or equal to the given number | 
| max( x, y) | Get the greater of the two values x & y | 
| min( x, y) | Get the smallest of the two values x & y | 
| pow( x, y) | Get x value raised to the power of y value | 
| round( n ) | Get rounding off value for the given argument | 
| sum( x, y ) | Get summation of two x & y | 
| to_num( s ) | Convert string value to it’s number format number | 
JSON Functions
| Function | Description | 
| is_empty( ) | Check if the JSON is empty | 
| length( ) | Returns length of the string | 
| merge( , ) | Merge two or more JSON objects or arrays together. | 
| to_json( s ) | Convert JSON string to a it’s object form - i.e. parse e.g. @to_json("{"a": "b"}") | 
| setvalue( obj, key, value) | Set a value of a JSON attribute. | 
Other Functions
| Function | Description | 
| uuid() | Generate random UUID. | 
| random_id() | Generate random ID | 
| random_str(10) | Generate random string of a given length | 
| enc_base64( ) | Encode a string with Base 64 | 
| dec_base64( ) | Decode a Base 64 string to it’s orignal string | 
| enc_url( str ) | Encode a given URL fragment to a URL safe form | 
| dec_url( ) | Decode a encoded URL into orinal string | 
| md5( ) | Calculate MD5 of a string | 
| sha256( ) | Create SHA256 hash of a string | 
| sha512( ) | Create SHA512 hash of a string | 
Regular Expressions Reference
x       The character x
xy      The character x followed by y and so on...
.       Match any single character except newline. When in [] class (see below) it means period.
-       Range in a Character class e.g. [a-z] or [0-9]
[]      Character class. e.g.
            [abc]       a, b, or c (simple class)
            [^abc]      Any character except a, b, or c (negation)
            [a-zA-Z]    a through z or A through Z, inclusive (range)
            [0-9]       0 through 9, inclusive (range)
\       Escape the next character.  e.g. \\ The backslash character
^       The beginning of a line. 
$       The end of a line. 
|       Alternation e.g. x|y  means either x or y.
()      Grouping 
*       0 or more times
+       1 or more times
?       0 or 1 times
{n}     exactly n number of times
{n,}    at least n times
{n,m}   at least n but not more than m times
\d	A digit: [0-9]
\D	A non-digit: [^0-9]
\s	A whitespace character: [\t\n\f\r]
\S	A non-whitespace character: [^\s]
\w	A word character: [a-zA-Z_0-9]
\W	A non-word character: [^\w]
	
  Last modified July 19, 2025