---
title: "Create Schedule Endpoint"
method: POST
path: "/studio/schedules"
tags: ["AI_STUDIO", "SCHEDULES"]
---

# Create Schedule Endpoint

`POST /studio/schedules`

Create a new scheduled report.

- **name**: Name for this schedule
- **session_id**: Session to report on
- **content_scope**: 'last_answer' or 'full_chat'
- **frequency**: 'daily', 'weekly', 'monthly', or 'custom'
- **hour**: Hour to run (0-23 UTC)
- **emails**: Recipients

## Request body

- AppSchemasAiPlaygroundSchedulesScheduleCreateRequest — Request to create a new scheduled report.
  - `name` string, required — Name for this schedule
  - `session_id` string, required — Session ID to schedule reports for
  - `content_scope` 'first_query' | 'last_answer' | 'full_chat' — What content to include in the scheduled report.
  - `frequency` 'daily' | 'weekly' | 'monthly' | 'custom' — Predefined schedule frequencies.
  - `custom_cron` string, nullable — Custom cron expression (only for 'custom' frequency)
  - `hour` integer — Hour to run (0-23 UTC)
  - `day_of_week` integer, nullable — Day of week for weekly frequency (0=Sunday … 6=Saturday). Only valid when frequency='weekly'. When omitted, defaults to Monday (1) to preserve existing behaviour.
  - `day_of_month` integer, nullable — Day of month for monthly frequency (1-31). Only valid when frequency='monthly'. When omitted, defaults to the 1st. Follows standard cron semantics: schedules with day_of_month=29/30/31 only fire in months that contain that day (so day=31 skips February, April, June, September, November). Matches APScheduler's CronTrigger.from_crontab so the polled next_run and the registered periodic task stay in agreement.
  - `emails` string[], nullable — Email addresses to send reports to
  - `slack_webhook_id` integer, nullable — Notification ID for Slack webhook delivery. Must be a positive integer; 0 is reserved for the update path (clear selection).

## Response `201`

Successful Response

- AppSchemasAiPlaygroundSchedulesScheduleResponse — Response containing schedule details.
  - `id` string, uuid, required
  - `name` string, required
  - `session_id` string, required
  - `content_scope` 'first_query' | 'last_answer' | 'full_chat', required — What content to include in the scheduled report.
  - `cron_expr` string, required
  - `destination_type` 'email' | 'slack' | 'multi', required — How to deliver the scheduled report. Derived from `destination_config` at save time — `MULTI` means both emails and a Slack webhook are configured on the same schedule.
  - `emails` string[], required
  - `slack_webhook_id` integer, nullable
  - `enabled` boolean, required
  - `last_run` string, date-time, nullable, required
  - `next_run` string, date-time, nullable, required
  - `created_by` integer, required
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required
  - `day_of_week` integer, nullable — Cron weekday (0=Sunday … 6=Saturday) when frequency is weekly
  - `day_of_month` integer, nullable — Cron day-of-month (1-31) when frequency is monthly

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.net/myaltimate/apis/fastapi.md) · [All operations](https://skmtc.net/myaltimate/apis/fastapi/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/myaltimate/fastapi/versions/aab3fe5c9f05/schema)
