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

# Schedules

> Run a playbook automatically — on a cadence you pick, delivered to email and Slack.

A **schedule** runs a [playbook](/features/artifacts/playbooks) automatically — once at a set time, or daily, weekly, or monthly. Each run produces that playbook's [artifacts](/features/artifacts) in its [project](/features/projects), just like running it by hand, and can deliver them straight to your inbox or a Slack channel. Set up the Monday-morning recap once and it lands before anyone asks for it.

<Frame caption="The Schedules page — every schedule, with its playbook and next run">
  <img src="https://mintcdn.com/summation-676748f5/bD5B6OO2CVOWNhOR/images/features/schedules/schedules-home.png?fit=max&auto=format&n=bD5B6OO2CVOWNhOR&q=85&s=ba31d3df3f29bfed3f9b99777b866186" alt="The Schedules page at /schedules titled 'Schedules' with the subtitle 'Create and manage your schedules', a New schedule button in the top-right, and a search control. A table lists schedules with columns Name, Playbook, Last run, Next run, and Created by; the 'Olympics Medals Leaderboard' row is subtitled 'Once on Aug 15, 2026 at 12:30 AM…', shows Last run 'Never' and Next run 'Aug 15, 2026', and has an open row menu with Edit, Pause, Run now, and Delete in red; the 'Olympics Player' row shows Last run 'Aug 13, 2026' with a green 'Running' pill for Next run; and a third row shows Last run 'Aug 6, 2026' with a dash for Next run." width="1996" height="1212" data-path="images/features/schedules/schedules-home.png" />
</Frame>

**Where each action lives in the UI** (for telling users where to click):

