> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sixtyfour.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Workflow Schedules

> Create, update, and delete cron-based schedules that trigger workflow runs automatically.

## Use case

Trigger a workflow on a recurring cadence without polling or external cron infrastructure. Use these endpoints to create, list, inspect, update, and delete schedules bound to a workflow.

<Card title="API Reference" icon="code" href="/api-reference/workflow-schedules/create-schedule">
  See the full request/response schema and parameters in the API Reference.
</Card>

## Pricing

Scheduled runs are billed the same as manual runs. See [Credits & Pricing Guide](/guides/credits-and-pricing) for credit costs.

## Errors

For error responses (400, 401, 403, 422, etc.), see [Handling Errors](/api-reference/errors).

## Schedule definition

A schedule binds a `workflow_id` to a `cron_expression` and `timezone`:

* `workflow_id` — the workflow to run. The workflow must already exist.
* `name` — required, up to 120 characters.
* `cron_expression` — standard 5-field cron (`minute hour day month weekday`).
* `timezone` — IANA timezone, e.g. `America/Los_Angeles`. Defaults to `UTC`.
* `description` — optional free-form text.
* `is_active` — defaults to `true`. Set to `false` to save a schedule without activating it.

<Note>A schedule is bound to the creating user or API key. If that entity loses access to the organization, the schedule is automatically paused and `disabled_reason` is set on the response.</Note>

## Create schedule

Create a new schedule for a workflow.

```http theme={null}
POST https://api.sixtyfour.ai/schedules
```

Required body fields: `workflow_id`, `name`, and `cron_expression`.

### Example request

```json theme={null}
{
  "workflow_id": "wf_abc123",
  "name": "Daily lead refresh",
  "cron_expression": "0 9 * * *",
  "timezone": "America/New_York",
  "description": "Re-enrich the prospect list every morning"
}
```

### Example response

```json theme={null}
{
  "id": "a1b2c3d4-5e6f-4789-a123-b4c5d6e7f890",
  "workflow_id": "wf_abc123",
  "name": "Daily lead refresh",
  "description": "Re-enrich the prospect list every morning",
  "cron_expression": "0 9 * * *",
  "timezone": "America/New_York",
  "is_active": true,
  "disabled_reason": null,
  "created_by": "f9e8d7c6-b5a4-4321-9876-543210fedcba",
  "api_key_id": null,
  "next_run_times": [
    "2026-07-17T13:00:00Z",
    "2026-07-18T13:00:00Z",
    "2026-07-19T13:00:00Z"
  ],
  "created_at": "2026-07-16T18:00:00Z",
  "updated_at": "2026-07-16T18:00:00Z"
}
```

***

## List schedules

Retrieve all schedules for your organization.

```http theme={null}
GET https://api.sixtyfour.ai/schedules
```

Optional query parameter: `workflow_id` — filter to schedules for a single workflow.

***

## Get schedule

Retrieve a single schedule by ID.

```http theme={null}
GET https://api.sixtyfour.ai/schedules/{schedule_id}
```

***

## Update schedule

Update a schedule's name, cadence, timezone, description, or active state.

```http theme={null}
PATCH https://api.sixtyfour.ai/schedules/{schedule_id}
```

All body fields (`name`, `cron_expression`, `timezone`, `description`, `is_active`) are optional — only include what you want to change.

<Note>Reactivating a schedule that was auto-paused also transfers ownership to the reactivating user or API key.</Note>

### Example request

```json theme={null}
{
  "is_active": false
}
```

***

## Delete schedule

Permanently delete a schedule.

```http theme={null}
DELETE https://api.sixtyfour.ai/schedules/{schedule_id}
```

<Note>Deleting a schedule does not affect the underlying workflow or its run history.</Note>

***

## Example usage

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST "https://api.sixtyfour.ai/schedules" \
    -H "x-api-key: YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "workflow_id": "WORKFLOW_ID",
      "name": "Daily lead refresh",
      "cron_expression": "0 9 * * *",
      "timezone": "America/New_York"
    }'
  ```

  ```python Python theme={null}
  import requests

  API_KEY = "YOUR_API_KEY"
  BASE_URL = "https://api.sixtyfour.ai"
  headers = {"x-api-key": API_KEY, "Content-Type": "application/json"}

  response = requests.post(
      f"{BASE_URL}/schedules",
      headers=headers,
      json={
          "workflow_id": "WORKFLOW_ID",
          "name": "Daily lead refresh",
          "cron_expression": "0 9 * * *",
          "timezone": "America/New_York",
      },
  )
  response.raise_for_status()
  schedule = response.json()
  next_run = schedule["next_run_times"][0] if schedule["next_run_times"] else "not yet computed"
  print(f"Created schedule {schedule['id']}, next run at {next_run}")
  ```

  ```javascript JavaScript theme={null}
  const API_KEY = "YOUR_API_KEY";
  const BASE_URL = "https://api.sixtyfour.ai";
  const headers = { "x-api-key": API_KEY, "Content-Type": "application/json" };

  const response = await fetch(`${BASE_URL}/schedules`, {
    method: "POST",
    headers,
    body: JSON.stringify({
      workflow_id: "WORKFLOW_ID",
      name: "Daily lead refresh",
      cron_expression: "0 9 * * *",
      timezone: "America/New_York",
    }),
  });
  if (!response.ok) {
    throw new Error(`Failed to create schedule: ${await response.text()}`);
  }
  const schedule = await response.json();
  const nextRun = schedule.next_run_times[0] ?? "not yet computed";
  console.log(`Created schedule ${schedule.id}, next run at ${nextRun}`);
  ```
</CodeGroup>
