# EditStorefrontInput

input type

Edit-input for a Storefront. Every field optional, at least ONE required; supplied fields REPLACE, omitted fields are preserved — customDomain/categoryId/divisionId take null to CLEAR (the EditPlugin.apiKeyId nullish-clear law); a supplied collectionIds REPLACES wholesale. THE PUBLISHED EDIT-LOCK: while published, theme / logicalFacilityId / customDomain refuse naming the fields (unpublish → edit → republish — the domain marker never dangles); caption/collections/category/division edit freely on a live site (merchandising is normal lifecycle). The parent Organization is IMMUTABLE at birth.

## Fields

| Field | Type | Required | Notes |
| --- | --- | --- | --- |
| `caption` | [String](/types/#scalars) | no | No further notes. |
| `logicalFacilityId` | [ID](/types/#scalars) | no | Re-home the selling facility (ACTIVE; refused while published). |
| `theme` | [String](/types/#scalars) | no | Re-theme (a canned key; refused while published). |
| `customDomain` | [String](/types/#scalars) | no | Set (the bare-hostname grammar) or null-CLEAR the domain (refused while published). |
| `collectionIds` | [ID](/types/#scalars) `[ID!]` | no | The wholesale replacement (strips every collection); each ACTIVE. |
| `categoryId` | [ID](/types/#scalars) | no | Set (ACTIVE) or null-CLEAR the browse-tree anchor. |
| `divisionId` | [ID](/types/#scalars) | no | Set (ACTIVE + channel-kind) or null-CLEAR the channel framing. |

## Used by

- [updateStorefront](/reference/storefront/updateStorefront/)
