Scheduling

Workflows can run on a recurring schedule. Add a schedule object to the workflow definition.


Configuration

json
{
  "name": "daily_reconciliation",
  "definition": {
    "schedule": {
      "every": "1d",
      "at": "02:00",
      "timezone": "America/New_York"
    },
    "actions": [ ]
  }
}

Schedule Fields

Field Type Required Description
every string Yes Interval: 30m, 1h, 6h, 1d, 7d
at string No Time of day in 24h format ("02:00", "14:30"). Only applies when every is 1d or longer
timezone string No IANA timezone ("America/New_York", "Europe/London", "Asia/Tokyo"). Defaults to UTC

Examples

Daily at 2:00 AM Eastern:

json
{
  "schedule": {
    "every": "1d",
    "at": "02:00",
    "timezone": "America/New_York"
  }
}

Every 6 hours:

json
{
  "schedule": {
    "every": "6h"
  }
}

Every 30 minutes:

json
{
  "schedule": {
    "every": "30m"
  }
}

Weekly (every 7 days) at midnight UTC:

json
{
  "schedule": {
    "every": "7d",
    "at": "00:00"
  }
}

How Scheduled Runs Work

Scheduled workflows execute with an empty @input unless a default input payload is configured. The @now context variable reflects the timestamp at execution time.

Each scheduled occurrence creates a standard workflow run with its own run_id, context, and audit trail. It follows the same execution path as a manually triggered run.

Scheduled occurrences are independent. Design side-effecting steps to be idempotent when a schedule can fire again before earlier work has finished.

Scheduling and conditions. You can combine schedule with a top-level condition to create conditional scheduled workflows. A daily run, for example, can proceed only when new records are available. The schedule starts the workflow, and the condition gates execution.

→ Next: [Multi-Tenancy](/platform/multi-tenancy)