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
| Trigger | When it runs | Filters | Main outputs |
|---|---|---|---|
| Message Created | A new message is sent | Channels, reply-only; bots always ignored | message, author, channel |
| Message Updated | A message is edited | Same as created | message, replyTo, author, channel |
| Message Deleted | A message is deleted | Same as created | messageId, channel, author |
| Messages Bulk Deleted | Multiple messages deleted at once | Channels | channel, count |
| Pins Updated | A channel's pinned messages change | Channels | channel |
Members
| Trigger | When it runs | Filters | Main outputs |
|---|---|---|---|
| Member Joined | A member joins | — | member, user |
| Member Left | A member leaves | — | user |
| Member Updated | A member's nickname changes | — | member, user, oldNickname, newNickname |
| Member Timed Out | A member is timed out | — | member, user, until |
| Timeout Cleared | A member's timeout is removed | — | member, user |
| Member Verified | A member verifies or a verified member joins | Verification provider (Roblox) | member, user |
| Member Unverified | A member unverifies or an unverified member joins | Verification provider | member, user |
| Role Added | A member gains a role | Role filter | member, user, role |
| Role Removed | A member loses a role | Role filter | member, user, role |
| Member Banned | A user is banned | — | user, reason |
| Member Unbanned | A user is unbanned | — | user |
Channels, threads & roles
| Trigger | When it runs | Filters | Main outputs |
|---|---|---|---|
| Channel Created | A channel is created | — | channel |
| Channel Updated | A channel is renamed | Channel filter | channel, oldName, newName |
| Channel Deleted | A channel is deleted | — | channel |
| Thread Created | A thread is created | Channel / parent filter | thread, parent, owner |
| Thread Deleted | A thread is deleted | Channel / parent filter | thread, parent |
| Role Created | A role is created | — | role |
| Role Updated | A role is edited | Role filter | role, oldName, newName |
| Role Deleted | A role is deleted | — | role |
Reactions, voice & invites
| Trigger | When it runs | Filters | Main outputs |
|---|---|---|---|
| Reaction Added | A reaction is added | Channels, emoji filter | reaction, message, user, emoji |
| Reaction Removed | A reaction is removed | Channels, emoji filter | reaction, message, user, emoji |
| Voice Joined | A member joins a voice channel | Voice channel filter | member, user, channel |
| Voice Left | A member leaves a voice channel | Voice channel filter | member, user, channel |
| Voice Moved | A member moves between voice channels | Voice channel filter (from or to) | member, user, fromChannel, toChannel |
| Invite Created | An invite is created | Channel filter | code, url, channel, inviter |
| Invite Deleted | An invite is deleted | Channel filter | code, channel |
| Emoji Created | A custom emoji is added | — | emoji |
| Emoji Deleted | A custom emoji is removed | — | emoji |
Tickets
| Trigger | When it runs | Filters | Main outputs |
|---|---|---|---|
| Ticket Created | A ticket is opened | Panel filter | ticket, user, channel, panel |
| Ticket Claimed | A ticket is claimed | Panel filter | ticket, user, channel, panel |
| Ticket Closed | A ticket is closed | Panel filter | ticket, user, channel, panel |
Commands & manual runs
| Trigger | When it runs | Notes |
|---|---|---|
| Command Executed | A command whose Run Automation action targets this graph is used | The command's configured arguments become typed sockets, plus an interaction for the interaction-response nodes. |
| Manual Trigger | Invoked explicitly only | Runs 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 command | Prefix command | |
|---|---|---|
| Original response | The deferred interaction response | A reply to the message that ran the command |
| Follow-ups | Interaction follow-ups | Further messages in the same channel |
| Ephemeral reply / a follow-up's Ephemeral | Honoured | Ignored — plain messages have no private mode |
| Response lifetime | 15 minutes | Unlimited |
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.
- Add a Manual Trigger and declare a parameter with the required type —
for example,
destinationas Channel,reviewersas Array, orcontextas Variables. - 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.
- Publish the automation.
- Call
POST /guilds/{guild}/automations/{automationId}/runswith a server API key that has theguild.automations:executescope. 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 type | JSON 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
Related
How is this guide?