Skip to content

Workflow reference

This page lists every option a workflow has, for looking up one value. To build a workflow, see Build a workflow.

TriggerSettingsNotes
When something happens to a ticketOne or more of created, updated, replied to.Runs as part of the ticket change. A workflow with an AI step runs a few moments after it instead.
Keep checking open ticketsNone.Every 5 minutes, over tickets whose status type is not Closed: open tickets, and Solved tickets with activity in the last 90 days. The trigger summary reads Checks open and recently solved tickets every 5 minutes.
On a scheduleRepeat (Every day, Every week, Every month, or Advanced (cron)), On or On day (1 to 28), At, and Time zone.Advanced (cron) takes five fields: minute, hour, day of month, month, day of week. Each run happens once in every client in scope. A client that cannot be reached at that moment is skipped for that run.
When tickets pile upTickets that share (An endpoint or A requester), At least (2 to 50), Within days (1 to 365), Then wait days (0 to 365).Counts tickets created within the last Within days, leaving out tickets that workflows created. A group that fires waits Then wait days before it can fire again. Blank means the same as Within days.

Only count tickets narrows a pile-up count by With priority, In status, Of type, and With any of these tags. Blank counts every ticket.

Conditions are built from a field, an operator, and a value, inside all or any groups. A condition tree can be up to 8 levels deep and hold up to 100 conditions. The same fields are used by SLA policy conditions, which take them as JSON with the codes below.

CodeConsole labelTypeNotes
ticket.statusStatusTextA status code: new, open, pending, on_hold, solved, closed, or the code of a status you added.
ticket.status_categoryStatus typeTextnew, open, pending, hold, solved, or closed. Matches every status of that type, including statuses you added.
ticket.priorityPriorityTextnormal, high, urgent, or critical.
ticket.typeTypeTextThe ticket’s category code, such as incident or request, or the code of a category you added.
ticket.queue_idQueueTextChosen by name in the builder.
ticket.group_idGroupTextChosen by name in the builder.
ticket.assignee_idAssigneeTextChosen from your team. Empty means unassigned.
ticket.is_assignedAssignedTrue or false
ticket.has_endpointLinked to an endpointTrue or falseTrue when the ticket is linked to an endpoint.
ticket.subjectSubjectText
ticket.channelChannelTexttray, email, console, api, or automation.
ticket.tagsTagsList
ticket.requester_confidenceRequester matchTextattested, unclaimed, email, or manual.
ticket.message_countMessagesNumber
ticket.reopen_countTimes reopenedNumber
ticket.age_minutesTicket ageNumberTime-based.
ticket.minutes_since_updateTime since last updateNumberTime-based.
ticket.minutes_since_public_replyTime since our last public replyNumberTime-based.
ticket.sla_minutes_remainingSLA time remainingNumberTime-based. Minutes until the ticket’s next SLA due time.
ticket.sla_breachedSLA breachedTrue or falseTime-based.
requester.email, requester.nameRequester email, Requester nameText
assignee.nameAssignee nameText
endpoint.hostname, endpoint.siteEndpoint name, Endpoint siteText
endpoint.connected, endpoint.meteredEndpoint online, Endpoint on a metered connectionTrue or false

In the builder, statuses and status types show as New, Open, Pending, On hold, Solved, and Closed, and time-based fields take a number and a unit: minutes, hours, or days. In JSON they are minutes. Time-based fields change without anyone touching the ticket, so use them with Keep checking open tickets.

Operator codeConsole label
equals, not_equalsis, is not
contains, not_containscontains, does not contain
starts_with, ends_withstarts with, ends with
in, not_inis one of, is none of
is_empty, is_not_emptyis empty, is not empty
greater_than, at_leastis more than, is at least
less_than, at_mostis less than, is at most
is_true, is_falseis yes, is no
ChoiceTriggersSettings
Once per ticketTicket events, Keep checking open ticketsNone. The default.
A few times per ticketTicket events, Keep checking open ticketsUp to 2 to 10 times. At most every 15 minutes or more.
Repeatedly while it matchesKeep checking open ticketsAt most every 15 minutes or more, and 60 minutes or more when a step emails the client.
Every timeTicket eventsNone.

Start counting again when the ticket stops matching is available with Once per ticket and A few times per ticket. Schedule and pile-up workflows have no How often setting: a schedule runs once per occurrence in each client, and a pile-up group waits Then wait days.

