Get Storefront
Retrieve a specific storefront (Creator page) from your store.
By default the response contains the storefront's identity, URLs, timestamps,
and a fresh preview_url of the saved draft. Use the include query
parameter to expand draft sections — styles, header, settings, and blocks —
in the same call. footer_id reads the legal footer; see
Easylegal footer.
Request
GET /storefronts/{id}
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | Yes | Storefront UUID |
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
include | string | No | Comma-separated list of sections to expand. Allowed values: styles, header, settings, blocks, footer_id. Unknown values are ignored. |
styles, header, settings, and blocks are always present. A section
that is not requested is null. Requesting include=blocks therefore leaves
styles, header, and settings as null. include=footer_id fills
settings with only privacy_easylegal.footer_id instead of leaving
settings as null. There is no top-level footer_id.
Example Requests
Lean read (section keys present as null):
curl -X GET "https://cart.easy.tools/api/v1/storefronts/b10f5980-d653-4494-ad1c-6a9d68c96d19" \
-H "Authorization: Bearer YOUR_API_TOKEN"
Expand widgets:
curl -X GET "https://cart.easy.tools/api/v1/storefronts/b10f5980-d653-4494-ad1c-6a9d68c96d19?include=blocks" \
-H "Authorization: Bearer YOUR_API_TOKEN"
Read the legal footer:
curl -X GET "https://cart.easy.tools/api/v1/storefronts/b10f5980-d653-4494-ad1c-6a9d68c96d19?include=footer_id" \
-H "Authorization: Bearer YOUR_API_TOKEN"
Response
Success Response (200)
Returns a single storefront. The first example is the lean default. The
next examples request include=settings, include=footer_id,
include=settings,footer_id, and include=blocks.
{
"id": "b10f5980-d653-4494-ad1c-6a9d68c96d19",
"slug": "my-studio",
"name": "My Studio",
"status": "published",
"public_url": "https://mysite.com/",
"preview_url": "https://cart.easy.tools/storefront-preview/b10f5980-d653-4494-ad1c-6a9d68c96d19?expires=1787824741&signature=a86dd2d8c84eff7d3c8fd39d0d85545ef94b203e25c84bc07caa3e75e7e75a7e",
"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",
"styles": null,
"header": null,
"settings": null,
"blocks": null
}
include=settings — remaining section keys stay null. Analytics pixel
configuration and privacy_easylegal.footer_id are still omitted. Add
footer_id to the same include list to return that id on this object.
{
"id": "b10f5980-d653-4494-ad1c-6a9d68c96d19",
"slug": "my-studio",
"name": "My Studio",
"status": "published",
"public_url": "https://mysite.com/",
"preview_url": "https://cart.easy.tools/storefront-preview/b10f5980-d653-4494-ad1c-6a9d68c96d19?expires=1787824782&signature=ac92ca1d8a9c6802323d28dd67c319e9ca7406a3fdea3c319b0ec9a3cdcec8ff",
"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",
"styles": null,
"header": null,
"settings": {
"page_title": "My Studio",
"page_description": "Portraits, weddings, and photography workshops.",
"page_language": "en",
"checkout_open_mode": "default",
"og_image_url": null,
"favicon_url": null,
"webclip_url": null,
"privacy_url": "https://mysite.com/privacy",
"privacy_easylegal": { "enabled": false }
},
"blocks": null
}
include=footer_id — settings is only the footer id. Other settings keys
are omitted. styles, header, and blocks stay null.
{
"id": "b10f5980-d653-4494-ad1c-6a9d68c96d19",
"slug": "my-studio",
"name": "My Studio",
"status": "published",
"public_url": "https://mysite.com/",
"preview_url": "https://cart.easy.tools/storefront-preview/b10f5980-d653-4494-ad1c-6a9d68c96d19?expires=1787824801&signature=d17c4e2a9b08f6e3c5a1d4b7e0f9c2a8b6d3e5f1a0c7b4d2e8f6a1c9b3d5e7f0",
"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",
"styles": null,
"header": null,
"settings": {
"privacy_easylegal": {
"footer_id": "77423e6a-b6e2-4c1a-9d2f-8a6b5c4d3e2f"
}
},
"blocks": null
}
When nothing is attached, the same partial object has "footer_id": null.
When the stored footer cannot be resolved, the storefront is still 200 and
that field is the message object. Other requested fields still return:
{
"settings": {
"privacy_easylegal": {
"footer_id": { "message": "The Easytools attachment could not be resolved." }
}
}
}
include=settings,footer_id — the appearance block from include=settings,
plus privacy_easylegal.footer_id. The value is the UUID, null, or the
message object above. A failed lookup replaces only footer_id; the appearance
keys stay, and the storefront stays 200. The rest of the storefront matches
the include=settings example.
{
"settings": {
"page_title": "My Studio",
"page_description": "Portraits, weddings, and photography workshops.",
"page_language": "en",
"checkout_open_mode": "default",
"og_image_url": null,
"favicon_url": null,
"webclip_url": null,
"privacy_url": "https://mysite.com/privacy",
"privacy_easylegal": {
"enabled": false,
"footer_id": "77423e6a-b6e2-4c1a-9d2f-8a6b5c4d3e2f"
}
}
}
include=blocks — remaining section keys stay null. Hidden widgets would
still appear (is_hidden). An empty page returns "blocks": [].
{
"id": "b10f5980-d653-4494-ad1c-6a9d68c96d19",
"slug": "my-studio",
"name": "My Studio",
"status": "published",
"public_url": "https://mysite.com/",
"preview_url": "https://cart.easy.tools/storefront-preview/b10f5980-d653-4494-ad1c-6a9d68c96d19?expires=1787824761&signature=be8188f06ca9c90e31db858691c33e298daa414aca9ec0bed4115f934ecb867f",
"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",
"styles": null,
"header": null,
"settings": null,
"blocks": [
{
"id": "566cf11d-e6e2-4485-a828-e1b3d7da10a5",
"type": "product",
"layout": "6x3",
"order": 1,
"is_hidden": false,
"is_hidden_on_mobile": false,
"config": {
"use_block_padding": true,
"use_block_surface": true,
"is_block_highlighted": true,
"product_id": "3288e647-aab0-4289-957f-dac92e9b3ffe",
"ownership_status": "hide_owned",
"cta_label": { "value": "Book a session", "is_hidden": false },
"owned_cta_label": "View gallery"
}
},
{
"id": "fa9116f5-ecea-4d31-96c1-dd421be48d4d",
"type": "space",
"layout": "space-sm",
"order": 2,
"is_hidden": false,
"is_hidden_on_mobile": false,
"config": {
"use_block_padding": false,
"use_block_surface": false,
"is_block_highlighted": false
}
}
]
}
preview_url is a fresh signature on every read. The expires / signature
query in these examples will already be stale; the shape is what matters. See
Draft preview.
Response Fields
Identity, URLs, timestamps, and included sections are documented on the Storefront Object. Nested Domain and Block shapes live there too.
Error Responses
Bad Request (400)
Returned when {id} is not a UUID.
{
"message": "Invalid storefront ID"
}
Not Found Error (404)
Returned when the UUID does not exist, belongs to another store, or points at a deleted storefront.
{
"message": "Storefront not found"
}
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."
}