---
title: "Edit one Shift of a repeating schedule, and its place or Question"
method: PATCH
path: "/signups/{id}/slot_series/{seriesId}"
tags: ["Slots"]
---

# Edit one Shift of a repeating schedule, and its place or Question

`PATCH /signups/{id}/slot_series/{seriesId}`

## Request

- Base URL: `https://thesignup.app/api/v1`
- URL: `https://thesignup.app/api/v1/signups/{id}/slot_series/{seriesId}`
- Auth: HTTP bearer

Edit the Series' plan for one Shift: `shiftIndex` (and `weekday` on a weekly rule) names it, `start` / `end` (`HH:MM` in the signup's timezone) are required even when unchanged, and `label`, `capacity`, `location` and `question` are optional (`label: ""` clears the name; `question: null` clears the Series Question). `scope: "all"` changes every Occurrence of the Shift; `scope: "following"` with a `fromDate` (`YYYY-MM-DD`) changes only Occurrences on or after it and leaves earlier ones as they were. Detached Occurrences keep their own edits. `location` is the Series' default place and does not obey `scope`. Lowering `capacity` below seats already taken is `400 bad_request` and nothing is written. Participants whose time or place changes are notified; `message` is an optional note added to that email, and `notified` reports who was told. The account behind the credential must have a verified email, or the call is `403 forbidden`. Moving the default place is behind a pre-GA rollout for the person an OAuth token acts as (`403 forbidden` when they are outside it); an API key is not checked.

## Path parameters

- `id` string, uuid, required
- `seriesId` string, uuid, required

## Request body

- UpdateSlotSeriesRequest
  - `shiftIndex` integer, required
  - `weekday` union
    - 0
    - 1
    - 2
    - 3
    - 4
    - 5
    - 6
  - `start` string, required
  - `end` string, required
  - `label` string
  - `capacity` integer
  - `location` string, nullable
  - `question` object, nullable
    - `label` string, required
    - `placeholder` string
    - `required` boolean, required
  - `scope` 'all' | 'following', required
  - `fromDate` string, nullable
  - `message` string, nullable

## Response `200`

What the edit changed

- UpdateSlotSeriesResponse
  - `updated` integer, required: Occurrences the edit changed.
  - `earlierUnchanged` integer, required: With `scope: "following"`, the Occurrences before `fromDate` that were left as they were.
  - `skippedExceptions` integer, required: Detached Occurrences, which keep their own edits and are not touched by a Series edit.
  - `notified` object, required: Who the edit told: distinct participants, emails sent, texts sent.
    - `recipients` integer, required
    - `emails` integer, required
    - `sms` integer, required
  - `placeChange` object: Present only when the request sent a `location`.
    - `previousDefault` string, nullable, required
    - `nextDefault` string, nullable, required
    - `inheritingSlotIds` string[], required

## Other responses

- `400`: Bad request — body or path could not be parsed
- `401`: Unauthenticated — credentials missing, malformed, invalid, or revoked
- `403`: Forbidden — credentials valid but lack the required scope
- `404`: Not found
- `422`: Validation failed — request body / query / path is structurally wrong
- `429`: Rate limited or daily ceiling exceeded
- `500`: Internal server error

---

[API](https://skmtc.dev/thesignup/apis/thesignup-api.md) · [All operations](https://skmtc.dev/thesignup/apis/thesignup-api/llms.txt) · [OpenAPI document](https://skmtc.dev/thesignup/apis/thesignup-api/revisions/c6da7cf92172?raw)
