# EditOrderInput

input type

Edit-input for a Order. Every field optional, at least ONE required; supplied fields REPLACE, omitted fields are preserved (no clearing semantic). LIVE-EDIT-STATE ONLY: a sale edits while open (held is parked — resume first; post-place content is frozen, the amendment window a strict-OFF hook); a draft/quote edits while draft OR sent. A supplied lines array REPLACES wholesale and re-runs the FULL price capture at the edit instant.

## Fields

| Field | Type | Required | Notes |
| --- | --- | --- | --- |
| `caption` | [String](/types/#scalars) | no | No further notes. |
| `customer` | [OrderCustomerInput](/types/OrderCustomerInput/) | no | No further notes. |
| `exemptionCertificateId` | [ID](/types/#scalars) | no | No further notes. |
| `discounts` | [OrderDiscountInput](/types/OrderDiscountInput/) `[OrderDiscountInput!]` | no | No further notes. |
| `validUntil` | [String](/types/#scalars) | no | Re-set the draft/quote validity window. |
| `termEndsAt` | [String](/types/#scalars) | no | Re-set the layaway term end. A termEndsAt-ONLY edit stays legal while placed\|accruing (the term is schedule, not content). |
| `lines` | [OrderLineInput](/types/OrderLineInput/) `[OrderLineInput!]` | no | The wholesale line replacement (live-edit-state only) — same shape + refinements as create; MAY be emptied (a cleared cart). |

## Used by

- [updateOrder](/reference/order/updateOrder/)
