Headless & SPA

Loyalty that runs on any storefront you can build

Smile works on headless storefronts and single page applications, including Shopify Hydrogen. Drop in the pre-built Smile UI panel with minimal code, or use the JavaScript SDK to build a fully custom loyalty experience inside your own components.

Get started

Built for Shopify · 4.9 ★ (4,122)

Smile.jsHeadless readyimport { loadSmile } from '@smile-io/smile-js'const Smile = await loadSmile()await Smile.initialize({publishableKey, customerToken,preload: ['customerPointsWallet']})WORKS WITHReactVueHydrogenNext.jsVanilla JSYour points1,250Next reward$10 off · 1,000 ptsVIP tierGold
Liquid Death
Nine West
Liquid Death
Monos
Billabong
Monos
K-Swiss
tp-link
K-Swiss
Naturium
Hush Puppies
Naturium
Quiksilver
e.l.f.
Quiksilver
Eddie Bauer
Touchland
Eddie Bauer
Ford
Blue Banana
Ford
Dual Certified

Built for Shopify + Technology Partner

G2 Leader

1st in Loyalty Management Software

SOC 2 Type II

Enterprise-grade security

$3.3B Driven

4,400+ Shopify Plus Brands

HOW IT WORKS

Four steps from install to a live loyalty experience

The SDK does not rely on full page reloads, so nothing about your stack has to change. Include it, identify the customer, and start building.

01

Include the SDK

Add a script tag, or install the @smile-io/smile-js npm package with the bundler you already use, Vite, Webpack, or anything else.

02

Identify the customer

Generate a customer token on your backend to securely identify the logged-in shopper, so your signing key never reaches the client.

03

Preload your data

Fetch the loyalty resources you use across pages in a single call, so client-side navigation stays fast between routes.

04

Build and ship

Initialize the SDK, then pull points balances, rewards, and VIP status into any component you want.

JavaScript SDK

Build the loyalty experience your team designed

Smile.js gives your developers direct access to every loyalty resource: points balances, redeemable rewards, VIP status, earning rules, and referral links. Render them natively in your own components and your own design system, with no iframes and no page reloads.

  • Built for SPAs: no full page reloads required to fetch or refresh data
  • Redeem rewards and record custom activities straight from the client
  • Preload resources in one call to keep API round trips off your render path
Read the SDK docs
Every resource, one SDKSmile.customerPointsWallet.get()Points balance1,250 pointsSmile.customerVipStatus.get()VIP statusGold tierSmile.pointsProducts.purchase(id)Redemption$10 coupon issuedSmile.activities.create({ ... })Custom activity+100 points

Smile UI

Or drop in the pre-built panel and launcher

Not every build needs custom UI. Smile UI brings the production rewards panel and launcher to your custom storefront with a script tag, a customer token, and one initialize call. Style it from your Smile admin, and open it from anywhere on your site with deep links.

  • Pre-built panel and launcher, styled from your Smile admin
  • Deep links open the panel to specific pages from any menu or button
  • Load the JavaScript SDK alongside it with a single flag
Read the headless guide
SmileUI.initialize({ customerToken })Welcome back, Maya1,250 pointsYOUR PROGRAMWays to earnWays to redeemRefer a friend

Shopify Hydrogen

Running Hydrogen? Fully supported.

Every Hydrogen store is headless, but not every headless store is Hydrogen. Smile works on both. For Hydrogen there is a dedicated guide, validated end to end on a real Hydrogen store, that covers everything specific to Shopify's stack: customer tokens from your root loader, Content Security Policy, and client-side navigation.

  • Works with Shopify customer accounts and Oxygen hosting
  • Copy-paste setup for tokens, CSP, and React Router navigation
  • Use the SDK, drop in Smile UI, or run both together
Read the Hydrogen guide
Shopify HydrogenValidated end to endHEADLESSAny custom storefront, any platformNext.jsVue / NuxtCustom buildsSHOPIFY HYDROGENCustom React storefrontson Shopify's stackOxygen hostingCustomer accountsSmile works on bothJavaScript SDKSmile UI

DEVELOPER TOOLKIT

Everything a custom build needs

The SDK and Smile UI run on the same platform as the rest of Smile, so a custom frontend gives up nothing.

JWT customer tokens

Identify logged-in customers securely with tokens generated on your backend, never in the browser.

Resource preloading

Batch the loyalty data you need across pages into one call, then read it synchronously anywhere.

Points and rewards methods

Fetch wallets, redeem points products, and record custom earning activities from the client.

Panel deep links

Open the Smile UI panel to a specific page from any nav item, button, or URL on your site.

Framework agnostic

A plain JavaScript SDK that works in React, Vue, Svelte, Hydrogen, or no framework at all.

Documentation built for devs

A full reference for every method and resource at dev.smile.io, with guides for headless and SPA setups.

Why engineering teams build on Smile

A custom storefront is a bet on your own experience. Smile is the loyalty layer that keeps up with it, on infrastructure your business can pass through review.

An API partners build on. The same platform behind the SDK powers a rich and extensive REST API with OAuth and webhooks. More than 25 partners have built their integrations on it.

Built to pass review. SOC 2 Type 2 certified and the only loyalty platform holding both of Shopify's certifications, including the Technology Partner enterprise-readiness audit.

A team behind the build. On Smile Plus, a dedicated team helps design your program and supports your integration from first commit to launch.

Customer stories

Brands running loyalty as a revenue channel

Custom storefront or not, the outcome is the same: loyalty that shows up in repeat revenue.

Headless & SPA

Bring loyalty to the storefront you built

Talk to a loyalty strategist about what a custom build looks like on your stack, or get started in the Shopify App Store.

Get started