Skip to main content

Update Storefront Header

Sparse-update the saved draft header of a storefront (Creator page). Omitted keys are left unchanged. Unknown keys at any nesting level return 422.

photo is sparse-merged into the stored object — send only the keys you want to change. links replaces the whole array when sent ([] clears).

Clearable strings take "", not null — see Draft updates. Colors are six-digit hex (#RRGGBB).

The response is the same shape as Get Storefront with include=header. Visitors still see the last published page at public_url until Publish Storefront.

An empty body is a 200 with no change.

Request​

PATCH /storefronts/{id}/header

Path Parameters​

ParameterTypeRequiredDescription
idstringYesStorefront UUID

Request Body​

All fields are optional. Only include the keys you want to change. Unknown keys are rejected.

ParameterTypeDescription
layoutstringlarge or compact
logo_urlstringLogo image URL, or "" to clear. Absolute http:// or https:// only.
photoobjectSparse-merged into the stored hero media. See Photo.
image_stylestringbasic, backdrop, or spotlight
image_roundingstringnone, s, m, l, or full
background_typestringsolid, gradient, or image
background_colorstringHeader background. #RRGGBB
background_gradient_fromstringHeader gradient start. #RRGGBB
background_gradient_tostringHeader gradient end. #RRGGBB
background_image_urlstringHeader background image URL, or "" to clear
background_blurintegerBlur amount (min: 0). No upper bound.
titlestringHeader title (max 255), or "" to clear
biostringHeader bio (HTML or plain, max 10000), or "" to clear
font_familystringHeader font name (free text, max 100)
text_colorstringHeader text color. #RRGGBB
show_linksbooleanWhether social / website links are shown
linksarrayReplaces the stored links. [] clears. See Link.

Every URL must be an absolute http:// or https:// URL, or "" to clear. Relative paths such as /images/logo.png return 422. Host a new image or video with Upload Media, then PATCH the returned file_url.

Photo​

Sparse-merged. Omitted keys inside photo are left unchanged. Unknown keys return 422.

ParameterTypeDescription
media_typestringimage, video, or iframe
src_urlstringHero image URL, or "" to clear
altstringAlt text (max 1000), or "" to clear
video_src_urlstringHero video URL, or "" to clear
video_autoplaybooleanWhether the hero video autoplays
video_controlsbooleanWhether playback controls are shown
video_loopbooleanWhether the hero video loops
iframe_src_urlstringHero iframe URL, or "" to clear
is_hiddenbooleanWhether the hero media is hidden
fitstringcover or contain

Each item replaces as a whole when links is sent. Unknown item keys return 422. link cannot be empty.

ParameterTypeRequiredDescription
typestringYesfacebook, instagram, x, linkedin, youtube, telegram, tiktok, or website
iconstringYesIcon token shown next to the link (max 100)
linkstringYesAbsolute http:// or https:// URL

Example Requests​

Change the title and merge one photo field (alt). Other photo keys stay as stored:

curl -X PATCH "https://cart.easy.tools/api/v1/storefronts/b10f5980-d653-4494-ad1c-6a9d68c96d19/header" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "My Studio",
"photo": { "alt": "Portrait" }
}'

Replace social links:

curl -X PATCH "https://cart.easy.tools/api/v1/storefronts/b10f5980-d653-4494-ad1c-6a9d68c96d19/header" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"links": [
{
"type": "instagram",
"icon": "instagram",
"link": "https://www.instagram.com/mystudio/"
}
]
}'

Response​

Success Response (200)​

Returns the storefront with the merged header section. styles, settings, and blocks are null. preview_url is a fresh signature of the saved draft.

{
"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=1788339528&signature=f893b3a702d3a04eeb5b1fd1b866ab1ed9dee52b780f8e7879460fc5c7c12071",
"domains": [
{
"domain": "mysite.com",
"status": "configured",
"include_www": true
}
],
"created_at": "2026-03-12T10:00:00+00:00",
"updated_at": "2026-09-02T09:58:48+00:00",
"published_at": "2026-04-01T09:00:00+00:00",
"styles": null,
"header": {
"layout": "large",
"logo_url": "",
"photo": {
"media_type": "image",
"src_url": "https://cdn.example.com/storefront-media/wBJ6CDIaHVVEUTBpsC8JJc2wrFvOWK04.webp",
"alt": "Portrait",
"video_src_url": "",
"video_autoplay": true,
"video_controls": false,
"video_loop": true,
"iframe_src_url": "",
"is_hidden": false,
"fit": "cover"
},
"image_style": "backdrop",
"image_rounding": "full",
"background_type": "image",
"background_color": "#6366f1",
"background_gradient_from": "#6366f1",
"background_gradient_to": "#a855f7",
"background_image_url": "https://cdn.example.com/storefront-media/wBJ6CDIaHVVEUTBpsC8JJc2wrFvOWK04.webp",
"background_blur": 72,
"title": "My Studio",
"bio": "Portraits, weddings, and photography workshops.",
"font_family": "Lora",
"text_color": "#391106",
"show_links": true,
"links": [
{
"type": "instagram",
"icon": "instagram",
"link": "https://www.instagram.com/mystudio/"
}
]
},
"settings": null,
"blocks": null
}

preview_url is a fresh signature on every write. See Draft preview.

Response Fields​

Identity, URLs, timestamps, and included sections are documented on the Storefront Object. Nested Domain lives 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"
}

Validation Error (422 Unprocessable Entity)​

Returned for an unknown key, an image_style outside the allowed values, a color that is not #RRGGBB, or a URL that is not absolute HTTP(S) (or "").

{
"message": "The not_a_header_key field is not allowed.",
"errors": {
"not_a_header_key": [
"The not_a_header_key field is not allowed."
]
}
}

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."
}