- An action is an item in the page’s Apps menu. Choosing it opens your app in a modal, already told which resource the merchant was looking at. Use it for one-off tasks such as “Print packing slip” or “Send to courier”.
- A block is a small card inside the page. Use it for at-a-glance information such as a fraud score, a tracking status or a loyalty balance.
Targets
The
product.* targets cover every catalog type. The context tells you which one the store
uses: resource.type is product (ecommerce), food (restaurant), service (business)
or digital-product (digital). Fetch the item from the matching API (/products, /foods,
/services or /digital-products).
Declaring a target grants nothing. An extension only appears on stores whose installation of
your app holds the scope in the last column, and it is hidden again the moment the app is
uninstalled.
Declaring extensions
In the dashboard go to Apps, Developer, open your app and find Dashboard extensions. Add one row per extension:
An app can declare up to 12 extensions. The API refuses an invalid row with a message that
says which row and why.
Through the API, send the list as
dashboardExtensions with PUT /api/v1/apps/developer/:id:
extensions, which holds your
storefront extensions (embeds and blocks on the shop). Send
null or [] to remove every dashboard extension.
Paths always stay on your origin
You declare a path, never a URL. The dashboard resolves it against the install / launch URL of the store’s installation, so a development install loads your development app URL and a production install loads your production one. The dashboard checks the resolved URL has the same origin as that app URL before it loads anything.What the frame receives
The frame URL carries the same parameters as the full-screen app, plus three more:
When the frame loads, the dashboard also sends a
salesive:extension-context message:
Using the bridge
React example
Limits and behaviour
- Extension frames use a stricter sandbox than the full-screen app: scripts, forms, your own cookies and storage, popups and downloads are allowed; navigating the dashboard window is not.
- Only the extension messages above are answered inside an extension frame. Other bridge
calls such as
pickFiles()orrequestPermission()work only in the full-screen app. - Blocks load lazily, when the merchant scrolls near them. Pages without any extension from an installed app load no extension code at all.
- The menu and blocks list extensions in the order the apps were installed (newest first), then in the order you declared them.

