---
title: "Update an Appointment."
method: PUT
path: "/appointments/{id}.json"
tags: ["Appointments"]
---

# Update an Appointment.

`PUT /appointments/{id}.json`

## Request

- Base URL: `https://api.jumpseller.com/v1`
- URL: `https://api.jumpseller.com/v1/appointments/{id}.json`
- Auth: one of:
  - HTTP basic
  - API key in query parameter `login` and API key in query parameter `authtoken`
  - OAuth 2
    - Authorization code: `https://accounts.jumpseller.com/oauth/authorize`
    - Token URL: `https://accounts.jumpseller.com/oauth/token` scopes: `write_orders`

Changes an appointment status, reschedules it, or performs both updates atomically. Rescheduling requires `start_time` and is only allowed when the resulting status is `booked`; `end_time` is optional and, when omitted, the appointment keeps its current duration. Times use the store timezone. The requested timeslot must belong to the product schedule and have available capacity. Changing the status to `booked` without rescheduling also checks that the appointment's current timeslot still has available capacity. Allowed status transitions: `pending` to `booked` or `canceled`, `booked` to `completed` or `canceled`, and `canceled` or `completed` back to `booked`. To delete an appointment while preserving its order history, set `status` to `canceled`.

## Path parameters

- `id` integer, required

## Query parameters

- `fields` string

## Request body

- AppointmentEdit
  - `appointment` object
    - `status` 'booked' | 'canceled' | 'completed': Appointment status.
    - `start_time` string: Appointment start date and time in the store timezone.
    - `end_time` string: Appointment end date and time in the store timezone.

## Response `200`

Appointment updated successfully.

- AppointmentResponse
  - `appointment` Appointment
    - `id` integer: Appointment unique identifier.
    - `status` 'created' | 'voided' | 'canceled' | 'pending' | 'booked' | 'completed': Appointment status.
    - `status_name` string: Human-readable appointment status.
    - `name` string, nullable: Appointment name.
    - `duration` integer: Appointment duration in minutes.
    - `store_timezone` string: Store timezone in IANA timezone format, like `America/New_York`
    - `timeslot` AppointmentTimeslot
      - `start_date` string, date: Timeslot start date in the store timezone.
      - `start_time` string: Timeslot start time in the store timezone (HH:MM).
      - `end_date` string, date: Timeslot end date in the store timezone.
      - `end_time` string: Timeslot end time in the store timezone (HH:MM).
      - `duration` integer: Appointment duration in minutes.
      - `timezone` string: Store timezone in IANA timezone format, like `America/New_York`
    - `product_id` integer: ID of the associated product.
    - `product_name` string: Name of the associated product.
    - `customer_id` integer: ID of the associated customer.
    - `customer_name` string: Name of the associated customer.
    - `customer_email` string, email: Email address of the customer.
    - `order_product_id` integer: ID of the associated order product.
    - `order_id` integer: ID of the associated order.
    - `order_number` integer: Order number.
    - `created_at` string: Appointment creation timestamp in UTC.
    - `updated_at` string: Appointment last update timestamp in UTC.

## Other responses

- `400`: Unavailable timeslot or invalid status transition, or invalid request.
- `404`: Appointment not found.

## Changes

- **2026-10-15** `53dc9f2c1329`: 17 warning, 2 info
  - removed the optional property `created_at` from the response with the `200` status
  - removed the optional property `customer_email` from the response with the `200` status
  - removed the optional property `customer_id` from the response with the `200` status
  - removed the optional property `customer_name` from the response with the `200` status
  - …15 more
- **2026-10-07** `42f316fe2455`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/jumpseller/apis/jumpseller-api/changes/appointments/:id.json/put.md)

---

[API](https://skmtc.dev/jumpseller/apis/jumpseller-api.md) - [All operations](https://skmtc.dev/jumpseller/apis/jumpseller-api/llms.txt) - [OpenAPI document](https://skmtc.dev/jumpseller/apis/jumpseller-api/revisions/09f991a20d74?raw)
