1. Product catalogs

Building a wishlist feature with product collections

Implementation requirements

Prerequisites

Product Collections implementation requires:

  • Active buyer user account
  • Orderable products with buyer visibility

Environment assumptions

This guide uses:

  • US-West sandbox environment
  • Example product ID: enterprise-product-id
  • Product configured for buyer ordering and visibility

Implementation steps

Create wishlist collection

First, create a Product Collection to serve as the wishlist:

HTTP:

http
POST sandboxapi.ordercloud.io/v1/me/productcollections HTTP/1.1
Authorization: Bearer INSERT_ACCESS_TOKEN_HERE
Content-Type: application/json; charset=UTF-8
json
{
  "ID": "wishlist",
  "Name": "Wishlist"
}

JavaScript:

javascript
import { Me } from "ordercloud-javascript-sdk";

Me.CreateProductCollection({
  ID: "wishlist",
  Name: "Wishlist"
})
.then((productCollection) => {
  console.log(productCollection);
})
.catch((ex) => console.log(ex));

TypeScript:

typescript
import { Me, OrderCloudError, ProductCollection } from "ordercloud-javascript-sdk";

Me.CreateProductCollection({
  ID: "wishlist",
  Name: "Wishlist"
})
.then((productCollection: ProductCollection) => {
  console.log(productCollection);
})
.catch((ex: OrderCloudError) => console.log(ex));

C#:

csharp
using OrderCloud.SDK;

var productCollection = new ProductCollection
{
  ID = "wishlist",
  Name = "Wishlist"
};

try {
  ProductCollection response = await Me.CreateProductCollection(data);
  Console.WriteLine(response);
} catch(OrderCloudException ex) {
  Console.WriteLine(ex.Message);
}

Add products to wishlist

Add products using PUT /me/productcollections/{productCollectionID}/{productID}:

HTTP:

http
PUT https://sandboxapi.ordercloud.io/v1/me/productcollections/wishlist/enterprise-product-id HTTP/1.1
Authorization: Bearer INSERT_ACCESS_TOKEN_HERE
Content-Type: application/json; charset=UTF-8

JavaScript:

javascript
import { Me } from "ordercloud-javascript-sdk";

Me.CreateProductCollectionEntry("wishlist", "enterprise-product-id")
.then(() => {
  console.log("Successfully added a product to your wishlist!");
})
.catch((ex) => console.log(ex));

TypeScript:

typescript
import { Me, OrderCloudError } from "ordercloud-javascript-sdk";

Me.CreateProductCollectionEntry("wishlist", "enterprise-product-id")
.then(() => {
  console.log("Successfully added a product to your wishlist!");
})
.catch((ex: OrderCloudError) => console.log(ex));

C#:

csharp
using OrderCloud.SDK;

try {
  await Me.CreateProductCollectionEntry("wishlist", "enterprise-product-id");
  Console.WriteLine("Successfully added a product to your wishlist!");
} catch(OrderCloudException ex) {
  Console.WriteLine(ex.Message);
}

View wishlist products

Retrieve wishlist contents using collection listing endpoint:

HTTP:

http
GET https://sandboxapi.ordercloud.io/v1/me/productcollections/wishlist/products HTTP/1.1
Authorization: Bearer INSERT_ACCESS_TOKEN_HERE
Content-Type: application/json; charset=UTF-8

JavaScript:

javascript
import { Me } from "ordercloud-javascript-sdk";

Me.ListProductCollectionEntries("wishlist")
.then((wishlist) => {
  console.log(wishlist.Items);
})
.catch((ex) => console.log(ex));

TypeScript:

typescript
import { Me, OrderCloudError } from "ordercloud-javascript-sdk";

Me.ListProductCollectionEntries("wishlist", "enterprise-product-id")
.then((wishlist: ListPageWithFacets<BuyerProduct) => {
  console.log(wishlist.Items);
})
.catch((ex: OrderCloudError) => console.log(ex));

C#:

csharp
using OrderCloud.SDK;

try {
  ListPageWithFacets<BuyerProduct> response = await Me.ListProductCollectionEntries("wishlist", "enterprise-product-id");
  Console.WriteLine(response.Items);
} catch(OrderCloudException ex) {
  Console.WriteLine(ex.Message);
}

Remove wishlist products

Remove products using DELETE /me/productcollections/{productCollectionID}/{productID}:

HTTP:

http
DELETE https://sandboxapi.ordercloud.io/v1/me/productcollections/wishlist/enterprise-product-id HTTP/1.1
Authorization: Bearer INSERT_ACCESS_TOKEN_HERE
Content-Type: application/json; charset=UTF-8

JavaScript:

javascript
import { Me } from "ordercloud-javascript-sdk";

Me.DeleteProductCollectionEntry("wishlist", "enterprise-product-id")
.then(() => {
  console.log("Successfully removed a product from your wishlist.");
})
.catch((ex) => console.log(ex));

TypeScript:

typescript
import { Me, OrderCloudError } from "ordercloud-javascript-sdk";

Me.DeleteProductCollectionEntry("wishlist", "enterprise-product-id")
.then(() => {
  console.log("Successfully removed a product from your wishlist.");
})
.catch((ex: OrderCloudError) => console.log(ex));

C#:

csharp
using OrderCloud.SDK;

try {
  await Me.DeleteProductCollectionEntry("wishlist", "enterprise-product-id");
  Console.WriteLine("Successfully removed a product from your wishlist.");
} catch(OrderCloudException ex) {
  Console.WriteLine(ex.Message);
}

Implementation considerations

Feature applications

Product Collections enable various features:

  • Wishlists
  • Save for later functionality
  • Favorites lists
  • Custom collection types

System limitations

Important constraints:

  • Buyer user access only
  • Individual user visibility
  • 500 product limit per collection
  • Unlimited collections per user
  • Visibility-dependent product access

For additional details, see key features.

If you have suggestions for improving this article, let us know!