DocsGetting StartedYour first workflow

Your first workflow

Create and run a container workflow.

This walkthrough creates a container workflow and triggers an immediate manual job through the HTTP API.

Authenticate

Register through the API and tell curl to store the returned session and CSRF cookies in cookies.txt:

curl -c cookies.txt -X POST http://localhost:8080/auth/register \
  -H 'Content-Type: application/json' \
  -d '{
    "email": "operator@example.com",
    "password": "password12345"
  }'

If the user already exists, use the same command with /auth/login. Authentication through the dashboard stores cookies in the browser and does not populate cookies.txt. The remaining curl commands read both cookies from this file with -b cookies.txt.

Create a container workflow

Every retry-prone mutation requires an Idempotency-Key.

curl -X POST http://localhost:8080/workflows \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: first-workflow-v1' \
  -b cookies.txt \
  -d '{
    "name": "hello-chronoverse",
    "payload": "{\"image\":\"alpine:3.22.2\",\"cmd\":[\"echo\",\"hello from chronoverse\"]}",
    "kind": "CONTAINER",
    "interval": 60,
    "max_consecutive_job_failures_allowed": 3,
    "log_retention": true
  }'

Wait for the build

The workflow starts in a queued build state. The outbox relay publishes its event, the workflow worker validates and prepares execution metadata, and the workflows service records the terminal build state.

Trigger a manual run

curl -X POST http://localhost:8080/workflows/WORKFLOW_ID/jobs/schedule \
  -H 'Idempotency-Key: first-manual-run-v1' \
  -b cookies.txt

The returned job uses the MANUAL trigger. Reusing the same idempotency key for the same request returns the original result instead of creating another job.

Inspect output

Open the job in the dashboard while it is running to use the SSE stream. After completion, retained logs are available through the logs, search, and raw download endpoints because log_retention is enabled.