Public Alpha. Easel is in early development, so expect rough edges.

Easel

← API Documentation

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:

Info pages:


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

  • about
  • shipping
  • returns
  • terms
  • privacy
  • contact
  • order_confirmation
  • announcement_bar