List Schedules
List all configured cron schedules.
Response
Array of schedule objectsWhether schedule is active
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.
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).
Optional input data to override defaults
Response
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
Array of cron expression objectsHuman-readable description
Schedules using this cron
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
}
]
}
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
| Expression | Description |
0 9 * * * | Every day at 9:00 AM |
*/15 * * * * | Every 15 minutes |
0 */2 * * * | Every 2 hours |
0 0 * * 0 | Every Sunday at midnight |
0 9 * * 1-5 | Weekdays 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', {});
}
}
};