---
title: "Update a recurring series (affects the master item and all future occurrences)."
method: PUT
path: "/ScheduleItems/{id}/series"
tags: ["ScheduleItems"]
---

# Update a recurring series (affects the master item and all future occurrences).

`PUT /ScheduleItems/{id}/series`

## Request

- Base URL: `https://api.clinicos.vet/backend/business`
- URL: `https://api.clinicos.vet/backend/business/ScheduleItems/{id}/series`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1/docs/ScheduleItems/:id/series/put.ts> (a function with typed inputs; its response is checked against the schema)

## Path parameters

- `id` string, required

## Request body

- UpdateScheduleSeriesRequest: Request to update a recurring series (affects all future occurrences)
  - `title` string, nullable
  - `startTimeOfDay` string, nullable
  - `duration` string, nullable
  - `description` string, nullable
  - `locationId` string, nullable
  - `assignedToId` string, nullable
  - `clearAssignedTo` boolean: Unassign the item. A null `AssignedToId` means "keep the current assignee", so clearing needs its own flag (ITE-1064). Ignored when `AssignedToId` is set.
  - `recurrencePattern` RecurrencePatternDto: Pattern for recurring schedule items
    - `frequency` string, required: DAILY, WEEKLY, or MONTHLY
    - `interval` union: Interval between occurrences (e.g., 2 = every 2 weeks)
      - integer
      - string, int32
    - `daysOfWeek` string[], nullable: Days of week for weekly recurrence (MO, TU, WE, TH, FR, SA, SU)
    - `dayOfMonth` union: Day of month for monthly recurrence (1-31)
      - integer
      - string, int32
    - `endType` string, required: End type: never, on_date, or after_count
    - `endDate` string, date-time, nullable: End date when EndType is on_date
    - `endAfterCount` union: Number of occurrences when EndType is after_count
      - integer
      - string, int32

## Response `200`

OK

