Automations
Automations are the core of Unthrottle. They define when and how your circuit bandwidth should change, with a 3-tier execution model: Trigger → Action → Notifier.
Automation Architecture
Every automation follows a decision tree structure with three tiers:
Trigger
Decision logic
Action
Side effects
Notifier
Terminal reporting
Execution Flow
Trigger executes
Returns true or false based on conditions
Trigger routes to its named output
Each trigger declares its own output handles — the canvas wires from those.
Action performs work
Bandwidth changes, HTTP calls, notifications, etc.
Action routes to its named output
Execution completes
Notification sent and results logged to Events
Trigger Types
Triggers determine when an automation runs and which path to take. Each trigger type has two states that route to different actions.
Schedule Trigger
Execute based on a recurring schedule with configurable days and times.
Schedule Trigger
Configuration
- • Days: Select one or more days (Sun-Sat)
- • Start Time: When to trigger the "start" state
- • End Time: When to trigger the "end" state
- • Timezone: Your local timezone for scheduling
States
Use cases:
- Business hours bandwidth boost (9am-6pm weekdays)
- Weekend maintenance windows
- Peak/off-peak pricing optimization
Monitor Trigger
Execute based on host availability (ping monitoring).
Monitor Trigger
Configuration
- • Host: IP address or hostname to ping
- • Retries: Number of ping attempts (1-10)
- • Timeout: Max wait per ping (1-30 seconds)
- • Interval: Time between checks
States
Use cases:
- Failover bandwidth when primary host goes down
- Automatic recovery when service comes back online
- Load balancing based on server availability
Webhook Trigger
Execute when an external HTTP request is received.
Webhook Trigger
Configuration
- • Webhook ID: Auto-generated UUID
- • URL Format:
/api/webhooks/{webhookId}/{path} - • Method: HTTP POST
States
/success/failureUse cases:
- CI/CD pipeline triggers (deployment events)
- Integration with external monitoring systems
- Manual triggering via API call
One-Time Trigger
Execute once at a specific date and time.
One-Time Trigger
Configuration
- • Start DateTime: When to trigger "start"
- • End DateTime: When to trigger "end"
- • Timezone: Your local timezone
States
Use cases:
- Scheduled maintenance windows
- One-off events (product launches, streaming events)
- Temporary bandwidth increases for specific occasions
Action Types
Actions perform the actual bandwidth changes. Each trigger state can have its own action configuration.
Bandwidth Action
The primary action type that modifies circuit bandwidth.
Bandwidth Action
Configuration
- • Circuit Selection: Choose specific circuits or use tags
- • Bandwidth Value: Target bandwidth amount
- • Unit: Kbps, Mbps, or Gbps
Behavior
- • Respects circuit priority ordering
- • Skips circuits with manual overrides
- • Updates circuit state to ALTERED
- • Logs execution details to Events
No Action
A placeholder action that does nothing. Useful when you only want to notify without making bandwidth changes on one of the trigger paths.
Notifier Types
Notification actions send messages about execution results. Configure credentials
per-node — paste literals or reference shared values via Account → Environment with {{secrets.NAME}} / {{vars.NAME}} expressions
(see Variables & Secrets below).
Postmark Email
Send email notifications via Postmark.
Postmark Notifier
Setup (in Account → Notifiers)
- • Server Token: Your Postmark server token
- • Sender Email: Verified sender address
Per-Automation Config
- • Recipients: Email addresses (semicolon-separated)
- • Uses account email if not specified
Slack
Send notifications to a Slack channel via incoming webhook.
Slack Notifier
Setup (in Account → Notifiers)
- • Webhook URL: Slack incoming webhook URL
- • Messages use Block Kit formatting with status emoji
Microsoft Teams
Send notifications to a Teams channel via incoming webhook.
Teams Notifier
Setup (in Account → Notifiers)
- • Webhook URL: Teams incoming webhook URL
- • Messages use Adaptive Card format with theme colors
Managing Automations
Creating an Automation
Navigate to Automations from the sidebar
Click Create Automation
Enter a descriptive name for the automation
Configure the trigger type and its settings
Configure actions for each trigger state (true/false paths)
Optionally configure notifiers for success/failure
Click Save
Enabling/Disabling
Click the power icon on an automation card to toggle its enabled state. Disabled automations won't execute their triggers.
Manual Triggering
For testing or emergency situations, you can manually trigger an automation:
Click the play icon on the automation card
Select which state to trigger (true or false )
The automation will execute immediately with the selected state
Editing an Automation
Click on an automation card or its edit button
Modify the desired settings
Click Save to apply changes
Deleting an Automation
Click the trash icon on the automation card
Confirm the deletion in the modal
Automation States
Idle
Waiting for trigger conditions
Scheduled
Trigger time approaching
Active
Currently executing
Variables & Secrets
Variables and secrets let you store shared values (hostnames, API keys, test fixtures, default thresholds) once and reference them from any automation node — instead of pasting the same literal into every node and chasing down every copy when it changes.
Both come in two scopes:
- User scope — owned by you, available to every automation. Manage at Account → Environment.
- Automation scope — bound to a single flow. Manage from the Variables tab in the automation editor sidebar. Use for per-flow test fixtures, pinned data, anything that's only meaningful inside one workflow.
Account → Environment also shows a read-only inventory of every automation-scope variable and secret you own, grouped per automation. Useful for auditing what's where without opening each flow individually. Edits still happen in the editor (where you can see how the value flows through the nodes); delete is available inline from the inventory.
Reference either scope from any node field with:
Variables
Plaintext — visible in the UI and execution logs.
{{vars.NAME}}Secrets
Encrypted at rest — never displayed; masked in logs.
{{secrets.NAME}}When the same name exists at both user and automation scope, the automation scope wins for that flow — so a flow can override a user-level default with a per-flow value without touching the user-level row.
Secrets: literal vs. expression
Secrets are stored in one of two modes — the inspector decides automatically based on what you type, so you don't have to choose explicitly:
- Literal — the value is encrypted with industry-standard encryption. The plaintext can never be shown again; rotating requires pasting a new value. Use for API keys, tokens, passwords.
- Expression template — the value is a
{{…}}expression that resolves to the real value at run time (e.g.{{secrets.OTHER_TOKEN}}as an indirection layer, or{{vars.PREFIX}}{{secrets.SUFFIX}}composing pieces from different sources). The template itself isn't sensitive (anyone reading it sees only the expression, not the resolved value), so it's shown in the inspector. The resolved value is still masked in logs.
{{…}} tokens
(with optional whitespace between). Any literal text mixed in — including a
protocol prefix like https:// — makes the whole value a
literal secret. That way you can't accidentally leave plaintext secret
content sitting in a plaintext column.Converting between variable and secret
Every variable and secret inspector has a single Secret toggle. Flipping it changes the row's kind at the next Save:
- Variable → Secret — silent. The current value is encrypted (or stored as a template if you typed a pure expression). No confirmation needed.
- Secret → Variable — for expression-mode secrets, silent. For literal secrets, the inspector asks you to confirm — converting would expose the previously-encrypted value as plain text — and clears the value so you must type the replacement explicitly before saving.
Best Practices
Automation Best Practices
Naming Conventions
- • Use descriptive names: "Peak Hours - Production"
- • Include the trigger type: "Schedule: Business Hours"
- • Add environment prefix: "[PROD] Failover Monitor"
Testing
- • Test with manual triggers before enabling
- • Start with non-production circuits
- • Review Events log after first execution
- • Set up notifications during testing phase