# EditAppointmentInput

input type

Edit-input for a Appointment. Every field optional, at least ONE required; supplied fields REPLACE, omitted fields are preserved (no clearing semantic). THE STATE LADDER: requested accepts every field; confirmed/in_progress accept ONLY caption/customer/orderId — window or resource moves on a confirmed booking are a RESCHEDULE (the capacity-gate-dodge designed out); terminals refuse CONFLICT/IMMUTABLE. The parent LF and purpose are IMMUTABLE at birth.

## Fields

| Field | Type | Required | Notes |
| --- | --- | --- | --- |
| `caption` | [String](/types/#scalars) | no | No further notes. |
| `variantId` | [ID](/types/#scalars) | no | requested-only; service purpose only — the walk re-gates. |
| `orderId` | [ID](/types/#scalars) | no | The link (any live state; a doomed-class order refuses REF_STATE). |
| `resourceIds` | [ID](/types/#scalars) `[ID!]` | no | requested-only; wholesale replacement — in-tenant + ACTIVE + same-LF re-gated. |
| `startAt` | [String](/types/#scalars) | no | requested-only; the lead/advance gates re-run. |
| `durationMinutes` | [Int](/types/#scalars) | no | requested-only. |
| `customer` | [OrderCustomerInput](/types/OrderCustomerInput/) | no | REPLACES the block when supplied. |

## Used by

- [updateAppointment](/reference/appointment/updateAppointment/)
