Menus

Create, read, update, and delete navigation menus and their item trees — including the atomic whole-menu save — through the Store API.

Menus are named trees of navigation items. Reads require read_menus; writes require write_menus. Only documented request fields are accepted.

Start with GET /menus/{menuId}?include_items=false to obtain metadata, item_count and the current revision at any menu size. Full menu requests and responses are limited to 4 MiB of serialized JSON; larger documents return HTTP 413 MENU_PAGE_ITEMS_REQUIRED. Page root items and children through GET /menus/{menuId}/items, using parent_id, page and limit. Read live limits from /menus/limits; supported stored capacity and transport size are separate limits. Numeric resource IDs, including EU IDs starting at 281474976710656, are decimal strings in link_value.

Save with the revision you edited. Send exactly one of a complete items tree or ordered ops; keep item IDs to preserve translations. Use before_id or after_id to move relative to a sibling, including on later pages. Never send a visible page index as a global position or coalesce interleaved moves. child_count and subtree_count include unloaded descendants. Empty operations preserve items; an empty full tree deletes them. Revision conflicts retain local edits until you choose how to reconcile.

Canvas header/mobile navigation renders three levels; its footer renders only roots. Labels have no destination. Menu item images and promotion slots are not supported; /menus/limits declares placement capabilities. Resource links resolve current published slugs and hide unavailable leaves; surviving children keep a heading. Custom URLs do not follow destination renames or deletion.

Renaming reserves the old handle for the same menu. Up to 20 historical handles are retained; another menu cannot claim them. handle_aliases and backend-resolved handle_history expose reservations. Existing references never expire blindly.

CSV imports add or update items in existing menus. They do not create menu definitions or preserve empty menus and are not a complete backup. A staged preview expires after 24 hours or relevant source-version changes; diagnostics are paginated in a results dialog and operation feedback is backend-resolved. Menu import/export outcomes reach owners and staff with menus:read.

Only item titles translate. Use Menu item translations with item IDs and the corresponding menu and translation scopes. Menu names, handles, destinations and structure do not translate.

Endpoints#

Fields#

Field

Type

Create

Update

Required

Translatable

name

string

Yes

Yes

create

No

handle

string

Yes

Yes

No

item_count

integer

No

No

No

created_at

string (RFC 3339)

No

No

No

updated_at

string (RFC 3339)

No

No

No

Webhook events#

Subscribe to these events to keep your integration in sync with menus. Each event shows the required Store API scope and store permission, the available payload fields, and an example payload. Subscription setup is validated against those permissions; delivery is always restricted to the subscription's store.

Menu created

EVENT menus/create App scope: read_menus Staff permission: menus:write

Fired when a navigation menu is created.

Payload fields

Field Type Description
menu.id string Always present
menu.name string Selectable in the Payload builder
menu.handle string Selectable in the Payload builder
menu.item_count integer Selectable in the Payload builder
menu.created_at string Selectable in the Payload builder
menu.updated_at string Selectable in the Payload builder

Menu updated

EVENT menus/update App scope: read_menus Staff permission: menus:write

Fired when a navigation menu or one of its items is updated.

Payload fields

Field Type Description
menu.id string Always present
menu.name string Selectable in the Payload builder
menu.handle string Selectable in the Payload builder
menu.item_count integer Selectable in the Payload builder
menu.created_at string Selectable in the Payload builder
menu.updated_at string Selectable in the Payload builder

Menu deleted

EVENT menus/delete App scope: read_menus Staff permission: menus:write

Fired when a navigation menu is deleted.

Payload fields

Field Type Description
menu.id string Always present
menu.name string Selectable in the Payload builder
menu.handle string Selectable in the Payload builder