Documentationbreadcrumb arrow Grafana Cloudbreadcrumb arrow Alerts and IRMbreadcrumb arrow Workflowsbreadcrumb arrow Step and trigger types reference
Grafana Cloud
Last reviewed: March 30, 2026

Step and trigger types reference

Note

Grafana Workflows is currently in private preview. Grafana Labs offers support on a best-effort basis, and breaking changes might occur prior to the feature being made generally available.

Step types

Steps are the individual actions in a workflow. They execute in order from first to last. Each step has a type, an ID, and a set of inputs. Every step produces outputs that later steps can reference through the workflow context using CEL expressions, for example, ${steps.my-step.outputs.responseBody}.

For details on connecting steps with the workflow context, refer to Use CEL expressions.

General

HTTP call (http.call)

Make an HTTP request to any URL with any method and body. Supports bearer token and basic authentication using secrets.

Inputs:

NameTypeRequiredDescription
methodstringYesHTTP method, for example, GET, POST, PUT, DELETE.
urlstringYesThe request URL.
bodystringNoThe request body.
headersarray (string)NoRequest headers.
authMethodstringNoAuthentication method: bearer or basic.
authSecretsecretStringNoSecret for bearer token authentication. Refer to Manage secrets.
authUsernamestringNoUsername for basic authentication.
authPasswordsecretStringNoPassword for basic authentication. Refer to Manage secrets.

Outputs:

NameTypeDescription
responseCodeintThe HTTP response status code.
responseBodystringThe response body.
responseHeadersarray (string)The response headers.

No operation (noop)

Perform no action. Use this step as a placeholder during development or as a default branch target in switch steps.

This step has no inputs and produces no outputs.

Flow control

Transform (transform)

Evaluate a template string with embedded CEL expressions to generate dynamic content. Use ${expression} syntax to embed expressions that reference workflow inputs and previous step outputs.

Inputs:

NameTypeRequiredDescription
templatestringYesA template string with embedded ${expression} placeholders.

Outputs:

NameTypeDescription
resultstringThe rendered template string.

Filter (filter)

Gate workflow execution on a CEL condition. If the condition evaluates to false, the workflow stops and no further steps execute.

Inputs:

NameTypeRequiredDescription
conditionstringYesA CEL expression that evaluates to a boolean.

Outputs:

NameTypeDescription
matchedbooltrue if the condition matched, false otherwise.

Switch (switch)

Conditionally execute different sets of steps based on CEL expressions. Each branch has a condition and its own list of steps. The first branch whose condition evaluates to true runs. Include a default branch with no condition as a fallback.

For details on how to define branches, refer to Create workflows.

Outputs:

NameTypeDescription
matchedCasestringThe condition expression of the matched branch.
matchedBranchIndexintThe zero-based index of the matched branch.
errorstringAn error message if evaluation failed.

Wait (wait)

Pause workflow execution for a specified number of seconds.

Inputs:

NameTypeRequiredDescription
secondsintYesThe number of seconds to wait.

Outputs:

NameTypeDescription
waitedSecondsintThe number of seconds the step waited.

Incident

Incident steps operate on Grafana Incidents. You can pass incident IDs directly or reference them from incident resources loaded into the workflow context. For details on loading incident data, refer to Load incident data.

Add participant to incident (incident.add-participant)

Add a user to a Grafana Incident with a specific role.

Inputs:

NameTypeRequiredDescription
incidentIDstringYesThe incident ID.
userIDstringYesThe user ID or email address of the participant.
rolestringNoThe participant role: commander, investigator, or observer. Defaults to observer.

Outputs:

NameTypeDescription
successbooltrue if the participant was added successfully.
didChangebooltrue if the participant was newly added.
incidentIDstringThe incident ID.
errorstringAn error message if the operation failed.

Set incident field (incident.set-field)

Update a field on a Grafana Incident, including title, status, severity, or role assignments.

Inputs:

NameTypeRequiredDescription
incidentIDstringYesThe incident ID.
fieldstringYesThe field to update, for example, title, status, severity, role.
valuestringYesThe new value for the field.
userIDstringNoRequired when field is role. The user ID to assign the role to.

Outputs:

NameTypeDescription
successbooltrue if the field was updated successfully.
incidentIDstringThe incident ID.
errorstringAn error message if the operation failed.

Slack

Create Slack channel (slack.channel.create)

Create a new public or private Slack channel.

Inputs:

NameTypeRequiredDescription
channelNamestringYesThe name for the new channel.
isPrivateboolNoSet to true to create a private channel.

Outputs:

NameTypeDescription
channelIDstringThe Slack channel ID.
channelNamestringThe final channel name assigned by Slack.

Post message to Slack channel (slack.message.post)

Post a message to a Slack channel. Supports plain text, Block Kit blocks for rich formatting, attachments, and threaded replies.

Inputs:

