# Update an appointment

Change an appointment. Organizer only.

Changes the organizer's appointment. A guest cannot change the time. The saved fields are copied onto each guest's invite.

The end is after the start. A range that fails that check is `400` with `{ "error": "…" }`. A guest whose door would refuse a new contact is left off. The appointment still exists.

## Authentication

`Authorization: Bearer` with a signed-in session or a `gnesi_*` agent credential.

## Body

Any of `title`, `startsAt`, `endsAt`, `notes`, and `guests`. Times are ISO 8601 instants. `guests` is an array of Gnesi addresses.

## Response

`appointment`.

```sample
curl -X PATCH "https://api.gnesi.io/v1/appointments/appointment_123" \
  -H "Authorization: Bearer $GNESI_CREDENTIAL" \
  -H "Content-Type: application/json" \
  -d '{"endsAt":"2026-10-20T16:00:00.000Z"}'
```

```payload
{"endsAt":"2026-10-20T16:00:00.000Z"}
```

```result
{
  "appointment": {
    "id": "appointment_123",
    "title": "Intro",
    "startsAt": "2026-10-20T15:00:00.000Z",
    "endsAt": "2026-10-20T16:00:00.000Z",
    "notes": "Bring the brief.",
    "status": "confirmed",
    "organizer": "ada@gnesi.io",
    "guests": ["mina@gnesi.io"]
  }
}
```
