Skip to main content
GET
/
api
/
v1
/
schedules
curl https://your-worker.workers.dev/api/v1/schedules \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "schedules": [
    {
      "name": "daily-report",
      "ensemble": "generate-daily-report",
      "cron": "0 9 * * *",
      "enabled": true,
      "lastRun": 1704009600000,
      "nextRun": 1704096000000
    },
    {
      "name": "hourly-sync",
      "ensemble": "sync-data",
      "cron": "0 * * * *",
      "enabled": true,
      "lastRun": 1704067200000,
      "nextRun": 1704070800000
    }
  ]
}

List Schedules

List all configured cron schedules.

Response

schedules
array
Array of schedule objects
schedules[].name
string
Schedule name
schedules[].ensemble
string
Ensemble to execute
schedules[].cron
string
Cron expression
schedules[].enabled
boolean
Whether schedule is active
schedules[].lastRun
number
Last execution timestamp
schedules[].nextRun
number
Next scheduled execution
curl https://your-worker.workers.dev/api/v1/schedules \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "schedules": [
    {
      "name": "daily-report",
      "ensemble": "generate-daily-report",
      "cron": "0 9 * * *",
      "enabled": true,
      "lastRun": 1704009600000,
      "nextRun": 1704096000000
    },
    {
      "name": "hourly-sync",
      "ensemble": "sync-data",
      "cron": "0 * * * *",
      "enabled": true,
      "lastRun": 1704067200000,
      "nextRun": 1704070800000
    }
  ]
}

Get Ensemble Schedules

Get all schedules for a specific ensemble.
ensemble
string
required
Ensemble name
curl https://your-worker.workers.dev/api/v1/schedules/generate-daily-report \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "ensemble": "generate-daily-report",
  "schedules": [
    {
      "name": "daily-report",
      "cron": "0 9 * * *",
      "enabled": true,
      "lastRun": 1704009600000,
      "nextRun": 1704096000000
    }
  ]
}

Trigger Schedule Manually

Manually trigger a scheduled ensemble (bypass cron timing).
name
string
required
Schedule name
input
object
Optional input data to override defaults

Response

id
string
Execution ID
schedule
string
Schedule name
ensemble
string
Ensemble executed
timestamp
number
Execution timestamp
curl -X POST https://your-worker.workers.dev/api/v1/schedules/daily-report/trigger \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "input": {
      "date": "2024-01-01"
    }
  }'
{
  "id": "exec_abc123def456",
  "schedule": "daily-report",
  "ensemble": "generate-daily-report",
  "timestamp": 1704067200000
}

List All Cron Expressions

List all unique cron expressions configured across schedules.

Response

crons
array
Array of cron expression objects
crons[].expression
string
Cron expression
crons[].description
string
Human-readable description
crons[].schedules
array
Schedules using this cron
crons[].nextRun
number
Next execution time
curl https://your-worker.workers.dev/api/v1/schedules/crons/list \
  -H "Authorization: Bearer YOUR_API_KEY"
{
  "crons": [
    {
      "expression": "0 9 * * *",
      "description": "Every day at 9:00 AM",
      "schedules": ["daily-report", "morning-digest"],
      "nextRun": 1704096000000
    },
    {
      "expression": "0 * * * *",
      "description": "Every hour",
      "schedules": ["hourly-sync"],
      "nextRun": 1704070800000
    },
    {
      "expression": "*/15 * * * *",
      "description": "Every 15 minutes",
      "schedules": ["frequent-check"],
      "nextRun": 1704067500000
    }
  ]
}

Cron Expression Format

Conductor uses standard cron format (5 fields):
* * * * *
│ │ │ │ │
│ │ │ │ └─ Day of week (0-6, 0=Sunday)
│ │ │ └─── Month (1-12)
│ │ └───── Day of month (1-31)
│ └─────── Hour (0-23)
└───────── Minute (0-59)

Examples

ExpressionDescription
0 9 * * *Every day at 9:00 AM
*/15 * * * *Every 15 minutes
0 */2 * * *Every 2 hours
0 0 * * 0Every Sunday at midnight
0 9 * * 1-5Weekdays at 9:00 AM
30 8 1 * *First day of month at 8:30 AM

Configuration

Configure in wrangler.toml:
[triggers]
crons = [
  "0 9 * * *",      # Daily at 9am
  "*/15 * * * *",   # Every 15 minutes
  "0 0 * * 0"       # Weekly on Sunday
]
Handle in worker:
export default {
  async scheduled(event: ScheduledEvent, env: Env): Promise<void> {
    const conductor = new Conductor({ env });

    // Determine which ensemble to run based on cron
    const cron = event.cron;

    if (cron === '0 9 * * *') {
      await conductor.executeEnsemble('daily-report', {
        date: new Date().toISOString()
      });
    } else if (cron === '*/15 * * * *') {
      await conductor.executeEnsemble('frequent-check', {});
    }
  }
};