ChoiceHours used
Any timeEvery hour.
During a business hours scheduleThe named business schedule, looked up by name in each client. A client without it skips the workflow.
During the ticket’s SLA hoursThe schedule of the policy of the ticket’s running SLA timer, else the client’s default schedule.

Schedule workflows always use Any time.

StepWhat it doesTriggers
Change a fieldSets the status, priority, type, queue, group, or assignee. Queue and group are chosen by name.Ticket events, Keep checking open tickets
Add a tag, Remove a tagAdds or removes one tag.Ticket events, Keep checking open tickets
Add an internal noteAdds an internal note signed with the workflow’s name. Clients never see it.Ticket events, Keep checking open tickets
Email an addressSends a plain-text email on the ticket’s thread to the requester, the assigned technician, or an address you type. To reach your team in the console too, use Notify people. Counts toward the client email limit, whoever it goes to.Ticket events, Keep checking open tickets
Call a webhookPosts a body to an https:// URL. See Webhook calls.Ticket events, Keep checking open tickets
Notify peopleNotifies the recipients you choose. See Recipients.All
Create a ticketOpens a ticket with a Subject, Message, Priority, Status, Queue, Group, Assign to, and Tags, optionally from a Template. Link the new ticket to the same endpoint links it to the ticket’s or the pile-up group’s endpoint. The new ticket has no requester, so no client is emailed about it.All
If / ElseRuns Then when A condition is true or The AI’s answer is one you select, and Else otherwise.Ticket events, Keep checking open tickets
Ask AIChooses an answer from your list and can write a note, a draft reply, and tags. See AI steps in workflows.Ticket events, Keep checking open tickets

When an Email an address step emails an address, the built-in ticket notification email for the same change is not also sent to that address. Field and tag changes are made as part of the ticket change. Emails and webhooks are sent after it, and failed sends are retried. An email or webhook that could not be sent within 24 hours is dropped rather than sent late.

A ticket a workflow creates is handled like any other new ticket, so its SLA timers start and workflows that run on new tickets see it. Tickets created by workflows running on workflow-created tickets stop after 2 levels.

RecipientWhoHow
The requesterThe ticket’s requester.Email
Everyone copied on the ticketEvery participant with the CC role.Email
The client’s primary contactThe person who holds the client’s Primary contact tag, when they have a confirmed email address.Email
The assigned technicianThe ticket’s assignee.Console notification
Members of the ticket’s groupEveryone in the ticket’s group.Console notification
Everyone with a roleEveryone who holds the role you add.Console notification
A specific personOne person on your team.Console notification

Each address is emailed once per step, and a step’s client emails count once toward the client email limit. Your team’s notifications go to the console bell, and by email too when the person’s Workflow notices preference includes email. See Notifications. Schedule and pile-up workflows can notify only Everyone with a role and A specific person.

  • The URL must use https://. Addresses that resolve to a private, loopback, or link-local network are refused, so a webhook cannot reach machines inside the network your Outpost runs in.
  • The body is sent as application/json when it is valid JSON, otherwise as plain text. Placeholder values in a webhook body are escaped as JSON string text, so put each placeholder inside quotes: {"ticket": "{{ticket.reference}}", "subject": "{{ticket.subject}}"}.
  • Bodies over 64 KB are refused.
  • Each request carries an X-Outpost-Delivery header that stays the same when a request is retried, so your receiver can ignore a repeat, and an X-Outpost-Ticket header with the ticket’s ID.
  • A 2xx response is a success. A 4xx response, other than 408 and 429, fails without a retry. Redirects are not followed. Timeouts (10 seconds), 408, 429, and 5xx responses are retried.

A workflow that uses a placeholder not in this list, or one its trigger cannot fill, is refused when you save it.

