Automations

Triggers

Every event that can start an automation, with filters and outputs.

Each automation has exactly one trigger. Triggers expose a flow output plus typed data outputs from the event. Many triggers support optional filters so you can narrow which events start a run.

Messages

TriggerWhen it runsFiltersMain outputs
Message CreatedA new message is sentChannels, reply-only; bots always ignoredmessage, author, channel
Message UpdatedA message is editedSame as createdmessage, replyTo, author, channel
Message DeletedA message is deletedSame as createdmessageId, channel, author
Messages Bulk DeletedMultiple messages deleted at onceChannelschannel, count
Pins UpdatedA channel's pinned messages changeChannelschannel

Members

TriggerWhen it runsFiltersMain outputs
Member JoinedA member joinsmember, user
Member LeftA member leavesuser
Member UpdatedA member's nickname changesmember, user, oldNickname, newNickname
Member Timed OutA member is timed outmember, user, until
Timeout ClearedA member's timeout is removedmember, user
Member VerifiedA member verifies or a verified member joinsVerification provider (Roblox)member, user
Member UnverifiedA member unverifies or an unverified member joinsVerification providermember, user
Role AddedA member gains a roleRole filtermember, user, role
Role RemovedA member loses a roleRole filtermember, user, role
Member BannedA user is banneduser, reason
Member UnbannedA user is unbanneduser

Channels, threads & roles

TriggerWhen it runsFiltersMain outputs
Channel CreatedA channel is createdchannel
Channel UpdatedA channel is renamedChannel filterchannel, oldName, newName
Channel DeletedA channel is deletedchannel
Thread CreatedA thread is createdChannel / parent filterthread, parent, owner
Thread DeletedA thread is deletedChannel / parent filterthread, parent
Role CreatedA role is createdrole
Role UpdatedA role is editedRole filterrole, oldName, newName
Role DeletedA role is deletedrole

Reactions, voice & invites

TriggerWhen it runsFiltersMain outputs
Reaction AddedA reaction is addedChannels, emoji filterreaction, message, user, emoji
Reaction RemovedA reaction is removedChannels, emoji filterreaction, message, user, emoji
Voice JoinedA member joins a voice channelVoice channel filtermember, user, channel
Voice LeftA member leaves a voice channelVoice channel filtermember, user, channel
Voice MovedA member moves between voice channelsVoice channel filter (from or to)member, user, fromChannel, toChannel
Invite CreatedAn invite is createdChannel filtercode, url, channel, inviter
Invite DeletedAn invite is deletedChannel filtercode, channel
Emoji CreatedA custom emoji is addedemoji
Emoji DeletedA custom emoji is removedemoji

Tickets

TriggerWhen it runsFiltersMain outputs
Ticket CreatedA ticket is openedPanel filterticket, user, channel, panel
Ticket ClaimedA ticket is claimedPanel filterticket, user, channel, panel
Ticket ClosedA ticket is closedPanel filterticket, user, channel, panel

Commands & manual runs

TriggerWhen it runsNotes
Command ExecutedA command whose Run Automation action targets this graph is usedThe command's configured arguments become typed sockets, plus an interaction for the interaction-response nodes.
Manual TriggerInvoked explicitly onlyRuns when called via the assistance:automation.run action (e.g. from a button). Supports up to 10 typed parameters with one output socket each.

The command that uses Run Automation owns its name, description, and availability. Command Executed declares that automation's arguments and response behavior; it does not create a second command.

Command interaction responses

The Ephemeral reply setting on Command Executed controls whether the original slash-command response is private. Assistance defers that response before the graph runs, so its visibility is fixed at the trigger and cannot be changed later by Reply to Interaction or an edit.

Use the interaction-response nodes when a command needs to reply, send a follow-up, or change one of those responses. Both invocation styles fill the trigger's Interaction output, so one graph serves them:

Slash commandPrefix command
Original responseThe deferred interaction responseA reply to the message that ran the command
Follow-upsInteraction follow-upsFurther messages in the same channel
Ephemeral reply / a follow-up's EphemeralHonouredIgnored — plain messages have no private mode
Response lifetime15 minutesUnlimited

The interaction's Kind field is command for a slash run and message for a prefix run, so a graph can branch when the difference matters. Interaction ID and Expires At are slash-only and stay empty for a prefix run.

A slash command's response handles expire 15 minutes after Discord receives the command. Reply, fetch, edit, delete, and follow-up work must finish in that window; do not store a handle for a later automation run.

Pass IDs, objects, and collections to a Manual Trigger

Manual Trigger parameters are typed. A parameter's ID is the key callers use in inputs; its label is only for people reading the graph. Give parameters stable, descriptive IDs such as destination, reviewers, or context, then wire each output socket to the node that consumes it.

The Run Automation action used in templates and commands can set only types with a literal editor, such as text, numbers, booleans, colors, durations, and times. It cannot construct Discord entities, arrays, dictionaries, or other object values. Use the REST API when a manual run needs one of those values.

  1. Add a Manual Trigger and declare a parameter with the required type — for example, destination as Channel, reviewers as Array, or context as Variables.
  2. Wire the parameter output to a compatible downstream input. For an array, wire it to For Each or another array node; for a channel, wire it to an action such as Send Template.
  3. Publish the automation.
  4. Call POST /guilds/{guild}/automations/{automationId}/runs with a server API key that has the guild.automations:execute scope. See API keys for authentication.

The request body is an inputs object keyed by parameter ID. For ID-addressable types — User, Member, Role, Channel, Category, custom Emoji, Ticket, Ticket Panel, Library File, and Library Folder — pass the ID string directly. Assistance constructs the value used by the graph, so your integration does not need a preliminary lookup request.

Use a full snapshot only when you already have one or when the value cannot be identified by one ID. Full snapshots remain supported for compatibility.

curl -X POST "https://api.assistance.sh/v1/guilds/acme/automations/AUTOMATION_ID/runs" \
  -H "Authorization: Bearer gt_…" \
  -H "Content-Type: application/json" \
  --data '{
    "inputs": {
      "destination": "123456789012345678",
      "reviewers": {
        "elementType": "user",
        "items": ["234567890123456789"]
      },
      "context": {
        "release": "2026.8.0",
        "source": "deployment"
      }
    }
  }'

Common value shapes

Declared typeJSON value
User, Member, Role, Channel, Category, Ticket, Ticket Panel, Library File, or Library Folder"123456789012345678" — pass the resource ID directly. A custom Emoji also accepts its emoji ID.
Array{ "elementType": "user", "items": ["123456789012345678"] }. The array is homogeneous; its items accept IDs when the element type does.
Variables{ "release": "2026.8.0", "source": "deployment" }. Keys and values are strings, with at most eight entries.
Optional{ "kind": "optional", "valueType": "channel", "value": "123456789012345678" }; use null for an empty optional.

An ID is enough for actions that operate on the resource. If your graph needs descriptive fields such as a channel name, a role color, or a user's display name, connect the ID-backed value to the matching Fetch node first.

Missing literal parameters make the run fail. Object and collection parameters are optional at invocation time, but a downstream required input still needs a value. The API validates every supplied value against the parameter type before the run starts.

Choosing a trigger

  • React to chat → Message Created or Reaction Added
  • Welcome new members → Member Joined
  • Moderation → Member Banned, Member Timed Out, or Role Added
  • Channel / role lifecycle → Channel Created, Role Updated, etc.
  • Ticket lifecycle → Ticket Created, Claimed, or Closed
  • Command workflows, including slash replies when needed → Command Executed
  • Button-driven flows → Manual Trigger wired from a Continuation Action

How is this guide?

On this page