trigger_type: "scheduled" so you can distinguish them from manual or API-triggered runs.
How schedules work
A schedule links a cron expression and a timezone to a workflow. At each scheduled time, Skyvern creates a new workflow run with the parameters you configured when creating the schedule. Each scheduled run is identical to a manually triggered run — same blocks, same parameters, same outputs. The only difference is thetrigger_type field, which is set to "scheduled" instead of "manual" or "api".
Cron expression format
Schedules use standard 5-field cron expressions:| Cron expression | Description |
|---|---|
0 9 * * 1-5 | Every weekday at 9:00 AM |
0 */6 * * * | Every 6 hours |
0 9 * * 1 | Every Monday at 9:00 AM |
0 0 1 * * | First day of every month at midnight |
*/30 * * * * | Every 30 minutes |
0 8,17 * * * | Twice daily at 8:00 AM and 5:00 PM |
Timezone handling
Schedules use IANA timezone identifiers (e.g.,America/New_York, Europe/London, Asia/Tokyo). If you don’t specify a timezone, it defaults to UTC.
Create a schedule
Send aPOST request to /api/v1/workflows/{workflow_permanent_id}/schedules with your cron expression and timezone.
All Python examples on this page assume you’ve initialized the client as shown above:
Request body
| Field | Type | Required | Description |
|---|---|---|---|
cron_expression | string | Yes | 5-field cron expression (minimum 5-minute interval) |
timezone | string | Yes | IANA timezone identifier (e.g., America/New_York) |
name | string | No | Human-readable name for the schedule |
description | string | No | Description of what this schedule does |
parameters | object | No | Workflow parameters to pass on each run |
enabled | boolean | No | Whether the schedule is active. Defaults to true |
Example response
| Field | Type | Description |
|---|---|---|
schedule.workflow_schedule_id | string | Unique identifier for this schedule (prefixed wfs_) |
schedule.organization_id | string | The organization that owns this schedule |
schedule.workflow_permanent_id | string | The workflow this schedule triggers |
schedule.cron_expression | string | The cron expression defining the recurrence |
schedule.timezone | string | IANA timezone for the cron expression |
schedule.enabled | boolean | Whether the schedule is active (true) or paused (false). Defaults to true on creation |
schedule.parameters | object | null | Workflow parameters passed to each run |
schedule.temporal_schedule_id | string | Internal identifier used by the scheduling engine |
schedule.name | string | null | Human-readable name |
schedule.description | string | null | Description of the schedule |
schedule.created_at | string | When the schedule was created |
schedule.modified_at | string | When the schedule was last updated |
schedule.deleted_at | string | null | When the schedule was deleted, if applicable |
next_runs | array | Upcoming execution times in UTC based on the cron expression and timezone |
trigger_type: "scheduled" and workflow_schedule_id pointing back to the schedule, so you can distinguish them from manual or API-triggered runs.
List schedules
To list all schedules in your organization:Example response
| Field | Type | Description |
|---|---|---|
schedules | array | List of schedule objects |
schedules[].workflow_schedule_id | string | Schedule identifier |
schedules[].workflow_permanent_id | string | The workflow this schedule triggers |
schedules[].workflow_title | string | Title of the associated workflow |
schedules[].enabled | boolean | Whether the schedule is active |
schedules[].next_run | string | Next scheduled execution time in UTC |
total_count | integer | Total number of schedules matching the query |
page | integer | Current page number |
page_size | integer | Number of results per page |
Get schedule details
Retrieve a single schedule, including upcoming run times innext_runs.
schedule object with a next_runs array.
Update a schedule
Change the cron expression, timezone, name, description, or parameters.Enable and disable a schedule
You can pause a schedule by disabling it. Compared to deleting a schedule, this keeps its configuration saved to be re-enabled at any time.enabled set to false or true.
Delete a schedule
Permanently remove a schedule. This cannot be undone. Runs that were already triggered by this schedule are not affected.Example response
Limits
| Self-hosted (OSS) | Skyvern Cloud | |
|---|---|---|
| Schedules per workflow | Unlimited | Configurable per plan |
| Total schedules per org | Unlimited | Configurable per plan |
| Minimum interval | 5 minutes | 5 minutes |
What’s next
Cloud UI: Scheduling
Create and manage schedules from the Skyvern dashboard
Cost Control
Set step limits and optimize scheduled workflow costs
Webhooks
Get notified when scheduled runs complete
Run History
View and filter scheduled run results

