Pages API
Manage the content for a site's home page and info pages. The home page holds
hero and SEO text. Info pages hold the body content for standard storefront
pages such as About, Shipping, and Returns.
Endpoints
Home page:
- Get Home Page -
GET /api/v1/sites/{site_id}/pages/home/ - Update Home Page -
PUT /api/v1/sites/{site_id}/pages/home/
Info pages:
- List Info Pages -
GET /api/v1/sites/{site_id}/pages/ - Get Info Page -
GET /api/v1/sites/{site_id}/pages/{page_type}/ - Update Info Page -
PUT /api/v1/sites/{site_id}/pages/{page_type}/ - Delete Info Page -
DELETE /api/v1/sites/{site_id}/pages/{page_type}/
Get Home Page
Retrieve the home page settings for a site.
Endpoint: GET /api/v1/sites/{site_id}/pages/home/
Scope Required: sites:read
Request
curl -X GET "https://studio.easel.engineering/api/v1/sites/sit_d0b6fmv28q6vn14peun0/pages/home/" \
-H "Authorization: Bearer your_api_key_here"
Response
Status: 200 OK
{
"hero_content": "Handmade in California",
"seo_title": "My Store",
"seo_description": "Handmade goods for everyday use.",
"taken_down_at": null
}
Update Home Page
Update the home page settings for a site.
Endpoint: PUT /api/v1/sites/{site_id}/pages/home/
Scope Required: sites:write
Request Body
{
"hero_content": "Handmade in California",
"seo_title": "My Store",
"seo_description": "Handmade goods for everyday use."
}
| Field | Type | Required | Description |
|---|---|---|---|
hero_content |
string | Yes | Hero copy shown on the home page |
seo_title |
string | Yes | Page title for search engines |
seo_description |
string | Yes | Meta description for search engines |
Request
curl -X PUT "https://studio.easel.engineering/api/v1/sites/sit_d0b6fmv28q6vn14peun0/pages/home/" \
-H "Authorization: Bearer your_api_key_here" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: unique-request-id-12345" \
-d '{
"hero_content": "Handmade in California",
"seo_title": "My Store",
"seo_description": "Handmade goods for everyday use."
}'
Response
Status: 204 No Content
List Info Pages
Retrieve the info pages that have content for a site. This endpoint is not
paginated.
Endpoint: GET /api/v1/sites/{site_id}/pages/
Scope Required: sites:read
Request
curl -X GET "https://studio.easel.engineering/api/v1/sites/sit_d0b6fmv28q6vn14peun0/pages/" \
-H "Authorization: Bearer your_api_key_here"
Response
Status: 200 OK
{
"data": [
{
"page_type": "about",
"content": "We make things by hand.",
"updated_at": "2023-01-01T10:00:00Z",
"taken_down_at": null
}
]
}
Get Info Page
Retrieve a single info page by its type.
Endpoint: GET /api/v1/sites/{site_id}/pages/{page_type}/
Scope Required: sites:read
Path Parameters
| Parameter | Type | Description |
|---|---|---|
page_type |
string | One of the page types listed below |
Request
curl -X GET "https://studio.easel.engineering/api/v1/sites/sit_d0b6fmv28q6vn14peun0/pages/about/" \
-H "Authorization: Bearer your_api_key_here"
Response
Status: 200 OK
{
"page_type": "about",
"content": "We make things by hand.",
"updated_at": "2023-01-01T10:00:00Z",
"taken_down_at": null
}
Error Responses
Invalid page type
Status: 400 Bad Request
{
"error": "Invalid page type",
"code": "INVALID_FIELD"
}
Page not found
Status: 404 Not Found
{
"error": "Resource not found",
"code": "NOT_FOUND"
}
Update Info Page
Create or update an info page for a site.
Endpoint: PUT /api/v1/sites/{site_id}/pages/{page_type}/
Scope Required: sites:write
Request Body
{
"content": "We make things by hand."
}
| Field | Type | Required | Description |
|---|---|---|---|
content |
string | Yes | Page body content |
Request
curl -X PUT "https://studio.easel.engineering/api/v1/sites/sit_d0b6fmv28q6vn14peun0/pages/about/" \
-H "Authorization: Bearer your_api_key_here" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: unique-request-id-67890" \
-d '{"content": "We make things by hand."}'
Response
Status: 204 No Content
Delete Info Page
Delete an info page's content.
Endpoint: DELETE /api/v1/sites/{site_id}/pages/{page_type}/
Scope Required: sites:write
Request
curl -X DELETE "https://studio.easel.engineering/api/v1/sites/sit_d0b6fmv28q6vn14peun0/pages/about/" \
-H "Authorization: Bearer your_api_key_here"
Response
Status: 204 No Content
Error Responses
Easel took the page down
A page made again in its place would be up, so a page whose
taken_down_at is set can't be deleted until Easel restores it (see
Takedowns). You can still edit it.
Status: 409 Conflict
{
"error": "Easel took this down, so it can't be published or shown until Easel restores it",
"code": "TAKEN_DOWN"
}
Home Page Object
Fields
| Field | Type | Description |
|---|---|---|
hero_content |
string | Hero copy shown on the home page |
seo_title |
string | Page title for search engines |
seo_description |
string | Meta description for search engines |
taken_down_at |
string|null | ISO 8601 timestamp of when Easel took the home page's text down, or null while it hasn't. Read-only. See Takedowns |
Info Page Object
Fields
| Field | Type | Description |
|---|---|---|
page_type |
string | Page type |
content |
string | Page body content |
updated_at |
string | ISO 8601 timestamp |
taken_down_at |
string|null | ISO 8601 timestamp of when Easel took the page down, or null while it hasn't. Read-only. See Takedowns |
Takedowns
Easel hosts your store's content, so under the EU Digital Services Act its
staff may take a page down that's illegal or against Easel's terms (see
Moderation), which sets its
taken_down_at. Until Easel restores it, the storefront treats a
taken-down info page as unwritten, and shows the home page without its
hero_content, seo_title, and seo_description, in every language.
You can still edit the page, which asks Easel to review it again, or reply
to the email Easel sent the store's owners, but you can't delete an info
page until Easel restores it.
That email is the statement of reasons, and the dashboard keeps it under
Settings › Activity › Easel decisions. The activity log's taken_down
event names the category in reason.
Page Types
aboutshippingreturnstermsprivacycontactorder_confirmationannouncement_bar