Schedule HTTP jobs with a URL and a schedule. Every execution fires on time — and when something breaks, you find out before your users do, with retries you can trust and logs you can audit.
Schedules as plain intervals (seconds) or cron expressions (croniter). The scheduler reloads config every 30s — edit jobs without restarting.
GET/POST with custom headers, basic auth, and request bodies. Per-job timeouts, retry counts, and backoff base.
Network errors, timeouts, 5xx, and 429 retry with exponential backoff + jitter. 4xx never retry — client errors are terminal, not retried forever.
Per-job alert thresholds: after N consecutive failed runs, fire webhook + email + SMS. State persists across restarts.
Every attempt appended to JSONL: status, latency, HTTP code, error. GET /v1/runs with n and job_id filters; GET /v1/jobs lists your definitions.
Jobs are managed over REST with your tenant API key — create, list, update, delete and run-now — with run history scoped to your account. The CLI (add/remove/list/run/serve) remains for operators and self-hosting.