---
title: "create schedule"
method: POST
path: "/w/{workspace}/schedules/create"
tags: ["schedule"]
---

# create schedule

`POST /w/{workspace}/schedules/create`

## Path parameters

- `workspace` string, required

## Request body

- NewSchedule
  - `path` string, required — The unique Windmill path for this schedule. Must be of the form `u/<user>/<path>` or `f/<folder>/<path>`.
  - `schedule` string, required — Cron expression with 6 fields (seconds, minutes, hours, day of month, month, day of week). Example '0 0 12 * * *' for daily at noon
  - `timezone` string, required — IANA timezone for the schedule (e.g., 'UTC', 'Europe/Paris', 'America/New_York')
  - `script_path` string, required — Path to the script or flow to execute when triggered
  - `is_flow` boolean, required — True if script_path points to a flow, false if it points to a script
  - `args` ScriptArgs, required — The arguments to pass to the script or flow
  - `enabled` boolean — Whether the schedule is currently active and will trigger jobs
  - `on_failure` string, nullable — Path to a script or flow to run when the scheduled job fails
  - `on_failure_times` number, nullable — Number of consecutive failures before the on_failure handler is triggered (default 1)
  - `on_failure_exact` boolean, nullable — If true, trigger on_failure handler only on exactly N failures, not on every failure after N
  - `on_failure_extra_args` ScriptArgs — The arguments to pass to the script or flow
  - `on_recovery` string, nullable — Path to a script or flow to run when the schedule recovers after failures
  - `on_recovery_times` number, nullable — Number of consecutive successes before the on_recovery handler is triggered (default 1)
  - `on_recovery_extra_args` ScriptArgs — The arguments to pass to the script or flow
  - `on_success` string, nullable — Path to a script or flow to run after each successful execution
  - `on_success_extra_args` ScriptArgs — The arguments to pass to the script or flow
  - `ws_error_handler_muted` boolean — If true, the workspace-level error handler will not be triggered for this schedule's failures
  - `retry` Retry — unresolved $ref
  - `no_flow_overlap` boolean — If true, skip this schedule's execution if the previous run is still in progress (prevents concurrent runs)
  - `summary` string, nullable — Short summary describing the purpose of this schedule
  - `description` string, nullable — Detailed description of what this schedule does
  - `tag` string, nullable — Worker tag to route jobs to specific worker groups
  - `paused_until` string, date-time, nullable — ISO 8601 datetime until which the schedule is paused. Schedule resumes automatically after this time
  - `cron_version` string, nullable — Cron parser version. Use 'v2' for extended syntax with additional features
  - `dynamic_skip` string, nullable — Path to a script that validates scheduled datetimes. Receives scheduled_for datetime and returns boolean to skip (true) or run (false)
  - `permissioned_as` string — The user or group this schedule runs as. Used during deployment to preserve the original schedule owner.
  - `preserve_permissioned_as` boolean — When true and the caller is a member of the 'wm_deployers' group, preserves the original permissioned_as value instead of overwriting it.
  - `labels` string[]

## Response `201`

schedule created

---

[API](https://skmtc.net/windmill/apis/windmill-api.md) · [All operations](https://skmtc.net/windmill/apis/windmill-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/windmill/windmill-api/revisions/5f7e0c3a8f59/schema)
