Workflow Reference Guide

Workflow Reference Guide

Business Enterprise


This article provides a comprehensive breakdown of all of the triggers, activities, and flow control structures available within Workflow Studio. If you’re just getting started with Workflow Studio, consider checking out this article first: https://gruntify.atlassian.net/wiki/spaces/GRUNTIFY/pages/828473345.

Jump to a section on this page:

Triggers

Asset

Asset Created
A new asset was created with the specified Form.

Asset Updated
An existing asset created with the specified Form was updated. You can select one or more fields to watch for changes.

Job

Job Created
A new Job was created with the specified Job Template.

Job Updated
An existing Job created with the specified Job Template was updated (including Status changes). You can select one or more fields to watch for changes.

Job Status Changed
An existing Job created with the specified Job Template progressed to a new Status. You can select one or more Statuses to trigger the Workflow.

Request

Request Created
A new Request was created with the specified Form.

Request Updated
An existing Request created with the specified Form was updated (including Status changes). You can select one or more fields to watch for changes.

Request Status Changed
An existing Request created with the specified Form progressed to a new Status. You can select one or more Statuses to trigger the Workflow.

Manual

Manual Trigger
Workflows with this trigger won’t run automatically. You can run them by selecting ‘Run Workflow’ from the action menu on the manager page.

delay.png
Schedule / Timer

 

Schedule/Timer Trigger
Timer triggers will automatically run your workflow at set intervals. You can choose between Hourly, Daily, Weekly, Monthly, or Yearly execution frequencies.

For testing purposes, timer triggers allow you to manually run the workflow with the ‘Run Workflow’ button that Manual workflows also have.

Tip! Advanced users can set a custom Cron expression for the schedule by opening the ‘Input Data’ tab, selecting the type dropdown (T icon), and selecting ‘Change input type’. The free text field now accepts a custom Cron expression.

The timer trigger operates based on your workspace timezone. This is automatically set when your workspace is first created based on the timezone of the original Primary Owner. If you need help discovering or changing your workspace timezone, contact our support team.

globe.png
HTTP

 

HTTP Trigger
HTTP Triggers allow you to define workflows which run through incoming webhooks. Essentially, a third-party app can send us a HTTP request to start a workflow.

