ROTATE function

ROTATE moves the first element in an array to the back of the array. Multiple rotations and reverse rotations can be performed by using the steps argument.

Automated credentials for Tines API keys

A nice quality of life improvement to creating Tines API keys. When you are setting up a Tines API key, you can choose to save the API key as a credential when you create it. The credential saves to your draft credentials and can be moved to a team at any time.

Brandon Arolick

Additional parameters for group actions

When you create action groups, you could only pass data that was an object, plaintext, or checkbox. This meant, to pass a formula or number, you needed to take additional steps.

Now, we've expanded this to include formulas and numbers to simplify how you work with group actions.

Izabela Kuźniar

Action running indicators

Previously, you could only see when an action finished running by the event indicator on the action card. Now, when an action is running, there is a loading symbol on the action card. This allows you to easily see which actions are currently running.

SET_KEY function

SET_KEY adds a new key/value pair in an object or updates the value of an existing key. It can be performed on nested objects by providing a dot-separated path to the key.

NUMBER function works with negative numbers

The NUMBER function converts text representing numbers into integers (whole numbers, like 15) and floats (decimal numbers, like 1.5). Before it only took representations of positive numbers, but now it also works with negative numbers.

New array functions: PUSH, INSERT, and DELETE

We've added three new functions for adding and removing items from arrays.

  • PUSH adds one or more items to the end of an array.

  • INSERT adds an item to an array at a specific index.

  • DELETE removes an item from an array at a specific index.


RANDOM_STRING returns a string of random characters. The contents of the string are determined by the mode being used. There are 5 modes.

  • Alphanumeric mode (default): all uppercase and lowercase letters in the Latin alphabet and all digits are used (a-z, A-Z and 0-9)

  • Letters mode: all uppercase and lowercase letters in the Latin alphabet are used (a-z and A-Z)

  • Numbers mode: all digits are used (0-9)

  • Hex mode: all hexadecimal characters are used (0-9 and a-f)

  • Custom mode: a user-provided string is used as the character-set. In addition to letters and digits, this string can include punctuation (!, &, -, etc.), emojis (😊, 👍, 👀, etc.), and characters from non-Latin alphabets (И, 卵, 金, ز, etc.).

FILTER function fully mirrors REJECT

The FILTER function now works with objects and arrays.

  • Objects: it filters based on the values of each key-value pair within the object.

  • Arrays: it's possible to pass in an array of values to match against instead of a lambda function

This makes FILTER a perfect mirror of the REJECT function. FILTER includes matches while REJECT excludes matches.

Tolerance for deduplicating events

Historically, deduplication functioned with a tolerance of one. This meant the second time a same value event is received, it would be treated as a duplicate.

Now, you can define the tolerance in the build pane using TOLERANCE. With TOLERANCE, you can specify how many times an event can run before it is considered a duplicate.

A great use of this is for rate limiting. Combining TOLERANCE with PERIOD, you can define when to count an event as duplicate within a set time period. For example, 5 times within 10 seconds.

Brandon Arolick

New story API settings pane

Now, you can easily configure a story with webhook responses through a dedicated API settings section on the build pane. This removes the need to enable send to story. Simply enable the webhook API responses switch in the story build pane.

Additionally, we introduced the ability to specify options for multiple API entry hooks.

All of this makes building an API in Tines more intuitive.

Higher TTL on HTTP credentials

Earlier this year we introduced time-to-live (TTL) on HTTP credentials to reduce the number of requests made to a third party service. We introduced TTL with a 2 minute lifespan.

Today, we extended this to store a credential for up to 24 hours. Meaning instead of refreshing a token 720 times per day, you can refresh it once.

This further decreases your account usage with third-party services and improves overall reliability.

We introduced a secondary path for trigger actions, no match. This secondary path will trigger when the events do not match the trigger criteria.

This makes managing powerful If/Else or Match/No match flows far more intuitive by removing the need to manually create duplicate inverse trigger actions.

Review the docs to learn more.


