---
title: "Move or re-time one Occurrence of a repeating schedule"
method: POST
path: "/signups/{id}/slots/{slotId}/move"
tags: ["Slots"]
---

# Move or re-time one Occurrence of a repeating schedule

`POST /signups/{id}/slots/{slotId}/move`

## Request

- Base URL: `https://thesignup.app/api/v1`
- URL: `https://thesignup.app/api/v1/signups/{id}/slots/{slotId}/move`
- Auth: HTTP bearer

Re-time one Occurrence: `start` / `end` (`HH:MM` in the signup's timezone) are required even when unchanged, `date` (`YYYY-MM-DD`) moves it to another day, `location` gives it a place when it moves to another day, and `note` is a private note for organizers, never shown to participants; `message` is added to the email and text participants receive. The Occurrence keeps its `seriesDate` and `shiftIndex` — they are its key — and becomes detached, so later Series edits leave it alone. Its registrations and Day Attendance move with it. Participants are notified; `notified` says how many. The slot must belong to a Series: a one-off slot is `400 bad_request` (edit it with `PATCH /signups/{id}/slots/{slotId}`). The account behind the credential must have a verified email, or the call is `403 forbidden`. Sending `date` at all (even the day it is already on) 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
- `slotId` string, uuid, required

## Request body

- MoveOccurrenceRequest
  - `start` string, required: `HH:MM` wall-clock start in the signup's timezone.
  - `end` string, required: `HH:MM` wall-clock end in the signup's timezone, after `start`.
  - `date` string, nullable: `YYYY-MM-DD`: the day to move the Occurrence to. Omit to re-time it where it is.
  - `location` string, nullable: This one Occurrence's place; only accepted together with a `date` that moves it to another day.
  - `note` string, nullable: A private note for organizers, kept on the Occurrence and never shown to participants.
  - `message` string, nullable: Added to the email and text participants receive about this change.

## Response `200`

The moved Occurrence and who was told

- OccurrenceWriteResponse
  - `slot` Occurrence, required
    - `id` string, uuid, required
    - `eventId` string, uuid, required
    - `startTime` string, date-time, required
    - `endTime` string, date-time, required
    - `maxParticipants` integer, required
    - `maxPerPerson` integer, required: The most spots one person may take on this slot. 1 (the default) is one spot per person; 0 is no per-person limit.
    - `title` string, nullable, required
    - `description` string, nullable, required
    - `location` string, nullable, required
    - `customField` object, nullable, required: The slot's own question, as stored. Read `question` for what the slot actually asks — a slot generated from a repeating shift may inherit the shift's question when this is null.
      - `name` string, required
      - `placeholder` string
      - `required` boolean, required
      - `type` 'short' | 'long', required
    - `question` object, nullable, required: The question participants are asked when taking this slot: the slot's own, else the repeating shift's. Null when nothing is asked.
      - `label` string, required
      - `placeholder` string: Example answer, shown as a hint in the answer box. Absent when none was given.
      - `required` boolean, required
    - `questionSource` 'own' | 'series' | 'null', nullable, required: "own" when `question` is the slot's own; "series" when inherited from its repeating shift; null when nothing is asked.
    - `createdAt` string, date-time, required
    - `seriesId` string, uuid, required
    - `seriesDate` string, required: The date the rule generated this Occurrence for, `YYYY-MM-DD`.
    - `shiftIndex` integer, required: Position in the Series' shift plan. `(seriesId, shiftIndex)` is the Shift.
    - `detached` boolean, required
    - `cancelledAt` string, date-time, nullable, required: When the Occurrence was cancelled, or null while it is live. A cancelled Occurrence keeps its registrations.
  - `notified` object, required: Who the write told: distinct participants, emails sent, texts sent. All zero when nothing needed telling, including a cancel of an already-cancelled Occurrence.
    - `recipients` integer, required
    - `emails` integer, required
    - `sms` integer, 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)
