Get Storefronts
Retrieve a list of your store's storefronts (Creator pages).
Storefronts are returned newest-updated first. Each item includes its custom
domains. The list is a lean projection: it does not include preview_url or
draft sections (styles, header, settings, blocks). It does not include
privacy_easylegal.footer_id. Use
Get Storefront with include=footer_id for that id.
When your store has no storefronts, the list is empty. Create one with Create Storefront.
Request
GET /storefronts
Query Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
status | string | No | — | Filter by publication status: draft or published. Omit for storefronts in any state. |
query | string | No | — | Partial, case-insensitive match on the storefront name or slug. |
sort | string | No | -updated_at | Sort order: created_at, updated_at, or name. Prefix with - for descending. |
page | integer | No | 1 | Page number for pagination. |
per_page | integer | No | 25 | Items per page (min: 1, max: 100). |
Omitting a filter, or passing it empty, means "no filter on that field". A
non-empty but unparseable value — an unknown status or sort, or an
out-of-range per_page — returns a 400 (see Bad Request).
The query term is free-text and is always accepted.
Ordering: Storefronts default to updated_at descending (newest-updated
first) unless sort is supplied.
Counting matches: every response includes the filtered total in
pagination.total. To get only a count, request per_page=1 and read
pagination.total.
Example Request
curl -X GET "https://cart.easy.tools/api/v1/storefronts?status=published&page=1" \
-H "Authorization: Bearer YOUR_API_TOKEN"
Response
Success Response (200)
Returns a paginated list of storefronts.
{
"items": [
{
"id": "b10f5980-d653-4494-ad1c-6a9d68c96d19",
"slug": "my-studio",
"name": "My Studio",
"status": "published",
"public_url": "https://mysite.com/",
"domains": [
{
"domain": "mysite.com",
"status": "configured",
"include_www": true
}
],
"created_at": "2026-03-12T10:00:00+00:00",
"updated_at": "2026-08-26T14:22:00+00:00",
"published_at": "2026-04-01T09:00:00+00:00"
},
{
"id": "3edd096c-735b-4fcc-86ec-fba4e05b67b4",
"slug": "autumn-mini-sessions",
"name": "Autumn Mini Sessions",
"status": "draft",
"public_url": null,
"domains": [],
"created_at": "2026-08-20T11:15:00+00:00",
"updated_at": "2026-08-26T16:40:00+00:00",
"published_at": null
}
],
"pagination": {
"current_page": 1,
"total_pages": 1,
"per_page": 25,
"total": 2
}
}
Response Fields
The list item is a leaner projection than Get Storefront.
It has no preview_url and no styles / header / settings / blocks
keys.
| Field | Type | Nullable | Description |
|---|---|---|---|
id | string | No | Stable storefront identifier (UUID). Pass it to Get Storefront. |
slug | string | No | Current URL slug. Mutable, so use it for display only — never as a stable id. |
name | string | No | Display name (the Creator page name in the dashboard). |
status | string | No | Publication status: draft or published. |
public_url | string | Yes | Live visitor URL. null when the storefront is a draft. See Custom domains. |
domains | array | No | Custom domains attached to this storefront. Empty when none are attached. See Domain. |
created_at | string | No | When the storefront was created (ISO 8601). |
updated_at | string | No | When the storefront was last updated (ISO 8601). Storefronts default to this field, newest first. |
published_at | string | Yes | When the storefront was last published. null while it is a draft or after it has been unpublished. |
Pagination Object
| Field | Type | Description |
|---|---|---|
current_page | integer | Current page number. |
total_pages | integer | Total number of pages. |
per_page | integer | Effective page size (echoes the per_page request parameter). |
total | integer | Total number of storefronts matching the applied filters. |
Error Responses
Bad Request (400)
Returned when status is not draft or published, sort names an unknown
field, or per_page is out of range. The message names the offending field
and the value received.
{
"message": "Invalid value for 'status': 'activ'"
}
Unauthorized (401)
{
"message": "Unauthenticated."
}
Forbidden (403)
Returned when your API key has not been granted access to the requested store.
{
"message": "You do not have API access to the requested store."
}
Too Many Requests (429)
Returned when you exceed the rate limit. The Retry-After response header gives
the number of seconds to wait.
{
"message": "Too many requests. Please retry after 60 seconds."
}