NameTypeRequiredDescription
channelIDstringYesThe Slack channel ID to post to.
messageTextstringNoPlain text message content.
blocksstringNoA JSON string of Slack Block Kit blocks for rich formatting.
threadTsstringNoThe timestamp of a parent message to reply in a thread.
replyBroadcastboolNoSet to true to also post the reply to the channel.
attachmentsstringNoA JSON array string of Slack message attachments.

Outputs:

NameTypeDescription
messageIDstringThe posted message ID.

Archive Slack channel (slack.channel.archive)

Archive a Slack channel.

Inputs:

NameTypeRequiredDescription
channelIDstringYesThe Slack channel ID to archive.

Outputs:

NameTypeDescription
successbooltrue if the channel was archived successfully.

Add bookmark to Slack channel (slack.channel.add-bookmark)

Add a bookmark link to a Slack channel.

Inputs:

NameTypeRequiredDescription
channelIDstringYesThe Slack channel ID.
bookmarkTitlestringYesThe title for the bookmark.
bookmarkUrlstringYesThe URL for the bookmark.
bookmarkEmojistringNoAn emoji to display with the bookmark.

Outputs:

NameTypeDescription
bookmarkIDstringThe ID of the created bookmark.

Add users to Slack channel (slack.channel.add-users)

Invite users to a Slack channel by their Slack user IDs.

Inputs:

NameTypeRequiredDescription
channelIDstringYesThe Slack channel ID.
usersarray (string)YesA list of Slack user IDs to invite.

Outputs:

NameTypeDescription
successbooltrue if the users were added successfully.

IRM

Page user via IRM (irm.page-user)

Create an IRM/OnCall escalation to page a user. Optionally associates the escalation with an incident and includes urgency and message context.

Inputs:

NameTypeRequiredDescription
userIdentifierstringYesThe user identifier value, interpreted according to identifierType.
identifierTypestringNoIdentifier mode: id (default), username, or email. For email, the step resolves the user via the OnCall API.
incidentIDstringNoAn incident ID to associate with the escalation.
importantboolNoSet to true to mark the escalation as important. Defaults to false.
messagestringNoA message to attach to the escalation.

Outputs:

NameTypeDescription
oncallUserIDstringThe resolved user identifier used in the escalation.
escalationIDstringThe created escalation ID.
statestringThe escalation state returned by OnCall, for example, triggered.
alertGroupURLstringA permalink to the related IRM alert group, if returned. Otherwise empty.
errorstringAn error message if the operation failed. Empty on success.

Trigger types

Triggers define when a workflow starts. You configure triggers in the startWhen section of a workflow definition. For details on configuring triggers, refer to Configure triggers.

Event trigger

An event trigger starts a workflow when an incoming event matches a regular expression pattern. Events arrive on NATS subjects following the format {app}.{instance-id}.{resource-type}.{event-type}.

You define event triggers using matching rules. Each rule contains a regex pattern that the engine tests against incoming event subjects. If any rule matches, the workflow starts.

Configuration:

FieldTypeRequiredDescription
eventNameRegexstringYesA regular expression tested against the event subject. The workflow starts if the pattern matches.

Example:

YAML
startWhen:
  matchingRules:
    - eventNameRegex: "grafana_irm_app\\.incident\\.created"
    - eventNameRegex: "grafana_irm_app\\.alert_groups\\.fired"

A workflow can have multiple matching rules. The workflow triggers if any rule matches.

Available event sources

The following table lists the event sources that can trigger workflows:

AppResourceEvent typesExample event name
grafana_irm_appincidentcreated, updated, and other state changesgrafana_irm_app.incident.created
grafana_irm_appalert_groupsfired and other alert group eventsgrafana_irm_app.alert_groups.fired

Event names follow the pattern {app}.{resource-type}.{event-type}.

Schedule trigger

A schedule trigger starts a workflow at recurring times using a cron expression. Schedules use the standard five-field Unix cron format and run in UTC.

Configuration:

FieldTypeRequiredDescription
(schedule)stringYesA five-field Unix cron expression in UTC, for example, 0 9 * * 1-5.

Example:

YAML
startWhen:
  schedules:
    - "0 9 * * 1-5"
    - "0 0 1 * *"

A workflow can have multiple schedules. Each schedule triggers the workflow independently.

Cron field reference:

FieldRangeSpecial characters
Minute0-59*, ,, -, /
Hour0-23*, ,, -, /
Day of month1-31*, ,, -, /
Month1-12*, ,, -, /
Day of week0-7 (0 and 7 are Sunday)*, ,, -, /

Manual trigger

A manual trigger starts a workflow only through the UI or API. Any workflow can be triggered manually regardless of whether it has event or schedule triggers configured.

To trigger a workflow manually in the editor, click Test and provide sample input data as a JSON object.

Manual-only workflows have an empty startWhen section:

YAML
startWhen:
  matchingRules: []
  schedules: []

Combine triggers

A workflow can have both event and schedule triggers. The workflow starts when any matching rule matches an incoming event or when any schedule fires.

YAML
startWhen:
  matchingRules:
    - eventNameRegex: "grafana_irm_app\\.incident\\.created"
  schedules:
    - "0 9 * * 1-5"