Automation you can run as a real backend.

Schedules, webhooks and multi-step flows share one declarative model with your database APIs. You're not bolting a second product onto a hand-rolled service, and you're not stuck in a canvas nobody can review in a pull request.

Cron and HTTP, the same interface

Any interface can run on a timezone-aware cron schedule instead of — or as well as — serving HTTP. Digests, polls and syncs are the same config as the endpoint next to them, with retries and backoff built in.

Branch, retry, delay, recover

Flow control is declarative. Gate a step on whether earlier ones succeeded, failed or merely finished; branch on an assertion; pace work with a delay action; and proceed once a quorum of sources come back rather than waiting on all of them.

Cursors, dedupe and counters that survive

Durable key/value state means real automation rather than in-memory demos. Keep a polling cursor, an idempotency key or a seen-set between runs, and read it inline in the config.

Reach the rest of your stack

Automation is only useful if it can touch things. Query your databases, call any HTTP API, run a command, send email over SMTP, and use Google and AWS cloud actions — then reshape what comes back with ordered transforms before the next step.

Every scheduled run is traced

A nightly job that fails should tell you which step failed, not just show a red badge. Scheduled runs emit the same OpenTelemetry traces and Prometheus metrics as any request, so automation is as observable as the rest of your backend.

Frequently asked questions