To use this trigger, use will need to set a ‘slug’ (human readable ID) of the trigger, and this will define the URL which the third party app must send a POST request to (ex. https://workflow.gruntify.com/v4.3/workspaces/my_ws/events/my-workflow-trigger)

Requests to this URL must be signed in with a valid Gruntify account for that workspace. To get an authentication token, use this endpoint on the Gruntify API.

Optionally, you can specify an idempotency token as well as dynamic parameters to send to the workflow as outputs of the trigger in the request body. See an example below:

{ "idempotencyToken": "unique-token-12345", "parameters": { "sourceEventId": "12345", "invokingUser": "First Name Last Name" } }

Activities

Asset Activities

Activity

Description

Inputs

Outputs

Activity

Description

Inputs

Outputs

Create Asset

Create a new Asset

Asset Form & details

Asset Reference

Update Asset

Update an existing Asset

Asset Reference & Form data

None

Generate Link to Asset

Generate a URL to an existing Asset

Asset Reference

URL

Read Asset

Read the details of an existing Asset

Asset Reference

Asset Form & details

Read Asset User Details

Read the details of users associated with an existing Asset

Asset Reference

Asset creator & last modifying user details

Comment on Asset

Adds a comment to an asset

Asset Reference & Comment text

None

Activate Asset

Activates an existing inactive asset

Asset Reference

None

Deactivate Asset

Deactivates an existing active asset

Asset Reference

None

Search Assets

Searches for assets in the workspace given one or more filters

Asset Filters & maximum results

Array of Asset summaries (no form data)

Job Activities

Activity

Description

Inputs

Outputs

Activity

Description

Inputs

Outputs

Create Job

Create a new Job

Job Template & details

Job Reference

Update Job Pre-Work Form Data

Update the Pre-Work Form data of an existing Job

The Job Form must have a Pre-Work Form configured, and the Job must be in the Draft, Unassigned, Queued, Rejected, In Progress, or Pending Review Status

Job Reference & Form data

None

Update Job Work Form Data

Update the Work Form data of an existing job

The Job must be in the In Progress or Pending Review Status

Job Reference & Form data

None

Read Job User Details

Read the details of users associated with an existing Job

Job Reference

Job creator, last modifying user, and checked in user (if checked in) details

Generate Link to Job

Generate a URL to an existing Job

Job Reference

URL

Perform Job

Create a new Job and pause the Workflow until the Job has been completed

Job Template & details

Job Reference

Read Job

Read the details of an existing Job

Job Reference

Job Form(s) & details

Cancel Job

Cancel an existing Job

The Job must not be in the Completed or Cancelled Status

Job Reference & cancellation reason

None

Pass Review

Pass the review of an existing Job, moving it to Completed

The Job must be in the Pending Review Status

Job Reference

None

Fail Review

Fail the review of an existing Job, moving it back to Queued

The Job must be in the Pending Review Status

Job Reference

None

Comment on Job

Adds a comment to a Job

Job Reference & Comment text

None

Reassign existing Job

Reassign an Existing Job to a different team, or change to unassigned/automate assignment

Job Reference, Allocation type, and Allocated team (only for team assignment)

None

Search Jobs

Searches for jobs in the workspace given one or more filters

Job Filters & maximum results

Array of Job summaries (no form data)

Job Status Changed (Event)

Pause the Workflow until an existing Job has entered a specific Status

Job Reference & Job Status(es)

Job Reference & Status

Request Activities

Activity

Description

Inputs

Outputs

Activity

Description

Inputs

Outputs

Create Request

Create a new Request

Request Form & details

Request Reference

Read Request

Read the details of an existing Request

Request Reference

Request Form & details

Read Request User Details

Read the details of users associated with an existing Request

Request Reference

Request creator, last modifying user, and ‘submitted on behalf of’ details

Generate Link to Request

Generate a URL to an existing Request

Request Reference

URL

Accept Request

Set the Status of an existing Request to Accepted

The Request must be in the Submitted Status

Request Reference

None

Reject Request

Set the Status of an existing Request to Rejected

The Request must be in the Submitted Status

Request Reference

None

Update Request

Update an existing Request

Request Reference & Form data

None

Assign Request

Add or change the assignee of an existing Request

Request Reference, Assignee User Reference, and Notes

None

Comment on Request

Adds a comment to a Request

Request Reference & Comment text

None

Search Requests

Searches for requests in the workspace given one or more filters

Request Filters & maximum results

Array of Request summaries (no form data)

Request Status Changed (Event)

Pause the Workflow until an existing Request has entered a specific Status

Request Reference & Request Status(es)

Request Reference & Status

globe-20250820-023302.png HTTP Activity

This activity allows you to seamlessly send data from Gruntify to another application via a HTTP request. This event-driven HTTP request model is often referred to as ‘web hooks’ and removes the need for external apps to regularly poll Gruntify for updates to your Requests, Jobs, or Assets.

Security Measures

There are inherent risks that arise when we enable you to communicate directly from Gruntify to another app or service. For security reasons, protections have been put in place to protect you and your data when using HTTP tasks. See a complete list of protections below.

  1. HTTP requests are rate limited to at most one every 5 seconds per workspace

  2. Only HTTPS URLs are allowed

  3. All HTTP requests will include headers which identify your workspace and workflow

  4. Certain headers are not allowed to be overridden (such as Content-Type, User-Agent, X-Forwarded-For, etc.)

  5. Response content will not be returned as an output except under the following circumstances:

    1. The HTTP request fails and “Allow failed status codes or timeout” is on

    2. We have manually verified your workflow as non-malicious and enabled response returns from our end (raise a support ticket to initiate this process)

Activity

Description

Inputs

Outputs

Activity

Description

Inputs

Outputs

Send HTTP GET Request

Sends a HTTP GET request to the specified URL with any necessary headers attached.

Endpoint URL, Headers & Failure tolerance

Response (if permitted)

Send HTTP POST Request

Sends a HTTP POST request to the specified URL with any necessary headers attached ad an optional body.

Request body must be stringified JSON data. You can achieve this by using JSON.stringify() in an advanced expression

Endpoint URL, Request body, Headers & Failure tolerance

Response (if permitted)

Email Activity

This activity allows you to send an email message or export file to one or more email addresses. The recipients of the email do not need to be users in your workspace.

Send Email Task

The send email task allows you to send a regular email message from Gruntify. In addition to sending text information, you can optionally attach a URL to create an action button at the bottom of the email.

To include parameters in the Subject & Body of the email, you can use Handlebars syntax. For example: {{ request1234.form.controlA }} would be transformed into the text content of the control with ID ‘controlA’.

Within the Body of the email, you can use basic HTML to achieve text formatting (bold, italics, lists, headings, etc.), but this is optional. We will automatically infer some formatting for you (such as gaps between text blocks) so that you can write plain text for simple messages. Please note that any non-text HTML (including images) will be stripped before it is sent to the recipient.

To protect recipients from spam, emails sent from Workflows will include an ‘Unsubscribe’ button. For more information, see this article: https://gruntify.atlassian.net/wiki/spaces/GRUNTIFY/pages/1328021514

Inputs

  • One or more recipient email addresses

  • Subject line

  • Body text

  • Action button label (optional)

  • Action button link (optional) - must start with: ‘http://’, ‘https://’, ‘ftp://’, or ‘ftps://’

Share Export Tasks

The share export tasks allow you to generate and send a Gruntify data export automatically. These tasks are equivalent to using the shared export functionality from the export popup in the web app. You can only send an export of a single Request, Job, or Asset at a time.

Activity

Description

Inputs

Outputs

Activity

Description

Inputs

Outputs

Share Job Export

Generate an export file of a particular Job and send it to the selected recipients

Recipient Email Addresses, Export Type & Template, Job Reference, and a Message (optional)

None

Share Asset Export

Generate an export file of a particular Asset and send it to the selected recipients

Recipient Email Addresses, Export Type & Template, Asset Reference, and a Message (optional)

None

Share Request Export

Generate an export file of a particular Request and send it to the selected recipients

Recipient Email Addresses, Export Type & Template, Request Reference, and a Message (optional)

None

Notifications.png Notification Activity

This activity contains a task to send a notification through the Gruntify notification system to one or more users. This task is similar to Send Email but has the added advantage of supporting Push Notifications to users' devices.

Prerequisite: Workspace Owners must first purchase and enable the Push Notifications addon from the Addons page for the Notification activity to send push notifications.

To include parameters in the Subject & Body of the notification, you can use Handlebars syntax. For example: {{ request1234.form.controlA }} would be transformed into the text content of the control with ID ‘controlA’.

Unlike the Email activity, the notification activity does not support HTML formatting in the body

Inputs

  • One or more users; OR

  • A team

  • Subject line

  • Body text

  • Action button link (optional)

Table.png Table Activity

This activity contains a task to create a “lookup table”. A lookup table allows you to define some variables which can be referred to later, such as data calculations or aggregations that may be needed in multiple following tasks.

Start by clicking on the input area under the ‘Table’ heading in ‘Input Data’. Here, you will be able to define the structure of the table. Give each table parameter a human-friendly display name as well as a parameter (internal) name, and then select the data type. Note that the data type which you select is used to inform the Parameter Selector as to which parameters are available, but is not strictly enforced at run time.

Tip! You may have noticed the ‘Is Secret’ slider for each parameter. When you turn this on for a parameter, its value or expression will be double-layer encrypted at rest. Secret parameters will also not be exposed in instance logs for the lookup table task. A good use case for these is storing API key parameters which may be required in outgoing HTTP tasks.

Once you have defined and saved the structure of your table, click the ‘Edit’ button to the right of the ‘Table’ header. In this popup, you can define a value for each parameter in the table. You can do so statically, or with another parameter or advanced expression. Now, your table’s parameters will be available to use in any subsequent tasks you require.

Flow Control Structures

Parallel Branch

Split the Workflow into 2 or more branches with each branch running at the same time. All branches must run and complete before they come back to one point and then the Workflow can continue.

This structure is useful for improving performance of large Workflows where multiple tasks can run simultaneously.

Exclusive Branch

Split the Workflow into 2 or more branches with only one branch being executed depending on a predefined condition. This is a decision point, equivalent to a ‘diamond’ shape in flow-chart syntax.

To test multiple conditions, you can nest another exclusive branch inside of an outer one.

loop collection.png Loop

Iterate over data (any array type) and perform a set of actions for each data item. Alternatively, you can set an iteration count to perform a set of actions a fixed number of times.

Currently, loops will only run a maximum of 600 iterations. Attempting to run more than that will result in a failure at runtime. If you have a unique use case that requires more than 600 iterations, please raise a support ticket with us.

There are 2 drop areas for activities in the structure:

  • The first (inner) drop area is where you place tasks that should run for each iteration of the loop

  • The second (outer) drop area is where you place tasks that should run after every iteration of the loop has completed

Unlike other control flow structures, loops have a handful of outputs that you can use:

  • ‘Current Value’ is only available to tasks inside the loop - it represents the current data item in the array that we are iterating

  • ‘Current Iteration’ is only available to tasks inside the loop - it represents the current iteration count that we are at (starting from 0)

  • ‘Iteration Outputs’ are available both inside and outside of the loop - it is an array of all of the task outputs from within the loop, where each entry is an object that represents the outputs of a particular iteration


Related articles