Last updated

Cart

The FairShare SDK provides a complete set of cart management functions for adding items, managing quantities, handling subscriptions, and processing checkout.

Quick Start

// Add item to cart
await window.FairShareSDK.addCartItems(12345, { quantity: 1 });

// Open the cart drawer
window.FairShareSDK.openCart();

// Proceed to checkout
await window.FairShareSDK.checkout();

Or use HTML data attributes without JavaScript:

<button data-fluid-add-to-cart="12345">Add to Cart</button>
<button data-fluid-cart="open">View Cart</button>

Cart Widget Control

Control the cart drawer/widget programmatically:

// Open cart
window.FairShareSDK.openCart();
// or: window.FairShareSDK.cart.control.open();

// Close cart
window.FairShareSDK.closeCart();
// or: window.FairShareSDK.cart.control.close();

// Toggle cart
window.FairShareSDK.toggleCart();
// or: window.FairShareSDK.cart.control.toggle();

HTML Controls

<button data-fluid-cart="open">Open Cart</button>
<button data-fluid-cart="close">Close Cart</button>
<button data-fluid-cart="toggle">Toggle Cart</button>

Adding Items

JavaScript API

// Add single item
await window.FairShareSDK.addCartItems(12345, { quantity: 1 });

// Add with subscription
await window.FairShareSDK.addCartItems(12345, {
  quantity: 1,
  subscribe: true
});

// Add multiple items
await window.FairShareSDK.addCartItems([
  { variant_id: 12345, quantity: 2 },
  { variant_id: 67890, quantity: 1 }
]);

// Add a dynamic bundle with bundled items
await window.FairShareSDK.addCartItems(278318, {
  quantity: 1,
  bundled_items: [
    { variant_id: 39325, quantity: 1 },
    { variant_id: 35376, quantity: 1 },
    { variant_id: 11311, quantity: 1 },
  ]
});

HTML Data Attributes

<!-- Basic add to cart -->
<button data-fluid-add-to-cart="12345">Add to Cart</button>

<!-- With quantity -->
<button data-fluid-add-to-cart="12345" data-fluid-quantity="2">
  Add 2 to Cart
</button>

<!-- With subscription -->
<button data-fluid-add-to-cart="12345" data-fluid-subscribe="true">
  Subscribe
</button>

<!-- With specific subscription plan -->
<button
  data-fluid-add-to-cart="12345"
  data-fluid-subscription-plan-id="99"
>
  Subscribe with Plan
</button>

<!-- Add multiple items -->
<button data-fluid-add-to-cart="12345,67890">Add Both</button>

<!-- Dynamic bundle with bundled items -->
<button
  data-fluid-add-to-cart="278318"
  data-fluid-bundled-items='[{"variant_id":39325,"quantity":1},{"variant_id":35376,"quantity":1},{"variant_id":11311,"quantity":1}]'
>
  Add Bundle to Cart
</button>

<!-- Control cart opening after add -->
<button
  data-fluid-add-to-cart="12345"
  data-fluid-open-cart-after-add="false"
>
  Add Silently
</button>

Enrollment Packs

Add enrollment/starter packs to the cart:

// Simple enrollment pack
await window.FairShareSDK.addEnrollmentPack(539);

// Enrollment pack with bundle selections
await window.FairShareSDK.addEnrollmentPack(539, {
  bundleSelections: [
    {
      variant_id: 278318,
      bundled_items: [
        { variant_id: 39325, quantity: 1 },
        { variant_id: 35376, quantity: 1 },
        { variant_id: 11311, quantity: 1 },
      ]
    }
  ]
});

HTML

<button data-fluid-add-enrollment-pack="100">Add Enrollment Pack</button>

<!-- Enrollment pack with bundle selections -->
<button
  data-fluid-add-enrollment-pack="539"
  data-fluid-bundle-selections='[{"variant_id":278318,"bundled_items":[{"variant_id":39325,"quantity":1},{"variant_id":35376,"quantity":1},{"variant_id":11311,"quantity":1}]}]'
>
  Add Enrollment Pack
</button>

<!-- Combined: Enrollment Pack + Items -->
<button data-fluid-add-combined="100+12345,67890">Add Pack + Items</button>

Data Attributes Reference

All available data attributes for no-code HTML integration:

AttributeTypeDescription
data-fluid-add-to-cartstringVariant ID(s), comma-separated for multiple
data-fluid-quantitystringQuantity (default: 1)
data-fluid-subscribestring"true" or "false", comma-separated for multiple
data-fluid-subscription-plan-idstringSubscription plan ID
data-fluid-bundled-itemsJSON stringArray of { variant_id, quantity } for dynamic bundles
data-fluid-open-cart-after-addstringSet to "false" to prevent cart from opening
data-fluid-add-enrollment-packstringEnrollment pack ID
data-fluid-bundle-selectionsJSON stringArray of { variant_id, bundled_items } for enrollment pack bundles

