---
search:
  tags:
    - Appointments
    - PUT
seo:
  description: >-
    Reschedules an appointment (scheduledTimeStart + scheduledTimeEnd) and/or…
    Reference for the PUT /appointments/{appointment_id} endpoint in the
    Almendra API.
sidebar:
  label: Update or reschedule a scheduled appointment
  badge: PUT
title: Update or reschedule a scheduled appointment
type: openapi-operation
---
Reschedules an appointment (`scheduledTimeStart` + `scheduledTimeEnd`) and/or changes its video conference URL. A new time also moves the Google Calendar event, the Zoom meeting and the patient's reminder email, like rescheduling from the dashboard. Set `notifyPatient` to email and push the new time to the patient. Appointments that already took place cannot be rescheduled (409).

Requires the `appointments:write` permission.

`PUT /appointments/{appointment_id}`

**Request body** (`application/json`)

- `conferenceRoomUrl` (string<uri>) — Updated video conference URL
- `scheduledTimeStart` (string<date-time>) — New start time (ISO 8601). Send it together with \`scheduledTimeEnd\` to reschedule.
- `scheduledTimeEnd` (string<date-time>) — New end time (ISO 8601), after \`scheduledTimeStart\`. Send it together with \`scheduledTimeStart\`.
- `timeZone` (string) — IANA time zone used to show the new time in the patient's email, Zoom and Google Calendar. Defaults to the account's time zone.
- `notifyPatient` (boolean) — Email and push the new time to the patient (only if the account sends appointment emails, Settings \> Notifications). Defaults to false. The reminder email always moves to the new time.

Request body example:

```json
{
  "conferenceRoomUrl": "https://zoom.us/j/1234567890",
  "scheduledTimeStart": "2024-02-01T15:00:00.000Z",
  "scheduledTimeEnd": "2024-02-01T16:00:00.000Z",
  "timeZone": "America/Lima",
  "notifyPatient": true
}
```

**Responses**

- `200` — Appointment updated successfully
- `400` — Invalid path parameter, query parameter or request body
- `401` — Missing or invalid API key
- `403` — The account behind the API key has no active paid plan, or the key lacks the permission this operation needs
- `404` — Appointment not found
- `409` — The appointment already took place, so its time cannot change; or another change to it is still running (retry)
- `415` — Request body sent without \`Content-Type: application/json\`
- `429` — Rate limit exceeded (600 requests per 60 seconds); retry after \`Retry-After\` seconds
- `500` — Unexpected server error

Response example, 200:

```json
{
  "_id": "507f1f77bcf86cd799439016",
  "patient": "507f1f77bcf86cd799439011",
  "expert": "507f1f77bcf86cd799439012",
  "appointmentStatus": 0,
  "scheduledInfo": {
    "wasScheduled": true,
    "scheduledTimeStart": "2024-02-01T10:00:00.000Z",
    "scheduledTimeEnd": "2024-02-01T11:00:00.000Z",
    "scheduledDuration": 60
  },
  "location": "string",
  "conferenceType": "string",
  "conferenceRoomUrl": "string",
  "conferenceRoomId": "string",
  "price": 0,
  "purchasedHealthPlan": "string",
  "createdAt": "2024-01-15T00:00:00.000Z",
  "updatedAt": "2024-01-15T00:00:00.000Z"
}
```
