Workflows

Build automation workflows with triggers, integrations and webhooks.

Open tool

Overview

Workflows is a visual automation builder for chaining together HTTP calls, email, Slack and Discord messages, AI prompts, and custom logic without writing a full backend. You pick a trigger — an inbound webhook, a manual "Run now" button, or a cron schedule — drop a sequence of steps onto the canvas, wire the output of one step into the input of the next with template expressions, and save. The next time the trigger fires, the workflow runs end-to-end.

It's aimed at developers, indie hackers, and operations folks who want a self-hosted alternative to no-code platforms like Zapier or n8n. Reach for it when you need a lightweight webhook receiver, a scheduled cleanup job, an internal Slack notifier, or an AI step that summarises inbound data before forwarding it somewhere.

How it works

Workflow definitions are stored as a graph of nodes with typed inputs and outputs. Templated fields use {{step.<id>.output.<path>}} syntax to pull values from upstream steps and {{secrets.<name>}} to inject credentials from the encrypted secret store. When a trigger fires — an HTTP POST to the webhook URL, a cron tick, or a manual click — the workflow is enqueued onto Hangfire, which executes each step in order and persists the inputs, outputs, and any errors to run history.

Schedule triggers use standard cron expressions evaluated in UTC. Webhook triggers expose a unique URL per workflow; the inbound JSON body becomes the trigger output that downstream steps can reference.

Examples

  • Webhook → HTTP step → Slack: receive a Stripe event, look up the customer in your CRM, and post a formatted message to a channel.
  • Cron 0 9 * * 1 → HTTP step → email: every Monday at 09:00 UTC, pull a weekly metrics endpoint and email the JSON-formatted result to the team.
  • Manual trigger → AI step → Discord: paste a long support ticket, summarise it with an AI step, and post the summary to a Discord channel for triage.
  • Webhook → script step → HTTP step: verify an incoming HMAC signature using a stored signing secret, then forward the payload to an internal API only if the signature checks out.

FAQ

Which triggers are supported?

Inbound webhooks (a unique URL per workflow), manual "Run now" buttons, and cron schedules.

How are API keys handled?

Store them in Workflow Secrets and reference them as {{secrets.<name>}} from any node. Values are decrypted only inside the worker and masked in run history.

Where do I see what a run actually did?

Open Workflow Runs to inspect per-step inputs, outputs, timing, and error messages for any execution.

Can workflows call private or loopback addresses?

No. The outbound HTTP client blocks private and loopback IPs by default to prevent SSRF against your own infrastructure.

Are runs retried on failure?

A failed step stops the run and records the error. Re-run by re-firing the trigger or clicking Run now.

Try Workflows

An unhandled error has occurred. Reload ×