---
title: "Set a day's own Day Question or place"
method: PATCH
path: "/signups/{id}/days/{dayId}"
tags: ["Days"]
---

# Set a day's own Day Question or place

`PATCH /signups/{id}/days/{dayId}`

## Request

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

`question` sets this day's own Day Question (`null` falls back to the repeating schedule's default); it tells nobody. `location` (repeating schedules only) gives every live Shift on the date its place — an ordinary signup is `404` — and emails the date's participants when the place they go to changes; `message` is added to that email. A `location` needs the account behind the credential to have a verified email (`403 forbidden` otherwise), and 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. With both fields, the place is written first, so a refused place writes nothing. A day of another signup is `404`.

## Path parameters

- `id` string, uuid, required
- `dayId` string, uuid, required

## Request body

- UpdateDayRequest
  - `question` object, nullable: This day's own Day Question, `{ label, placeholder?, required }`. `null` clears it, so the repeating schedule's default (if any) is asked again. Tells nobody.
    - `label` string, required
    - `placeholder` string
    - `required` boolean, required
  - `location` string, nullable: Repeating schedules only: the place for every live Shift on this date, shown to participants. `""` or `null` clears it back to the schedule's default, then the signup's. Participants are told when the place they go to changes.
  - `message` string, nullable: Sent with `location` only: added to the email and text participants receive about the new place. Up to 2000 characters.

## Response `200`

The day, and what the place change did

- UpdateDayResponse
  - `day` Day, required
    - `id` string, uuid, required
    - `eventId` string, uuid, required
    - `date` string, required: The calendar date, `YYYY-MM-DD`, in the signup's timezone.
    - `seriesId` string, uuid, nullable, required: The Slot Series that generated this day, or null for a day added by hand or an ordinary signup's day.
    - `cancelledAt` string, date-time, nullable, required: When the day was called off, or null. A cancelled day keeps its slots, items and registrations. A repeating schedule's date is cancelled through its Shifts instead and keeps null here; read `noLiveTime`.
    - `noLiveTime` boolean, required: True when the day had times and none of them is live any more — participants are not offered it, exactly as a cancelled day.
    - `question` object, nullable, required: The Day Question asked once per day of whoever signs up for anything that day: the day's own, else the repeating schedule's default. Null when none.
      - `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: Whose `question` it is: the day's own, or the schedule's default it inherits. Null when there is no question.
    - `isPast` boolean, required: Whether the date is before today in the signup's timezone.
  - `placeChange` object: Present only when the request sent a `location`.
    - `updated` integer, required: Live Shifts on the date that took the place.
    - `previousPlace` string, nullable, required: Where participants were told to go before.
    - `place` string, nullable, required: Where they go now, after the schedule's and signup's fallbacks.
    - `notified` object, required: Who was told. Zero when the place participants go to did not change.
      - `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)
