---
title: "Move an appointment to a new time, recording the move (ITE-898)."
method: POST
path: "/Appointments/{id}/reschedule"
tags: ["Appointments"]
---

# Move an appointment to a new time, recording the move (ITE-898).

`POST /Appointments/{id}/reschedule`

## Path parameters

- `id` string, required

## Request body

- RescheduleAppointmentRequest — Move a booked appointment to a new time (ITE-898). Deliberately narrow: a reschedule is a move, not a general edit. Anything else about the appointment changes through the update endpoint, so the history rows stay honest about what a "reschedule" was.
  - `startTime` string, date-time, required
  - `endTime` string, date-time, nullable — New end. Omit to preserve the appointment's current duration, which is what the Quick Reschedule flow wants — the user picks a start, not a span.
  - `locationId` string, nullable — New room. Omit to keep the current one.
  - `assignedToId` string, nullable — New assignee. Omit to keep the current one.
  - `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.
  - `reason` string, nullable — Optional reason, recorded on the history row. Vocabulary lands in ITE-899.
  - `source` string, nullable — Which surface is moving it — one of `RescheduleSource`'s names. Defaults to "User"; the calendar sends "Drag" and the agent tools send "Agent" / "Voice" so reporting can separate staff moves from automated ones.

## Response `200`

OK

- AppointmentResponseDto — Full appointment response with all related data
  - `id` string
  - `scheduleItemId` string
  - `scheduleItem` ScheduleItemDto — Schedule item DTO (embedded in appointments)
    - `id` string
    - `title` string
    - `startTime` string, date-time
    - `endTime` string, date-time
    - `description` string, nullable
    - `type` string
    - `locationId` string, nullable
    - `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
  - `clientId` string
  - `client` ClientSummaryDto
    - `id` string
    - `firstName` string
    - `lastName` string
    - `email` string, nullable
    - `phoneNumber` string, nullable
  - `patientId` string, nullable — Set on patient-scoped appointments. Null on group visits — see string? AppointmentResponseDto.PatientGroupId.
  - `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 — Set on group-visit appointment types (litter / herd). Mutually exclusive with string? AppointmentResponseDto.PatientId.
  - `patientGroup` AppointmentPatientGroupSummaryDto — Lightweight group summary for embedding in appointment responses.
    - `id` string
    - `name` string
    - `groupType` string — "Litter" or "Herd".
    - `speciesName` string, nullable
    - `headCount` union
      - integer
      - string, int32
    - `memberCount` union
      - integer
      - string, int32
  - `reasonForVisit` string
  - `notes` string, nullable
  - `status` string
  - `customAttributes` string, nullable
  - `recordingId` string, nullable
  - `createdAt` string, date-time
  - `updatedAt` string, date-time
  - `isTravelAppointment` boolean
  - `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
  - `appointmentTypeId` string, nullable
  - `requiresSurgeryRoom` boolean — Whether this appointment type requires a surgery room.
  - `isEmergencySurgeryConversion` boolean — Whether this appointment was converted from a regular exam to emergency surgery.
  - `appointmentTypeDefaultFlowId` string, nullable — Chronicle workflow id sourced from this appointment's <see cref="!:AppointmentType" />. Null falls back to `appointment-default` at the chronicle. Denormalized at read time so the chronicle doesn't need a second appointment-type lookup.
  - `appointmentTypeExamTemplateId` string, nullable — Exam template id sourced from this appointment's <see cref="!:AppointmentType" /> (PAW-741). Resolution at the chronicle exam step: this value, else the provider's personal default, else the standard 7-system view. Denormalized at read time so the chronicle doesn't need a second appointment-type lookup.
  - `appointmentTypeAutoGenerateSoap` boolean — Auto-start SOAP generation when the treatment plan is converted to an invoice (PAW-675). Denormalized from the appointment type; true when the appointment has no type (the platform default is on).
  - `appointmentTypeAutoGenerateDischarge` boolean — Auto-start discharge generation when the SOAP note is approved (PAW-675). Denormalized from the appointment type; true when the appointment has no type (the platform default is on).

## Changes

- **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-30** `d58b40cfca93` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1/changes/Appointments/:id/reschedule/post.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/652ff1990675?raw)
