---
title: "Update Series"
method: PATCH
path: "/warehouse/schedules/series/{series_id}"
tags: ["WAREHOUSE_SCHEDULE"]
---

# Update Series

`PATCH /warehouse/schedules/series/{series_id}`

Edit a recurring series' template ("this and following events").

``from_schedule_id`` scopes the edit: that occurrence and every later one
change, everything before it is left as it is. Omitting it scopes the edit
from the current instant instead.

Time/config-only edits update the in-scope approved occurrences in place on
their own dates. Sending ``days_of_week`` and/or ``end_date`` reschedules
the series: the in-scope approved occurrences are replaced with a set
materialized from the new cadence (user-deleted occurrences stay deleted).
``timezone`` is immutable. Occurrences whose window conflicts are skipped
and reported in ``skipped``.

## Path parameters

- `series_id` integer, required

## Headers

- `x-tenant` string, required

## Request body

- SeriesUpdateRequest — Edit a recurring series' template ("all future events"). ``warehouse_name``, ``instance_id``, and ``timezone`` are fixed to the existing series and cannot change. ``days_of_week`` / ``end_date`` are optional: absent means unchanged; sending either reschedules the series — its occurrences from ``from_schedule_id`` onward are replaced with a set materialized from the new cadence (occurrences a user individually deleted stay deleted). Time/config-only edits update those occurrences in place on their own dates. Conflicting occurrences are skipped and reported either way.
  - `warehouse_configuration` WarehouseConfig
    - `warehouse_size` 'X-Small' | 'Small' | 'Medium' | 'Large' | 'X-Large' | '2X-Large' | '3X-Large' | '4X-Large' | '5X-Large' | '6X-Large'
    - `enable_query_acceleration` boolean, nullable
  - `schedule_type` 'manual' | 'block', required — One of: manual, block
  - `start_time_local` string, required — Local wall-clock "HH:MM"
  - `duration_minutes` integer, required
  - `days_of_week` string[], nullable — New weekday cadence; omit to keep the current days.
  - `end_date` string, date, nullable — New end date (at most 90 days from today); omit to keep the current end date.
  - `from_schedule_id` integer, nullable — The occurrence the edit was launched from. The edit applies to it and every later occurrence; earlier ones keep the schedule they already have. Omit to apply from now.

## Response `200`

Successful Response

- SeriesUpdateResponse — The persisted series (fields inlined) plus the future occurrences the edit rewrote in place. ``skipped`` collects occurrences left untouched because their new window conflicted.
  - `series_id` integer, required
  - `warehouse_name` string, required
  - `instance_id` string, nullable
  - `configuration` WarehouseConfig, required
    - `warehouse_size` 'X-Small' | 'Small' | 'Medium' | 'Large' | 'X-Large' | '2X-Large' | '3X-Large' | '4X-Large' | '5X-Large' | '6X-Large'
    - `enable_query_acceleration` boolean, nullable
  - `schedule_type` 'manual' | 'block', required
  - `days_of_week` string[], required
  - `start_time_local` string, required
  - `duration_minutes` integer, required
  - `timezone` string, required
  - `end_date` string, date, nullable
  - `status` 'active' | 'cancelled', required — Lifecycle of a recurring warehouse-schedule series. A series that would materialize zero occurrences is never persisted (creation fails with 400), so there is no rejected state here.
  - `created_by` integer, required
  - `created_at` string, date-time, nullable
  - `updated_at` string, date-time, nullable
  - `updated` ScheduleResponse[], required
    - `schedule_id` integer, required
    - `warehouse_name` string, required
    - `configuration` WarehouseConfig, required
      - `warehouse_size` 'X-Small' | 'Small' | 'Medium' | 'Large' | 'X-Large' | '2X-Large' | '3X-Large' | '4X-Large' | '5X-Large' | '6X-Large'
      - `enable_query_acceleration` boolean, nullable
    - `start_time` string, date-time, required
    - `end_time` string, date-time, required
    - `schedule_type` 'recommendation' | 'manual' | 'block' | 'auto_resize' | 'backoff', required
    - `status` 'pending' | 'approved' | 'rejected', required
    - `reason` string, required
    - `created_by` integer, required
    - `created_at` string, date-time, required
    - `updated_by` integer, nullable
    - `updated_at` string, date-time, nullable
    - `recurrence_pattern` unknown
    - `series_id` integer, nullable
    - `series_timezone` string, nullable
    - `resize_mode` 'dynamic' | 'scheduled'
  - `skipped` SeriesSkippedOccurrence[], required
    - `start_time` string, date-time, required
    - `end_time` string, date-time, required
    - `reason` string, required
    - `conflict` boolean

## Other responses

- `400` — Invalid request data
- `403` — Not authorized
- `404` — Schedule not found
- `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/revisions/4031762f858d/schema)