These three new functions compare the content of two arrays.

  • DIFFERENCE: Returns an array of items that appear in the first array but not in the second array

  • INTERSECTION: Returns an array of items that appear in both arrays

  • UNION: Returns an array of items that appear in either array.

The contents of the returned arrays are unique (zero duplicates) and retain their original order, with the first array's content coming first.

APPEND and CONCAT functions accept multiple arguments

Now the APPEND function, which adds strings together, and the CONCAT function, which adds arrays together, can take more than two arguments.

This means that instead of writing:

APPEND("a", APPEND("b", "c"))
CONCAT([1, 2], CONCAT([3, 4], [5, 6])

You can now write:

APPEND("a", "b", "c")
CONCAT([1, 2], [3, 4], [5, 6])

Read the docs for multiple examples of applying these functions: APPEND and CONCAT

The OBJECTS_TO_CSV function

Introducing touch support for Tines

Tines now supports touch controls platform-wide. This enables you to build, modify, and interact with your workflows on the go from any touchscreen device.

All features work as expected following best practices such as: connect or drag actions with your finger, pinch to zoom, undo with a two-finger tap, redo with a three-finger tap, et cetera.

This makes it easier to manage and share your Tines workflows from anywhere.

Auto-submitting pages

Now, you can have your pages automatically submit after a specified duration, or even instantly when they render.

Use this capability for progressive loading experiences, or combine with actions in a loop to poll a remote data resource until it's ready.

Quickly select multiple events

A small quality-of-life improvement: now, by holding the shift key when clicking checkboxes, you can select a range of events to re-emit or delete.

RSA functions for formulas

We added three new formulas to more easily incorporate asymmetric cryptography into your workflows.

  • GENERATE_RSA_KEYS: This formula generates a pair of public and private keys using the RSA encryption algorithm. You can choose a key size of 2048 or 4096, with the default being 2048.

  • RSA_DECRYPT: This formula decrypts binary data that has been encrypted with a public key. You simply provide the encrypted data and the public key, and the formula returns the decrypted message.

  • RSA_ENCRYPT: This formula encrypts plain message using a private key. You provide the plain message and the private key, and the formula returns the encrypted message. After using our RSA_ENCRYPT formula to encrypt your data, you will receive a binary output. This output needs to be converted to base64 format before it can be transmitted or stored. Base64 encoding ensures that the data is transmitted or stored in a text format that can be read by a wide range of systems.

We hope you find these helpful, and we welcome any feedback!

Can Eldem

Custom domains for webhooks

For dedicated stack cloud accounts, the ability to setup your own domain for Tines links now also includes webhook URLs.

If you already configured your custom domain for pages and prompts, this will carry over to your webhook URLs.

To configure a custom domain, reach out to our support team or your customer success manager who will walk you through the process.

Can Eldem

Content negotiation in webhook response

Request the content type for webhook response data when it's enabled on a story.

Using the HTTP accept header, you can specify between JSON, CSV, plaintext, and file handling. Find out more in our docs.


Rich text in pages with Markdown

Our paragraph page element has been renamed to rich text, and now supports Markdown. Format your text with italics and boldface, add links and lists, and much more.

Anonymize page submissions

Now, you can anonymize page submissions. Turning on the switch prevents storing page header data (i.e., email address, IP address, user agent). Anonymizing a page can encourage people to submit information, such as feedback or requests, in situations where it's more comfortable doing so anonymously.

The feature is only available if the header data is not referenced in downstream actions.

Team story allocation

Tenant owners with multiple teams can now easily manage story capacity by allocating story limits by team. To do this, navigate to the top menu and choose Team story allocation.

New look for groups and action templates

We've rolled out a new look for groups and templates. Now, you can easily spot group actions or when an action is created from a template.

And, you can customize groups with icons, colors, logos, and images!

Story tags

You can now tag your Stories, making them easy to search for and find.

Command bar improvements

Following some feedback, users can now refine their searches within the story or team they're viewing. These filters can be typed or selected from the command bar. We also added shortcut hints to summon the command bar for increased visibility.

Search events for text

For any action on the diagram, you can now rapidly search and filter its recent events – up to 100 – for a fragment of text. We previously only supported searching by event ID, which continues to work also.

▲  Search events by text or ID


HTTP Credential TTL

We've added the ability to set a TTL (time-to-live) on HTTP credentials, up to a maximum of 2 minutes. This feature enables actions to store the token that is retrieved, thereby avoiding the need to make multiple requests.

HTTP credential TTL field

HEX_PARSE and TO_HEX functions

Emit event on HTTP request action retry failures

Previously, when an HTTP request failed after exhausting all retry attempts, we logged the action and stopped the story run.

Now, in addition to logging the action, an error will be emitted to enable downstream story actions to handle the error.

YAML_PARSE, TO_YAML and TO_XML functions

We've added 3 new functions to Tines formula library

  1. YAML_PARSE: Parse YAML text into an object

  2. TO_YAML: Convert an object into YAML text

  3. TO_XML: Convert an object into XML text

Custom domains for pages and prompts

For dedicated stack cloud accounts, you now have the ability to set up your own domain for your Tines instance's public links, such as pages and prompts.

This means that you can now use your own domain name to personalize your Tines instance. With this feature, you will be able to create recognizable, trusted pages that showcase your brand more effectively.

To set up a custom domain, please contact our customer support team or your customer success manager who will guide you through the process. Once the domain setup is completed, you will be able to see your domain name in the Manage dropdown menu.

Can Eldem

Respond to web requests in Send to Story

Previously, all webhook actions would immediately respond to requests, before kicking off downstream actions or producing outcomes.

Now, for Stories enabled with Send to Story, you can optionally wait until the workflow has finished running, before return data from the exit action as a HTTP response. This allows you to leverage and integrate your Tines stories in more places across the web, by exposing responsive HTTP APIs.

To turn on, use the "Return exit action data" checkbox in Send to Story configuration. Read more about configuration and limits in our Send to Story docs.

Double click Send to Story action to open

Now, for quicker access, you can double click any Send to Story action to open the Story it calls in a new tab.


GZIP and GUNZIP functions

Just-in-time user provisioning

For tenants using SSO, we now support optional just-in-time provisioning of user accounts (as well as team memberships, roles, and tenant owner status). Once enabled, users who are present in specific groups in your remote SAML or OIDC identity provider can sign into your tenant without needing to be invited first. Read more and see setup information in the docs.

Brandon Arolick

Logical operators in formulas

The logical operators AND and OR have been added to the formulas language. This will allow for writing more readable and expressive formulas:

// old way
IF(AND(foo, bar), "foo and bar were true")
IF(OR(foo, bar), "either foo or bar were true")

// new way
IF(foo AND bar, "foo and bar were true")
IF(foo OR bar, "either foo or bar were true")

The operators may also be written as && and || for those more used to this style from other languages.

These operators work in a manner similar to python, javascript and ruby so you can use them to quickly provide a fallback in cases where a value may be null:

// old way
DEFAULT(maybe_null_value, "value if null")

// new way
maybe_null_value || "value if null"

Formulas in keys

We've added the ability to use formulas in keys from within the builder.

Custom field validation

We’ve added the ability to add a custom validation with the Regular Expression (ECMA flavour) to our fields on Pages: short textlong textemailurldate and number.

From now it is possible to customise the field by setting the RegEx, connecting it with the Default Value and if needed the Helper Text.

Possible use cases:

  • Short text/long text: do not use numbers or any special characters, RegEx example: ^[A-Za-z\\s]*$

  • Email: accept only company email, RegEx example: (.*)$

  • Url: accept only https urls, RegEx example: ^https(.*)

  • Date: accept dates only between 1900-2999, RegEx example: ^(?:0[1-9]|[12]\d|3[01])([\/.-])(?:0[1-9]|1[012])\1(?:19|20)\d\d$

  • Number: accept only numbers from 1 to 5, RegEx example: ^[1-5]+$

Array and Object literals

You can now use array and object literal syntax in formulas to create objects and array.

// old way
ARRAY(1, 2, 3)

// new way
[1, 2, 3]

// old way
OBJECT("key1", "value1", "key2", "value2")

// new way
{ key1: "value1", key2: "value2" }

You can omit quotes around object keys unless they are needed (e.g. if using a key with a space in it)

Draggable elements in the page editor

Edit, sort, and delete page elements by selecting them directly on the page in the editor. And add new elements by dragging them from the left panel and onto the page.

Reusable themes for pages

Tines offers a variety of ways to customise the look of your pages. Now it's easier than ever to share visual preferences between your pages with themes.

Themes store the logo, colour, and width settings for a page so they can be applied to other pages. You can create a new theme by opening an existing page and clicking on the theme dropdown. Then you can apply that theme by navigating to another page and selecting that theme from the same dropdown.

You can also apply themes to multiple pages in the same story through the action bar.

Command bar

We've tidied up the search experience and gave it a fresh coat of paint. You'll be able to summon the command bar via ⌘K or Ctrl+K from anywhere in the tenant and take advantage of the quick actions we've added.

Page loading message

When using Pages in "Move to next page" mode, users can now set the message displayed when navigating to the next page. This message is shown below the loading spinner after the page has been submitted.

Page width configuration

We’ve added the ability for you to customise your page even further by introducing a width mode. Toggle between Small and Large to find what works best for you.

Story Level Monitoring

You can now configure monitoring for your entire Story and customise individual actions right from the Story panel.

Export Story as image

We've added the ability to export a Story as an image. This should make it easier to share screenshots of you Stories with your teams or include them in reports.

New INDEX_OF Function

We've added a new function that returns the first index at which a given element or substring can be found in an array or string, respectively. The INDEX_OF function returns NULL if the specified element is not present.

For more information, see our documentation.

API endpoint for clearing action memory

An action's memory can now be cleared via a Tines API endpoint. More information on how to utilize this endpoint can be found in the Tines API documentation.

Brandon Arolick

Easier event data navigation

You can now expand an entire sub-tree of event data by holding down the Shift ⇧ key when expanding data in the events console. You can also focus by closing all other trees using the Option ⌥ or Alt ⎇ key and you can use both together.

Also, when navigating between actions with similar event structures, the events console will remember what paths have been expanded and carry that over to other actions.

Configurable session timeouts

Tines tenant owners can now choose how long Tines should wait before considering a user's session inactive and logging them out.

With this feature now available, we will reduce the default session timeout on newly-created tenants from 1 month to 1 day in the coming days.

Live Events in Test Stories

For stories that have change control enabled, you can now use the Live events “overlay” that allows you to overlay all the events from a corresponding Live environment on your Test environment.

You can use the Live events in the builder for auto-complete and inspecting the data. You can view Live events in the event console and send the Live events to the corresponding action in your Test environment.

'Editor' role for teams

We've introduced a new Editor team role to Tines. This role gives the user read and write permissions to most objects on the team, allowing them to build and maintain Stories, without full management control of the team.

Specifically, editors:

  • can create and edit stories, resources, and credentials

  • cannot perform any destructive actions, manage team members, or push changes to change controlled Stories live

See full information on the team roles we support in our docs.

Time-based implode

Events can now be imploded based on time. By adding the seconds option to an implode, you can now specify the amount of time that an implode action should collect events for before emitting an event. You can read more information on time based implode in our docs.

Can Eldem
Brandon Arolick

Keyboard shortcuts directory

Pressing ⇧ + K in the story builder will now show you the list of available keyboard shortcuts.

You can also opt-in to get helpful reminders about shortcut keys whenever you do something with the mouse that you could possible do with the keyboard.

The keyboard shortcuts directory is also available from the Help and support menu.

Action descriptions

Similar to the story descriptions, by adding “descriptions” to actions, we can describe them now!

Audit logs user interface

Back in June we added the audit logs API, offering insights into the changes being made on your tenants. We've now added an (admin-only) UI to make it easier than ever to observe these audit logs. Simply click the link in the main menu to get started.

Introducing pages

We first added forms to Tines way back in the summer of 2020. Since then, they've become one of the most popular parts of the product – allowing end-users to kick off an automated workflow with structured input.

More recently, we've been aggressively investing in improving forms, based on your feedback and our own intuition:

  • Back in September, we made it possible to add multiple forms to a Story, and began visually representing them on the diagram.

  • Then in October, we began supporting sequences of forms, downstream of actions and other forms, bringing a new level of flexibility.

  • Finally, just last month, we started allowing parts of forms to output dynamic, upstream information from actions.

Forms → pages 

Now, we've added the biggest update yet, and the time has finally come to rename these objects to better reflect their roles. So, (re)introducing pages!

With today's release, you can now:

  • Style and brand pages with your company logo and color scheme

  • Add new rich page elements like headings, paragraphs, images, and dividers

  • Use formulas everywhere, whether that's providing a default value to a form input, or powering an image or text in a paragraph.

We’ll be sharing much more soon – including adding plenty of examples of what you can now do with pages to our Story library.

What about existing forms? 

Any existing forms have been automatically converted to pages, without any differences for your end users or breaking changes.

You can also use all of the new features on your existing forms, once you're ready to try them out.

You can read more about pages in our docs.

We can't wait to see what you build!

Schedule with cron expressions

Tines actions can be scheduled to run periodically, with helpful patterns for cases like "every day at 9am" or "once a week". Now, for situations where you need more precise control over scheduling, our UI now additionally supports using a cron expression.


Levenshtein distance is a classic way to compare the similarity of two strings, and it's now available in Tines.

Although this a generally useful utility when working with text, it can be particularly handy in security contexts, for example when correlating similar-but-different strings or IOCs between different contexts.

For more information, see our documentation.

Explicit timezones in scheduling

Now, you can explicitly set a time zone when scheduling actions, for complete control.

Additionally, we tell you precisely when the next run will occur, in UTC, for consistency with timestamps throughout the product.

See resources, credentials, and send-to-stories shared with your team

Now, you can easily discover objects that other teams have made available to your team in Tines – resources, credentials, and send-to-stories.

In each case, you’ll find a new “shared with your team” section that lists them all. From there, you can copy a formulas expression to use the object in your stories.

‘Viewer’ role for teams

Now, you can invite team members with read-only permissions. This is useful for situations where a colleague or auditor needs oversight or understanding of an automated workflow, without the ability to alter it – or even accidentally break it.

Viewers have read-only access to most objects throughout the team, including Stories, actions, and events, but can't create or edit any objects whatsoever.

Simplified team user management page

We have redesigned the team user management page and moved it into a modal for easy access without having to navigate away from your current page.

Change Control push messages

To make the change history of your important Stories easier to understand you can now add custom messages when you push changes from your test environment to your live environment.

Default values for form fields

Now, you can specify default values for your form fields to give your users a starting point. For example, use a default value to provide a template for the type of input you’d like.

Dynamic form field options

Now, you can power the list of options a form presents using formula expressions. This means you can provide a dynamic list of options for your users to choose from whenever required. For example, you could fetch the latest options from an external API, or populate with a list stored in a resource.

Surface all story resources & credentials

All credentials and resources contained within a story's groups are now included in the list of credentials and resources on the story panel.

This will help easily identify missing credentials or resources and simplify their replacement throughout a story.

New REJECT function

New PARSE_URL function

Credential icons

Now we provide a set of icons for common vendors, that you can assign to your credentials.

When creating a credential, we’ll suggest one automatically when there’s a name match:

And then we’ll surface this icon throughout the product, for example on a Story:

Are we missing an icon that you’d like to see? Let us know!

Smoother login for self-hosted tenants

If you independently self-host your Tines tenant, our identity service at couldn't previously list your tenant. This meant that importing from our Story library was awkward, among other things.

Now, you can manually associate your self-hosted tenant (or even a missing Tines-hosted tenant) to the list by using the new button:

Head over to to associate your tenant.