PlaceholderValueTriggers
{{ticket.reference}}, {{ticket.subject}}, {{ticket.status}}, {{ticket.priority}}, {{ticket.queue}}, {{ticket.url}}The ticket’s details.Ticket events, Keep checking open tickets
{{requester.name}}, {{requester.first_name}}, {{requester.email}}The requester’s details.Ticket events, Keep checking open tickets, and pile-ups grouped by requester
{{assignee.name}}The assignee’s name.Ticket events, Keep checking open tickets
{{endpoint.hostname}}, {{endpoint.site}}The endpoint’s details.Ticket events, Keep checking open tickets, and pile-ups grouped by endpoint
{{client.name}}The client’s name.All
{{run.date}}The run’s date as 2026-11-02, in the schedule’s time zone, or the client’s default schedule’s time zone for other triggers.All
{{run.month}}The run’s month, such as November 2026.All
{{pattern.count}}How many tickets are in the group.When tickets pile up
{{pattern.days}}The Within days setting.When tickets pile up
{{pattern.references}}The group’s ticket references, newest first, up to 20.When tickets pile up
{{ticket.first_message}}The ticket’s first message, up to 4,000 characters.Ask AI question only
LimitValue
Name120 characters
Description1,000 characters
Run order0 to 100,000. The default is 100.
Steps50, counting every step inside branches and fallbacks
Nesting3 levels
Ask AI steps2 per workflow
AI answers2 to 12
AI allowed tags20
AI question4,000 characters
Conditions100 per workflow, 8 levels deep
Actions per workflow per hour200 by default, 1 to 10,000, across all clients. Over the limit, the workflow is paused.
Client emails per ticket per day3 by default, 0 to 50, counted per UTC day across all workflows. Over the limit, further email steps on the ticket are skipped. 0 stops all workflow email to clients.
Test results25 matches per client, 200 in total

Actions are the steps that change something: field changes, tags, notes, notifications, emails, webhooks, and created tickets. The two bold limits apply to the whole practice. Change them under Safety limits on the Workflows page. See Change the safety limits. They are also available through the update_workflow_settings MCP tool and PUT /api/v1/workflows/settings.

The Runs tab shows an outcome for each run, and a reason for skips and fallbacks.

OutcomeMeaning
RanThe workflow acted.
SkippedIt did not act.
FailedIt could not finish.
Stopped by a loop guardOutpost stopped it to prevent a loop.
Took the AI fallbackAn AI step fell back and its fallback steps ran.
ReasonMeaning
Conditions did not matchA ticket event did not meet the conditions.
Outside its run windowOutside the hours in When it runs.
A named item is missing in this clientA queue, group, schedule, or template is not in this client. Only that step is skipped.
Already ran as often as allowedThe How often limit was reached.
All workflows are pausedPause all workflows is on.
This workflow is pausedThe workflow is paused.
Client email limit reached for todayThe ticket reached the client email limit. Only the email step is skipped.
Too many actions in an hour; pausedThe workflow went over the action limit and was paused.
An AI branch tried to close the ticketA branch on an AI answer tried to set a solved or closed status.
The ticket no longer existsThe ticket was deleted before the workflow ran.

The AI fallback reasons are listed in AI steps in workflows.

Start from library adds one of these, turned off and scoped to every client.

WorkflowTriggerWhat it does
Waiting on client: nudge, then closeKeep checking open ticketsWhen a ticket of status type Pending has had no public reply from you for 3 days, emails the requester a reminder. If it is still waiting at 7 days, solves the ticket and emails the requester that it is closed. Runs up to 2 times per ticket, at most every 4 days, and starts counting again when the ticket stops matching.
Untouched urgent ticket: escalate after 24 hoursKeep checking open ticketsAn urgent or critical ticket of status type New or Open with no update for 24 hours is tagged escalated, and everyone with the Support Manager role is notified. Once per ticket.
Monthly backup checkOn a scheduleAt 09:00 on the first of every month, America/New_York, opens a ticket (in MSP mode, one in each client in scope) titled with the client’s name and the month, tagged backup-check. Change the time zone to yours.
Repeat device reviewWhen tickets pile upWhen one endpoint has 3 tickets within 60 days, opens a review ticket linked to the endpoint that lists the tickets, tagged repeat-device.
AI triage note on new ticketsWhen something happens to a ticket (created)Asks AI whether a new ticket needs a technician now or is routine, adds an internal note and the tag ai-triaged, and raises a Low or Normal ticket to High when it needs a technician now; it never lowers an Urgent or Critical one. If AI cannot answer, notifies everyone with the Support Manager role to triage it by hand. Uses AI.
SLA near breach: nudge the assigneeKeep checking open ticketsWhen the SLA of a ticket of status type New or Open is due within 60 minutes and not yet breached, notifies the assignee, or everyone with the Support Manager role when nobody is assigned. Once per ticket, and again if the ticket stops matching and comes back.

Content is licensed CC BY 4.0. Code samples are MIT. Outpost and the Outpost mark are trademarks of Outpost Business Solutions, PBC and are not covered by either license.