---
title: "Edit a registration"
method: PATCH
path: "/signups/{id}/registrations/{rid}"
tags: ["Participants"]
---

# Edit a registration

`PATCH /signups/{id}/registrations/{rid}`

## Request

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

Edit one person's registration on the signup: name, email, phone, attendees, name visibility, and the days they attend. Supply only the fields to change; at least one is required (422 otherwise). `rid` is the registration's `id` from `GET /signups/{id}/registrations`; a registration of another signup is 404. Works on an Attend-only registration (one with no Commitments). Notifies nobody. Returns the registration.

## Path parameters

- `id` string, uuid, required
- `rid` string, uuid, required

## Request body

- UpdateRegistrationRequest
  - `name` string: The person's name as the organizer sees it, and as the public list shows it when `nameVisible`.
  - `email` string, email: The person's address. Written directly, as the dashboard's edit does: no confirmation email goes to either address. Another registration on this signup already using it is a 409.
  - `phone` string, nullable: The person's phone, or null to clear it. A number different from the one on file turns their SMS consent off: they are not texted until they opt in again.
  - `attendees` integer: How many people this registration covers, the person included. At most the signup's `maxAttendeesPerSignup` (400 otherwise), and within the signup's capacity.
  - `nameVisible` boolean: Whether the person's name is shown on the public signup page's list of who signed up.
  - `days` string[]: The event days (`event_days.id`, from the signup's `days`, as get_signup returns them) this person attends, as the COMPLETE list. Because `days` REPLACES the whole set, read the current list first (the registration's `days`, returned by every registration read and write) and send it back with your change: a day you omit is REMOVED. Removing attendance is allowed on any day, past or cancelled, and `[]` removes all of it; their slots and items stay. Safe to repeat. Adding a day follows the Guest's rules: the signup must be accepting signups, a cancelled date is refused, a required day question must already be answered, and on a signup that requires a commitment no day can be added (so attendance removed there cannot be re-added through `days`). Also refused: adding a day that has passed (400), and adding any day while the registration is no longer attending (400; `[]` still works). A day of another signup is 404. Any refusal writes nothing. Notifies nobody.

## Response `200`

The updated registration

- Registration
  - `id` string, uuid, required
  - `eventId` string, uuid, required
  - `name` string, required
  - `email` string, email, required
  - `phone` string, nullable, required
  - `attending` boolean, required
  - `attendOnly` boolean, required
  - `attendees` integer, required: How many people this registration covers, the person included.
  - `nameVisible` boolean, required: Whether the person's name is shown on the public signup page's list of who signed up.
  - `eventCustomFieldResponse` string, nullable, required
  - `dayCustomFieldResponses` object, nullable, required
  - `days` string[], required: The event days (`event_days.id`) this person is attending, sorted by id. Includes the day a slot they hold is on, unless it was removed with `days`.
  - `createdAt` string, date-time, required
  - `lastModifiedAt` string, date-time, required
  - `commitments` Commitment[], required
    - union
      - SlotCommitment
        - `kind` 'slot', required
        - `id` string, uuid, required
        - `participantId` string, uuid, required
        - `slotId` string, uuid, required
        - `title` string, nullable, required
        - `startTime` string, date-time, required
        - `endTime` string, date-time, required
        - `quantity` integer, required
        - `customFieldResponse` string, nullable, required
      - ItemCommitment
        - `kind` 'item', required
        - `id` string, uuid, required
        - `participantId` string, uuid, required
        - `itemId` string, uuid, required
        - `name` string, required
        - `quantity` integer, required
        - `customFieldResponse` string, nullable, 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
- `409`: Another registration on this signup already uses that email; nothing was written
- `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)
