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

Easel

← API Documentation

Wishlist API

Shoppers can save products to a wishlist without creating an account. The
storefront keeps the wishlist on the server and remembers it with a cookie, so
the same wishlist follows the shopper between visits. A wishlist link only
works once the shopper chooses to share it; until then it stays private to
their browser.

These read-only endpoints report which products shoppers have saved. Creating
a wishlist, saving a product, and sharing a link are storefront actions and
are not part of the API.

Related resources:

  • Products for the product fields returned below

Endpoints

Only counts are exposed. The wishlists themselves are anonymous, so the API
never returns a wishlist ID or any shopper identity.


List Wishlisted Products

List the products that have been saved to at least one wishlist, ranked by how
many wishlists saved them and then by the most recently created product.
Products with no saves are omitted.

Endpoint: GET /api/v1/products/wishlisted/

Permission Required: Read

Query Parameters

Parameter Type Description
search string Case-insensitive substring match on the product name. Omitted or empty returns every wishlisted product
after string Cursor for pagination. Product public ID of the last item on the previous page. Omit to start from the top of the ranking
limit integer Number of products to return (default 10, max 100)

Pagination follows the same cursor rules as the
product list: after is the id of the last
item from the previous page and the response reports has_more. An after ID
that no longer has any saves yields an empty page.

Request

curl -X GET "https://studio.easel.engineering/api/v1/products/wishlisted/?search=t-shirt&limit=20" \
  -H "Authorization: Bearer your_api_key_here"

Response

Status: 200 OK

{
  "data": [
    {
      "id": "pro_d0b6fmv28q6vn14peun0",
      "name": "Blue T-Shirt",
      "status": "active",
      "description": "A soft cotton tee.",
      "delivery": "physical",
      "created_at": "2026-09-01T12:00:00Z",
      "updated_at": "2026-09-20T09:30:00Z",
      "wishlist_count": 8
    }
  ],
  "has_more": false
}

Only products saved to at least one wishlist are returned, so
wishlist_count is always 1 or greater in this list. Use
Get Product Wishlist to check a product that may have
no saves.

Error Responses

Invalid query parameter

Status: 400 Bad Request

A malformed after, a non-numeric or negative limit, or a limit over 100
returns INVALID_REQUEST_ERROR, with the offending parameter named in the
error message:

{
  "error": "Invalid 'limit' parameter: cannot exceed 100",
  "code": "INVALID_REQUEST_ERROR"
}

Failed to list wishlisted products

Status: 500 Internal Server Error

{
  "error": "Internal server error",
  "code": "INTERNAL_ERROR"
}

Get Product Wishlist

Report how many wishlists saved one product.

Endpoint: GET /api/v1/products/{product_id}/wishlist/

Permission Required: Read

Path Parameters

Parameter Type Description
product_id string Product public ID (e.g., pro_d0b6fmv28q6vn14peun0)

Request

curl -X GET "https://studio.easel.engineering/api/v1/products/pro_d0b6fmv28q6vn14peun0/wishlist/" \
  -H "Authorization: Bearer your_api_key_here"

Response

Status: 200 OK

{
  "data": {
    "product_id": "pro_d0b6fmv28q6vn14peun0",
    "wishlist_count": 3
  }
}

wishlist_count is 0 when no wishlist has saved the product.

Error Responses

Product not found

Status: 404 Not Found

{
  "error": "Resource not found",
  "code": "NOT_FOUND"
}

Failed to get wishlist

Status: 500 Internal Server Error

{
  "error": "Internal server error",
  "code": "INTERNAL_ERROR"
}

Wishlisted Product Object

A wishlisted product is the standard
Product object with one extra field:

Field Type Description
wishlist_count integer Number of wishlists that saved the product

Each wishlist counts once no matter how many of the product's variants are in
it, so a shopper who saves the same product from two variant pages still counts
as one.