Managing Cart Items

Update Quantities

await window.FairShareSDK.updateCartItems([
  { variant_id: 12345, quantity: 5 }
]);

Decrease Quantity

await window.FairShareSDK.decrementCartItem(variantId, { quantity: 1 });

Remove Item

await window.FairShareSDK.removeCartItemById(itemId);

Clear Cart

await window.FairShareSDK.clearCart();

Subscriptions

Manage subscription status for cart items:

// Add subscription to item
await window.FairShareSDK.subscribeCartItem(itemId, subscriptionPlanId);

// Remove subscription from item
await window.FairShareSDK.unsubscribeCartItem(itemId);

Reading Cart Data

Get Cart from API

const cart = await window.FairShareSDK.getCart();
console.log('Items:', cart.items.length);
console.log('Total:', cart.total);

Get Cached Cart (No API Call)

const localCart = window.FairShareSDK.getLocalCart();

Get Item Count

const count = window.FairShareSDK.getCartItemCount();

Auto-Updating Item Count Display

The SDK automatically updates any element with id="fluid-cart-count":

<span id="fluid-cart-count">0</span>

Checkout

Standard Checkout

await window.FairShareSDK.checkout();

Get Checkout URL

const url = window.FairShareSDK.getCheckoutUrl();
window.open(url, '_blank');

Custom Checkout Handler

Override the default checkout behavior:

window.FairShareSDK.setOnCheckout(async () => {
  const cart = await window.FairShareSDK.getCart();

  if (cart.items.length === 0) {
    alert('Your cart is empty!');
    return;
  }

  // Custom checkout logic
  window.location.href = '/custom-checkout';
});

// Get current handler
const handler = window.FairShareSDK.getOnCheckout();

Cart Loading Events

Listen for cart loading states in your application:

window.addEventListener("CART_LOADING_START", (e) => {
  console.log("Loading started:", e.detail);
  // Show loading spinner
});

window.addEventListener("CART_LOADING_END", (e) => {
  console.log("Loading ended:", e.detail);
  // Hide loading spinner
});

Cart Operation Events

Every cart mutation also emits a uniform CART_OPERATION_SUCCESS / CART_OPERATION_ERROR window event. The CDN can render a built-in toast for them and show a loading spinner on add-to-cart buttons — both are opt-in (off by default), enabled with data-fluid-toast="true" and data-fluid-button-loading="true" on the Fluid script tag. The events fire regardless.

window.addEventListener("CART_OPERATION_ERROR", (e) => {
  console.log(e.detail.operation, "failed:", e.detail.message);
});

See Cart Operation Events for the event payloads, the built-in toast's data-fluid-toast-* configuration, and the button loading helpers.


External Cart Handoff

Adopt a cart created by an external system (e.g., a companion app or backend service):

No JavaScript needed — redirect users with a cart_token query parameter:

https://shop.example.com/?cart_token=TOKEN

The SDK automatically detects the parameter, validates the cart, saves it, and cleans the token from the URL.

Programmatic API

const cart = await window.FairShareSDK.setCartToken("TOKEN");

Both methods validate the token via API, subscribe to Pusher realtime updates, and dispatch events so cart widgets react immediately.


Cart Settings

Customize cart widget behavior:

// Set cart settings
window.FairShareSDK.setCartSettings({
  // your settings
});

// Get current settings
const settings = window.FairShareSDK.getCartSettings();

// Clear settings
window.FairShareSDK.clearCartSettings();

API Reference

Cart Operations

FunctionDescription
getCartFetch cart from API
refreshCartFetch cart from API and update all widgets
getLocalCartGet cart from cache (no API call)
createCartCreate new empty cart
clearCartRemove all items from cart
getCartItemCountGet total item count
setCartTokenAdopt an externally-created cart

Adding Items

FunctionDescription
addCartItemsAdd one or more items to cart
addEnrollmentPackAdd enrollment pack to cart

Updating Items

FunctionDescription
updateCartItemsUpdate item quantities
updateCartItemVariantChange item variant
decrementCartItemDecrease item quantity
removeCartItemByIdRemove item from cart

Subscriptions

FunctionDescription
subscribeCartItemAdd subscription to item
unsubscribeCartItemRemove subscription from item

Checkout

FunctionDescription
checkoutProceed to checkout
getCheckoutUrlGet checkout URL without redirecting
setOnCheckoutSet custom checkout handler

Cart Widget Control

FunctionDescription
openCartOpen the cart drawer
closeCartClose the cart drawer
toggleCartToggle cart open/closed

Cart Settings

FunctionDescription
setCartSettingsSet cart widget settings
getCartSettingsGet current cart settings
clearCartSettingsClear cart settings