What a new page can be, and the designs for each
- Credentials
- OAuth access token
- Scopes
store:read
New page in three steps: step 1 is what the page is for (an item: Tours, Services, A category, Events, Gift cards, About, Team, FAQ, Lookbook, Size guide, Contact, Sale or launch, Wholesale, Link in bio, Blank, in three groups), step 2 a design for it (designs), step 3 its name, address and menu place (createStarterPage).
Each item is filled from the shop's own listings, categories and settings: count is how many of its listings the page is made from (null when it isn't made from listings) and sub says so in words ("4 tours"). title, slug and menu are what the page gets when createStarterPage is not told otherwise. Each design says how many sections (blocks) it makes for this shop. locked items need Growth (below it only About). previewUrl is a private link to every design of the item, stacked, as the storefront draws them for this shop; nothing is saved (null when no link can be signed).
Access: OAuth scope store:read; not write-gated.
Paged: { items, nextCursor }, limit (default 50, at most 200) and an opaque cursor.
merchantOAuth store:readAuthorizationBearer <token>OAuth 2.1 (authorization code + PKCE S256, public clients, dynamic registration) for connected AI apps. Effective power is scopes granted AND the person's role today AND the plan. orders:refund, billing:write and team:write are opt-in on the consent screen. Write implies read for marketing:read and messages:read, so a grant holding marketing:write passes a marketing:read check, and messages:send passes messages:read.
Scope: store:read
storeId*stringA store the person can reach. Any other id answers 404, never 403.
cursor?stringThe nextCursor of the previous page, unchanged. A cursor that is not one we gave you is 400 bad_request.
limit?integerPage size: default 50, at most 200 (more is 200; a missing or unusable value is 50).
1 <= value <= 20050OK
application/json- response
data*curl -X GET 'https://api.shopeazy.co/v1/merchant/stores/<storeId>/pages/starters' \ -H 'Authorization: Bearer <access_token>'{ "data": { "groups": [ { "id": "sell", "label": "string" } ], "plan": { "anyPage": true, "maxPages": 0 }, "items": [ { "id": "tours", "name": "string", "group": "sell", "sub": "string", "count": 0, "imageUrl": "string", "title": "string", "slug": "string", "menu": "top", "designs": [ { "id": "string", "name": "string", "sections": 0 } ], "locked": true, "previewUrl": "string" } ], "nextCursor": "string" }}A landing page built around one listing POST
A draft page with the listing's photos, details and a buy button, for ads and social links. Growth and Scale. Access: OAuth scope `design:write`; owner/admin only; write-gated by the subscription.
Make a page from a page starter design POST
Step 3 of a new page: a draft page from a `design` listPageStarters lists, filled from the shop's own listings, categories and settings, with the merchant's `title`, `slug` (its address) and `menu` place: `top`, `footer` or `none`. Each left out is the item's own. A page in the top menu of a shop with a custom menu is added to that menu too. `categoryId` picks the category of an "A category" page (the fullest when left out). `filledWith` says what the page was made from ("4 tours"), null when nothing. Saves a draft; shoppers see it after `publishPage`. An unknown design or menu place, or an address that can't be used or another page has: 422 `validation_error`. Below Growth only About pages: 403 `plan_limit`. Access: OAuth scope `design:write`; owner/admin only; write-gated by the subscription.