* **Schedules home**: the **Schedules** entry in the left nav sidebar (`/schedules`) — a table with **Name** (the cadence is the row's subtitle), **Playbook**, **Last run**, **Next run**, and **Created by**, plus **Search** and a **New schedule** button at the top-right. Each row has a **⋯** menu: **Edit**, **Pause** / **Resume**, **Run now**, **Delete**.
* **Schedule details**: click a row to open the right-hand sidebar (`/schedules?scheduleId={id}`) — the cadence, **Next run** (or **Status** once it's terminal), **Parameters**, **Recipients**, and a **History** timeline of past runs, with **Edit**, **Pause** / **Resume**, **Run now**, and a delete control.
* **New schedule wizard** — **Schedule Playbook**, three steps: (1) **pick a playbook** from a searchable list showing each playbook's project; (2) fill in its **Runtime Parameters**, if it has any; (3) set **Name**, **Frequency**, and delivery. **Previous** steps back; the final button is **Create schedule**.
* **From a playbook**: the **Schedule** button in a playbook's toolbar, or **Schedule** in its run dialog, opens the same wizard with that playbook already picked. See [Schedule a playbook](/features/artifacts/playbooks#schedule-a-playbook).
* **Frequency** in the UI is `Once`, `Daily`, `Weekly`, or `Monthly`. Weekly adds a **multi-select weekday picker** (one or more days), monthly a day-of-month picker, and `Once` a date. Times come in 15-minute increments (default `9:00 AM`) in a **selectable timezone**, which defaults to the browser's.
* The **API** accepts a wider cadence set than those four UI options: `cron`, `interval`, `one_time`, `daily`, `weekly`, `biweekly`, `monthly`, `month_end`, and `yearly`. Note the one-time value is `one_time`, not `once`.
* Schedule states: **active** and **paused** are the only stored states. A one-time schedule that has run reads **completed**, or **failed** if its single run failed; a **recurring** schedule stays **active** even when its runs keep failing. A schedule mid-run shows **Running**.
* Email recipients can unsubscribe themselves from a signed link in the email — no sign-in needed.

<Warning>
  The Schedules home (`/schedules`) and the per-playbook schedule indicator are gated by the `ui_schedules_home_v1` feature flag; playbook surfaces themselves are gated by `ui_project_runbooks`. If a workspace has one off, that part of the UI won't appear.
</Warning>

## Create a schedule

<Tabs sync={false}>
  <Tab title="In the app">
    Click **New schedule** (top-right of `/schedules`) and pick the playbook to run — the list is searchable and shows each playbook's project. You can also start from the playbook itself: **Schedule** in its toolbar or run dialog opens the same wizard with the playbook already chosen.

    <Frame caption="Pick the playbook to run">
      <img src="https://mintcdn.com/summation-676748f5/bD5B6OO2CVOWNhOR/images/features/schedules/schedule-pick-playbook.png?fit=max&auto=format&n=bD5B6OO2CVOWNhOR&q=85&s=4c00ca54e9d4c17e319736d55e421cda" alt="The first step of the 'Schedule Playbook' dialog — a search box above a list of playbook cards, each with a playbook icon, a title, and the project it belongs to: 'Twenty Params' in Jojo Test, 'Executive WBR' in Verified HTML Reports, 'Faire CPA Model' in ZR Excel Test 2, and 'Plushie Sales Analysis' in My Project." width="918" height="1310" data-path="images/features/schedules/schedule-pick-playbook.png" />
    </Frame>

    If the playbook takes **runtime parameters** — a week-ending date, a market, a team — the next step asks for the values this schedule should use on every run.

    <Frame caption="Set the parameters each run will use">
      <img src="https://mintcdn.com/summation-676748f5/bD5B6OO2CVOWNhOR/images/features/schedules/schedule-parameters.png?fit=max&auto=format&n=bD5B6OO2CVOWNhOR&q=85&s=b6da52ebc638f1c1c9c08be830618fc7" alt="The second step of the 'Schedule Playbook' dialog for 'Executive WBR' — 'Weekly executive business review for Tech SaaS. Renders a single standalone HTML page (with Chart.js bundled inline) summarizing ARR movements, pipeline funnel, bookings vs plan, quarterly forecast, and trailing forecast-driver events for the chosen week-ending date.' It shows Recent report: none, Duration: none, and a Runtime Parameters section with a date field set to 8/14/2026 and an open calendar picker, with Previous and Schedule buttons." width="918" height="1308" data-path="images/features/schedules/schedule-parameters.png" />
    </Frame>
  </Tab>

  <Tab title="Via the API">
    <Card title="POST /v1/schedules" icon="code" href="/api-reference/schedules/create-schedule" horizontal>
      Create a schedule for a playbook.
    </Card>
  </Tab>
</Tabs>

## Set the cadence

<Tabs sync={false}>
  <Tab title="In the app">
    Give the schedule a **Name**, then pick a **Frequency**:

    | Frequency   | What you set                                                                   |
    | ----------- | ------------------------------------------------------------------------------ |
    | **Once**    | A date and time — the schedule runs a single time, then shows as **completed** |
    | **Daily**   | A time of day                                                                  |
    | **Weekly**  | One or more weekdays, plus a time                                              |
    | **Monthly** | A day of the month, plus a time                                                |

    Times are picked in 15-minute increments and interpreted in a timezone you choose — your browser's by default — which is stored with the schedule so runs stay put when you travel.

    <Frame caption="Name, frequency, and delivery">
      <img src="https://mintcdn.com/summation-676748f5/bD5B6OO2CVOWNhOR/images/features/schedules/schedule-config.png?fit=max&auto=format&n=bD5B6OO2CVOWNhOR&q=85&s=b05b67b7af2d6554f6e4aca8a8569b3a" alt="The final step of the 'Schedule Playbook' dialog, with a Name field set to 'Olympics Medals Leaderboard', a Frequency dropdown set to Once with a date field (8/16/2026) and a 'Select time' field beside it, then 'Email notification' and 'Slack notification' rows each with an off toggle, and Previous and a greyed-out 'Create schedule' button." width="910" height="1306" data-path="images/features/schedules/schedule-config.png" />
    </Frame>
  </Tab>

  <Tab title="Via the API">
    <Card title="PUT /v1/schedules/{scheduleId}" icon="code" href="/api-reference/schedules/update-schedule" horizontal>
      Update a schedule's cadence, parameters, or delivery.
    </Card>

    `PUT` is a **full replace** — the body is a complete create request, so any `config` field you leave out resets to its default (`params={}`, `output_folder="/Reports"`, `email_recipients=[]`, `paused=false`). A PUT that carries only a new cadence silently wipes the recipients. **Read the schedule first, change the fields you mean to, and send the whole object back.**
  </Tab>
</Tabs>

## Deliver the results

<Tabs sync={false}>
  <Tab title="In the app">
    A scheduled run always saves its artifacts into the project. Turn on either notification to push them out as well.

    **Email notification** — add recipients, then pick which artifacts to attach. Each artifact has a single **attach** checkbox; a link to the artifact is always included, whether or not it's attached. Recipients must be on your workspace's allowed email domains. Recipients can unsubscribe themselves from a link in the email.

    **Slack notification** — post to channels or people in a connected [Slack workspace](/features/connectors), with the same per-artifact attach checkbox.

    <Columns cols={2}>
      <Frame caption="Email recipients and attachments">
        <img src="https://mintcdn.com/summation-676748f5/bD5B6OO2CVOWNhOR/images/features/schedules/schedule-email.png?fit=max&auto=format&n=bD5B6OO2CVOWNhOR&q=85&s=68c977aab80be3621f03d4d86e54ca58" alt="The Email notification section toggled on, showing an 'Add recipients' field and an 'Included Attachments' list with one row: 'Executive WBR', subtitled HTML, with a PDF format chip and a checked include checkbox." width="872" height="494" data-path="images/features/schedules/schedule-email.png" />
      </Frame>

      <Frame caption="Slack channels and attachments">
        <img src="https://mintcdn.com/summation-676748f5/bD5B6OO2CVOWNhOR/images/features/schedules/schedule-slack.png?fit=max&auto=format&n=bD5B6OO2CVOWNhOR&q=85&s=050aabdf84ae7c46cd10223b516c169f" alt="The Slack notification section toggled on, showing a recipients field containing a '# general' channel chip and an 'Included Attachments' list with 'Executive WBR', subtitled HTML, a PDF format chip, and a checked include checkbox." width="874" height="480" data-path="images/features/schedules/schedule-slack.png" />
      </Frame>
    </Columns>

    **How each artifact arrives.** Formats that are already final ship as themselves; the rest render to PDF:

    | Artifact                                            | Attached as          |
    | --------------------------------------------------- | -------------------- |
    | **[Report](/features/artifacts/reports)** (`.sdoc`) | PDF                  |
    | **HTML page**                                       | PDF                  |
    | **[Deck](/features/artifacts/decks)** (`.sdeck`)    | PowerPoint (`.pptx`) |
    | **Workbook** (`.xlsx`)                              | Excel                |
    | **PDF**                                             | PDF                  |

    Playbooks that declare their outputs get a row per output. For playbooks that don't, the scheduler discovers the artifacts after the run and applies these same per-kind defaults.
  </Tab>

  <Tab title="Via the API">
    <Card title="POST /v1/schedules" icon="code" href="/api-reference/schedules/create-schedule" horizontal>
      Set email recipients when creating a schedule.
    </Card>

    Recipients must be on the workspace's invite-domain allowlist — a disallowed address returns `400 RECIPIENT_DOMAIN_NOT_ALLOWED`. **Slack can't be set through this call**: the public config model has no `slack_recipients` field and silently drops one if you send it. Per-artifact delivery isn't exposed here either — it requires hand-building `config.output_config.email.artifacts`.
  </Tab>
</Tabs>

## Find and manage schedules

<Tabs sync={false}>
  <Tab title="In the app">
    The **Schedules** page (`/schedules`, shown above) lists your schedules with the playbook each one runs, when it last ran, when it runs next, and who created it — with search. Click a row to open its details sidebar: the cadence, next run, the parameter values it runs with, and a history of past runs.

    <Frame caption="A schedule's details">
      <img src="https://mintcdn.com/summation-676748f5/bD5B6OO2CVOWNhOR/images/features/schedules/schedule-details.png?fit=max&auto=format&n=bD5B6OO2CVOWNhOR&q=85&s=0e91c94481f480b6268a3078daa9d07e" alt="The schedule details sidebar for 'Olympics Player', subtitled with its playbook name 'Olympics Player', with delete and close controls at the top-right and Edit, Pause (greyed out), and Run now buttons below. It shows Schedule 'Once on Aug 14, 2026 at 12:00 AM PDT', Next run with a green 'Running' pill, Parameters listing 'Country: Korea', 'Time Scope: All Years', and 'Top N Athletes: 25', and a History timeline with a green in-progress run for 'Olympics Player' at 'Aug 13, 9:34 PM PDT' marked 'In progress'." width="874" height="1052" data-path="images/features/schedules/schedule-details.png" />
    </Frame>

    Each schedule's **⋯** menu (and the sidebar) holds the rest:

    | Action                 | What it does                                                           |
    | ---------------------- | ---------------------------------------------------------------------- |
    | **Edit**               | Reopen the wizard to change the cadence, parameters, or delivery       |
    | **Pause** / **Resume** | Stop future runs without deleting the schedule, then start them again  |
    | **Run now**            | Run the playbook immediately, without waiting for the next occurrence  |
    | **Delete**             | Remove the schedule. Artifacts it already produced stay in the project |
  </Tab>

  <Tab title="Via the API">
    <CardGroup cols={2}>
      <Card title="GET /v1/schedules" icon="code" href="/api-reference/schedules/list-schedules" horizontal>
        List schedules.
      </Card>

      <Card title="GET /v1/schedules/{scheduleId}" icon="code" href="/api-reference/schedules/show-schedule" horizontal>
        Show a single schedule.
      </Card>

      <Card title="POST /v1/schedules/{scheduleId}/pause" icon="code" href="/api-reference/schedules/pause-schedule" horizontal>
        Pause a schedule.
      </Card>

      <Card title="POST /v1/schedules/{scheduleId}/resume" icon="code" href="/api-reference/schedules/resume-schedule" horizontal>
        Resume a schedule.
      </Card>
    </CardGroup>

    <Card title="DELETE /v1/schedules/{scheduleId}" icon="code" href="/api-reference/schedules/delete-schedule" horizontal>
      Delete a schedule. Requires `confirm=true`.
    </Card>
  </Tab>
</Tabs>

## Run history

<Tabs sync={false}>
  <Tab title="In the app">
    A schedule's **History** timeline — in its details sidebar, shown above — lists each run with what it produced; open a run to jump to the artifact, or to the chat behind it. Runs in flight show as **In progress** with a live dot, finished runs are check-marked, and a failed run carries its reason.

    A schedule itself reads as **active** or **paused**; a one-time schedule that has already run reads **completed**, or **failed** if its single run failed. A recurring schedule stays **active** even when its runs keep failing. Runs from a schedule also appear in the **Runs** tab on the [Playbooks](/features/artifacts/playbooks#run-history) page, alongside runs people started by hand.
  </Tab>

  <Tab title="Via the API">
    <Card title="GET /v1/schedules/{scheduleId}/runs" icon="code" href="/api-reference/schedules/list-schedule-runs" horizontal>
      List a schedule's runs.
    </Card>

    <Card title="POST /v1/schedules/{scheduleId}/runs" icon="code" href="/api-reference/schedules/run-schedule-now" horizontal>
      Run a schedule's playbook immediately.
    </Card>
  </Tab>
</Tabs>