- ScheduleItemResponseDto: Response DTO for standalone schedule items
  - `id` string
  - `title` string
  - `startTime` string, date-time
  - `endTime` string, date-time
  - `description` string, nullable
  - `type` string
  - `locationId` string
  - `location` LocationSummaryDto
    - `id` string
    - `name` string
    - `isActive` boolean
    - `isVehicle` boolean
    - `isPersonalVehicle` boolean
    - `kind` 'Room' | 'Cage' | 'Run' | 'Ward': What a `Location` physically is (ITE-710). Exam rooms are where appointments happen and what the flowboard room grid shows; cages, runs and wards are where a hospitalized patient lives for the length of a `HospitalStay`. The admit picker filters on this, and the flowboard keeps hospitalization locations out of its grid. Stored as text; the default keeps every pre-existing location an exam room.
  - `assignedToId` string, nullable
  - `assignedTo` UserSummaryDto
    - `id` string
    - `email` string
    - `firstName` string, nullable
    - `lastName` string, nullable
    - `displayName` string, nullable
    - `type` string
    - `roleId` string, nullable
    - `roleName` string, nullable
  - `customAttributes` string, nullable
  - `createdAt` string, date-time
  - `updatedAt` string, date-time
  - `createdById` string, nullable
  - `createdBy` UserSummaryDto
    - `id` string
    - `email` string
    - `firstName` string, nullable
    - `lastName` string, nullable
    - `displayName` string, nullable
    - `type` string
    - `roleId` string, nullable
    - `roleName` string, nullable
  - `createdBySource` string, nullable
  - `hasAppointment` boolean
  - `appointment` AppointmentSummaryForScheduleDto: Lightweight appointment summary for embedding in schedule item responses. Polymorphic on subject: per-patient appointments populate Patient/PatientId; group-visit appointments (litter/herd) populate PatientGroup/PatientGroupId. Exactly one of (PatientId, PatientGroupId) is set, per the appointments_subject_chk DB constraint.
    - `id` string
    - `patientId` string, nullable
    - `patient` PatientSummaryDto: Lightweight patient summary for lists and references
      - `id` string: Unique patient identifier
      - `name` string: The patient's name
      - `species` string: The species name. References a species from GET /species endpoint.
      - `speciesId` string, nullable: The species ID for programmatic lookups.
      - `breed` string: The breed name
      - `sex` string: The patient's sex
      - `dateOfBirth` string, date-time, nullable: Date of birth, if known
      - `isEstimatedAge` boolean
      - `fixed` boolean: Whether the patient is spayed/neutered
      - `treatmentAcceptanceRate` union
        - number, double
        - string, double
    - `patientGroupId` string, nullable
    - `patientGroup` PatientGroupSummaryForScheduleDto: Lightweight group summary for embedding in schedule item responses when the appointment is group-bound (litter / herd visit).
      - `id` string
      - `name` string
      - `groupType` string: "Litter" or "Herd".
      - `speciesName` string, nullable
    - `clientId` string
    - `client` ClientSummaryDto
      - `id` string
      - `firstName` string
      - `lastName` string
      - `email` string, nullable
      - `phoneNumber` string, nullable
    - `status` string
    - `confirmationStatus` string, nullable: Client confirmation state ("Unconfirmed" | "Confirmed" | "Declined" | "RescheduleRequested"). Null when no confirmation was ever requested — the schedule renders nothing in that case.
    - `reasonForVisit` string
    - `notes` string, nullable
    - `appointmentTypeId` string, nullable
    - `appointmentType` AppointmentTypeSummaryDto: Lightweight appointment type summary for embedding in schedule item responses
      - `id` string
      - `name` string
      - `color` string, nullable
    - `isTravelAppointment` boolean: Travel/mobile visit details. These are the only copy of the destination a consumer of a schedule item ever sees: ITE-283 added a Mobile visit panel to the view modal, a travel section to Edit and a destination line to Reschedule, but every one of them gates on bool AppointmentSummaryForScheduleDto.IsTravelAppointment — which this summary never carried, so all three were unreachable in production even though the TypeScript type advertised the fields. Anything added here must also be mapped in ScheduleItemService.MapToResponseDto; the FE type is not a contract.
    - `travelDestinationAddress` string, nullable
    - `travelDestinationPlaceId` string, nullable
    - `travelStartingAddress` string, nullable
    - `travelStartingPlaceId` string, nullable
    - `travelDistanceMeters` union
      - integer
      - string, int32
    - `travelDurationMinutes` union
      - integer
      - string, int32
    - `travelIsRoundTrip` boolean, nullable
    - `travelFeeAmount` union
      - number, double
      - string, double
    - `travelAccessNotes` string, nullable
    - `careTeam` CareTeamMemberDto[], nullable: The appointment's care team (ITE-1059): the lead first (`isLead`), then the supporting members. Null — and absent from the JSON — while the `AppointmentCareTeam` flag is off. Must be filled in ScheduleItemService.
      - `userId` string
      - `name` string
      - `role` string: A `CareTeamRole` name.
      - `isLead` boolean
  - `isRecurring` boolean
  - `recurrenceRule` string, nullable
  - `recurrenceEndDate` string, date-time, nullable
  - `isException` boolean
  - `parentScheduleItemId` string, nullable
  - `isRecurrenceInstance` boolean
  - `originalStartTime` string, date-time, nullable

## Changes

- **2026-10-07** `021fabd866ff`: 3 info
  - added the optional property `appointment/oneOf[#/components/schemas/AppointmentSummaryForScheduleDto]/careTeam` to the response with the `200` status (media type: text/plain)
  - added the optional property `appointment/oneOf[#/components/schemas/AppointmentSummaryForScheduleDto]/careTeam` to the response with the `200` status (media type: application/json)
  - added the optional property `appointment/oneOf[#/components/schemas/AppointmentSummaryForScheduleDto]/careTeam` to the response with the `200` status (media type: text/json)
- **2026-10-02** `652ff1990675`: 3 info
  - added the new optional request property `clearAssignedTo` (media type: application/json)
  - added the new optional request property `clearAssignedTo` (media type: text/json)
  - added the new optional request property `clearAssignedTo` (media type: application/*+json)
- **2026-09-11** `503cd0546309`: 3 info
  - added the optional property `location/kind` to the response with the `200` status (media type: text/plain)
  - added the optional property `location/kind` to the response with the `200` status (media type: application/json)
  - added the optional property `location/kind` to the response with the `200` status (media type: text/json)
- …earlier changes not shown

[Operation history](https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1/changes/ScheduleItems/:id/series/put.md)

---

[API](https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1.md) - [All operations](https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1/llms.txt) - [OpenAPI document](https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1/revisions/099cf36186e0?raw)
