Sections
A section is one block of a storefront page. Each belongs to one theme and one channel, carries content per locale, and is drawn in the order the channel gives it.
Types
| Type | What it draws |
|---|---|
image_carousel | A slider of images, each with its own link. |
product_carousel | Products chosen by a filter, drawn as a slider. |
category_carousel | Categories chosen by a filter, drawn as a slider. |
footer_links | The footer link columns. |
static_content | Free HTML and CSS. |
services_content | The service badges strip, each with an icon. |
The type decides the fields a section carries. adminAppearanceSectionFields returns that field set as a schema together with the values currently held, which is enough to build an editor without hard-coding any type.
Two rules the storefront depends on
- One footer per channel. A channel can hold at most one
footer_linkssection; creating a second, or switching another section to that type, is rejected with422. - The footer is drawn last. A reorder that places
footer_linksanywhere but the end has it moved back, and the response returns the order that was actually stored.
Staged edits
Nothing a client writes through the draft endpoints reaches shoppers until it is published:
| Staged | Endpoint | Held in |
|---|---|---|
| Content, per locale | createAdminAppearanceSectionDraft | draftOptions on the translation |
| On/off | createAdminAppearanceSectionStatus | draftStatus |
| Render order | createAdminAppearanceSectionReorder | draftSortOrder |
hasDraft on a section is true while any of the three is set. createAdminAppearanceSectionPublish promotes every staged edit of a theme and channel at once; createAdminAppearanceSectionDiscard throws them all away. adminAppearanceSectionPreview returns the theme as those staged edits would leave it.
Creating a section stages it switched off, so an unbuilt section is never shown. Writing published values directly — without the draft cycle — is what updateAdminAppearanceSection does.
Media
Images and videos are uploaded through the REST endpoint Upload media — a binary upload cannot be carried over GraphQL — which returns a stored path. The client then records that path in the section's options through the draft or update endpoint. Uploading does not change what a section shows.
Operations
| Operation | Purpose |
|---|---|
| adminAppearanceSections | Sections of a theme and channel, in render order |
| adminAppearanceSection | One section with its translations |
| createAdminAppearanceSection | Add a section |
| updateAdminAppearanceSection | Write published values |
| deleteAdminAppearanceSection | Remove a section |
| createAdminAppearanceSectionDraft | Hold options as a draft |
| createAdminAppearanceSectionStatus | Stage on/off |
| createAdminAppearanceSectionReorder | Stage render order |
| createAdminAppearanceSectionDuplicate | Copy a section |
| createAdminAppearanceSectionPublish | Promote staged edits |
| createAdminAppearanceSectionDiscard | Throw staged edits away |
| adminAppearanceSectionFields | Field schema and current options |
| adminAppearanceSectionPreview | Theme with staged edits applied |
Permissions
| Action | Permission |
|---|---|
| Read, fields, preview | appearance.sections |
| Create, copy | appearance.sections.create |
| Update, draft, status, order, publish, discard | appearance.sections.edit |
| Delete | appearance.sections.delete |

