Documentation

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:

TIER 1

Trigger

Decision logic

Returns: true/false
TIER 2

Action

Side effects

Routes: success/failure
TIER 3

Notifier

Terminal reporting

End of chain

Execution Flow

1

Trigger executes

Returns true or false based on conditions

2

Trigger routes to its named output

Each trigger declares its own output handles — the canvas wires from those.

Schedule During / Outside
Monitor Down / Up
Random · Script True / False
Manual · Webhook · One-Time Triggered (single output)
3

Action performs work

Bandwidth changes, HTTP calls, notifications, etc.

4

Action routes to its named output

No exception → OK
Exception thrown → Error
5

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
true "Start Time" - Schedule begins
false "End Time" - Schedule ends

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
true "Host Down" - Outage detected
false "Host Up" - Recovery detected

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
true Path ends with /success
false Path ends with /failure

Use 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
true "Start Time" reached
false "End Time" reached

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

1

Navigate to Automations from the sidebar

2

Click Create Automation

3

Enter a descriptive name for the automation

4

Configure the trigger type and its settings

5

Configure actions for each trigger state (true/false paths)

6

Optionally configure notifiers for success/failure

7

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:

1

Click the play icon on the automation card

2

Select which state to trigger (true or false )

3

The automation will execute immediately with the selected state

Editing an Automation

1

Click on an automation card or its edit button

2

Modify the desired settings

3

Click Save to apply changes

Deleting an Automation

1

Click the trash icon on the automation card

2

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.

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

Troubleshooting