Siphondocs
Platform

Schedules

Run a resource on a cron — dispatched through the same durable path as a manual sync.

A schedule runs one resource of one connection on a cron cadence. Scheduled runs take the exact same durable path as manual ones, so they deliver to destinations and journal call logs identically.

schedule (cron, UTC) → scheduler tick → Restate ingress → durable run

Defining a schedule

Each schedule has a connection, a resource key, a 5-field cron expression, a timezone (default UTC), and an enabled flag. There's one schedule per (connection, resource).

The scheduler

The scheduler is a separate long-lived process (packages/worker/src/scheduler.ts), distinct from the Restate worker. Every 60 seconds it:

  1. reads all enabled schedules,
  2. selects the ones due now (cron match, evaluated in UTC),
  3. fire-and-forgets each to the Restate ingress as a schedule-triggered run.

The scheduler must be running

Without the scheduler process, enabled schedules never fire — the UI will show them as enabled but no runs appear. It needs DATABASE_URL and SIPHON_RESTATE_INGRESS.

Cursors and steady state

For an incremental resource, each scheduled run carries the watermark forward, so a frequent schedule keeps each window small. For a client-hash resource, a schedule is what makes change detection pay off — most runs skip everything and cost only a few list calls (see Sync & change filtering).

You can reset a connection's cursor from the connection detail page to force the next run to full-reload from initialWatermark.

On this page