List Sections
The published sections of the current channel's active theme, in the order they are drawn.
Endpoint
| Method | Path | Purpose |
|---|---|---|
GET | /api/shop/sections | List sections |
Query parameters
| Parameter | Description |
|---|---|
type | Exact match on the section type. |
page | Page number (1-based). |
per_page | Items per page (default 10, max 100). |
Response fields
| Field | Type | Description |
|---|---|---|
id | integer | Section ID. |
themeCode | string | Theme the section belongs to. |
channelId | integer | Channel the section belongs to. |
type | string | One of the six section types. |
name | string | Section name. |
sortOrder | integer | Position in the page. |
status | integer | Always 1 — only published sections are returned. |
createdAt | string | ISO 8601. |
updatedAt | string | ISO 8601. |
translation | object | null | Content for the current locale. |
translation.id | integer | Translation row ID. |
translation.sectionId | integer | Section the translation belongs to. |
translation.locale | string | Locale code. |
translation.options | string | JSON-encoded content. |
translations | array | Every locale the section has content for, same shape as translation. |
Use cases
- Render a home page — request without
type, then switch on each section'stypeto pick a component, and parseoptionsfor its content. - Render just the footer —
?type=footer_linksreturns the one footer section the channel has.
Best practices
optionsis a JSON string, not an object. Parse it before reading fields out of it, in bothtranslationand each entry oftranslations.- Draw them in the order returned. The response is already in render order; sorting by
sortOrderyourself is unnecessary and gets the footer wrong. - An empty array means the channel's active theme has no published sections, not that something failed — a freshly switched theme starts empty.
Permissions
Public. Requires only the storefront key.

