Composable Frontend 2.0 Learn more 

  • Commerce Cloud/
    Custom Data/
    Create a wishlist resource

    Create a wishlist resource

    In your store or organization, you can provide customers with one or more wishlists. Use Flows to create a wishlist resource and associate it with the product and customer resources.

    Prerequisites

    If you want to follow along, you need the following items:

    • A Composable Commerce account and the Client ID and Client Secret of your store
    • An access token
    • Good understanding of object-oriented programming or JavaScript.

    Step-by-step walkthrough

    1. Create a Flow that contains your wishlist object.
    2. Create products Field to store the customerʼs desired products.
    3. Create empty Entries to associate with products.
    4. Create a relationship between an Entry and a product. This is created every time a customer adds a product to a wishlist.
    5. Associate a wishlist with a customer by adding a customers Flow
    6. Create a one-to-many relationship between a customer and a wishlist.

    Create a new custom Flow

    Using the Custom Data (Flows) API, go ahead and create a flow for Wishlist.

    curl -X POST "https://useast.api.elasticpath.com/v2/flows" \
         -H "Authorization: XXXX" \
         -H "Content-Type: application/json" \
         -d $'{
          "data": {
            "type": "flow",
            "name": "wishlist",
            "slug": "wishlist",
            "description": "Allow customers to store products they want to purchase at a later date",
            "enabled": true
          }
        }'
    

    Make sure to take note of the Flow ID returned. You must replace WISHLIST-FLOW-ID in the following example with the Flow ID.

    Tell a wishlist it has Products (create a Flow Field)

    In this step, we create a field for products. This field stores the customer’s desired products.

    curl -X POST "https://useast.api.elasticpath.com/v2/fields" \
         -H "Authorization: XXXX" \
         -H "Content-Type: application/json" \
         -d $ {
          "data": {
            "type": "field",
            "name": "Products",
            "slug": "products",
            "field_type": "relationship",
            "validation_rules": [{
              "type": "one-to-many",
              "to": "product"
            }],
            "description": "Wishlist Products",
            "required": false,
            "enabled": true,
            "relationships": {
              "flow": {
                "data": {
                  "type": "flow",
                  "id": "WISHLIST-FLOW-ID"
                }
              }
            }
          }
        }
    

    Create an empty wishlist (Flow Entry)

    With our custom Flow configured, we next create an empty Entry so we can associate products.

    curl -X POST "https://useast.api.elasticpath.com/v2/flows/wishlist/entries" \
         -H "Authorization: XXXX" \
         -H "Content-Type: application/json" \
         -d $'{
          "data": {
            "type": "entry"
          }
        }'
    

    Add Product to wishlist

    With our custom Flow entry, we can now associate products with a wishlist entry. You need ENTRY-ID and PRODUCT-FIELD-SLUG specified previously to complete this request.

    curl -X POST https://useast.api.elasticpath.com/v2/flows/wishlist/entries/:entry-id/relationships/:product-field-slug \
         -H "Authorization: XXXX" \
         -H "Content-Type: application/json" \
         -d $'{
          "data": [
            {
                "type": "product",
                "id": "ba9ba29d-06da-4ba9-9e2e-f0e776703324"
            }
          ]
        }'
    

    Get all wishlists

    curl https://useast.api.elasticpath.com/v2/flows/wishlist/entries \
         -H "Authorization: Bearer XXXX"
    

    The response contains the associated products per entry as seen in the following example.

    {
      "data": {
        "id": "ENTRY-ID",
        "type": "entry",
        "relationships": {
          "products": {
            "data": [
              {
                "type": "product",
                "id": "ba9ba29d-06da-4ba9-9e2e-f0e776703324"
              }]
          }
        }
      }
    }
    

    Due to the implicit grant type, it is important we connect wishlist and customers. We do that next by extending the customer resource.

    Extend the Customers Entity (create a Customer Flow)

    We now need to associate a wishlist to a customer.

    If you already have a Flow for customers, skip this step.

    curl -X POST https://useast.api.elasticpath.com/v2/flows \
         -H "Authorization: XXXX" \
         -H "Content-Type: application/json" \
         -d $'{
          "data": {
            "type": "flow",
            "name": "Customers",
            "slug": "customers",
            "description": "Extends the default customer object",
            "enabled": true
          }
        }'
    

    Now let’s create the relationships field that links a customer to a wishlist. We’re going to create a one-to-many relationship because we might want customers to create multiple wishlists:

    curl -X POST https://useast.api.elasticpath.com/v2/fields \
         -H "Authorization: XXXX" \
         -H "Content-Type: application/json" \
         -d $'{
          "data": {
            "type": "field",
            "name": "Wishlists",
            "slug": "wishlists",
            "field_type": "relationship",
            "validation_rules": [{
              "type": "one-to-many",
              "to": "product"
            }],
            "description": "Customers wishlists",
            "required": false,
            "enabled": true,
            "relationships": {
              "flow": {
                "data": {
                  "type": "flow",
                  "id": “CUSTOMER-FLOW-ID"
                }
              }
            }
          }
        }'
    

    We now have the ability to send updates to customers, including their relationships:

    curl -X POST https://useast.api.elasticpath.com/v2/customers/:customer-id/relationships/wishlists \
        -H "Authorization: Bearer XXXX" \
        -d $'{
         "data": [{
            "type": "wishlist",
            "id": "WISHLIST-ENTRY-ID}"
          }]
        }'
    

    Get a customerʼs wishlists

    We saved the wishlist to a customer, so when we make API calls to get that customer we see the wishlist(s) directly on the customer data object. Donʼt forget to set ?include=wishlists to get the wishlist objects.

    curl -X GET https://useast.api.elasticpath.com/v2/customers/:customer-id?include=wishlists \
         -H "Authorization: Bearer XXXX"
    

    The response looks like this:

    {
      "data": {
        "id": "c8c1c511-beef-4812-9b7a-9f92c587217c",
        "type": "customer",
        "name": "Ron Swanson",
        "email": "ron@swanson.com",
        "password": true,
        "relationships": [
          ("wishlists": [
            {
              "type": "entry",
              "id": "WISHLIST-ENTRY-ID"
            }
          ])
        ],
        "included": {
          "wishlists": [
            {
              "id": "wishlist-ENTRY-ID",
              "type": "entry",
              "relationships": {
                "products": {
                  "data": [
                    {
                      "type": "product",
                      "id": "ba9ba29d-06da-4ba9-9e2e-f0e776703324"
                    },
                    {
                      "type": "product",
                      "id": "394916e8-1d47-44a0-b5d0-a5a61b71bab8"
                    }
                  ]
                }
              }
            }
          ]
        }
      }
    }
    

    Deleting a wishlist

    To delete the wishlist, you need its entry ID. After you have the ID, you can make the following request:

    curl -X DELETE https://useast.api.elasticpath.com/v2/flows/wishlist/entries/:entry-id \
         -H "Authorization: XXXX"
    

    After you have done this, delete the relationship which exists on the customer.

    Updating a wishlist

    If your customer wants to add another product to their wishlist, you can append a new relationship without affecting the existing related products. If your customer wants to remove a product from their wishlist, follow the delete method.

    Previous
    Create a blog resource