Skip to content

Points & rewards stores

Sell your products for points — your site keeps the balances; we price every variant in points, show them with the embed, keep your prices in sync and produce and ship each order.

For rewards programs, company stores and loyalty catalogs where customers pay with points your website keeps. We never hold point balances: we give every product variant a points price, show it, and produce and ship the orders your server places.

Setup

  1. Settings → Pricing: choose Our wholesale price + my markup so your prices follow our costs automatically, turn on Show prices in points, and set how many points one dollar is worth (e.g. 100) and the rounding (e.g. up to a multiple of 10). Accept the pricing terms (needed for live orders). See Retail prices.
  2. Developers → Embed: create a publishable key for your website and add the embed where the products should appear — data-button-label="Redeem" and data-points-label="points" (or your program's name) suit most programs.
  3. Developers → API keys: create a secret key for your server.

Redeeming

Text
customer picks a variant ──► swaglists:select event (product_variant_id, quantity, retail_points)
your server                ──► GET /v1/product_variants?sku=… (re-check retail_points — never trust the browser)
                           ──► deduct the points from the customer's balance
                           ──► POST /v1/orders  { items: [{ product_variant_id, quantity }], recipient }
we                         ──► charge your prepaid credits the wholesale price, produce and ship under your brand

Deduct points only after POST /orders succeeds (or refund them when it fails), and send an Idempotency-Key so a retried request never creates a second order. Order updates and tracking arrive as webhooks; refund the points if an order is canceled.

Credits: an order is only sent to production when your credits cover it — keep enough credits (Billing) or choose what happens otherwise in Settings → Orders.

Keeping points prices in sync

Load every variant's retail_points once with GET /v1/product_variants, then subscribe to product.prices_changed: it lists each variant whose points price moved, with the old and new value — after our costs change, or when you change your markup or points settings. The embed always shows current prices.

Taxes

Sales tax on your orders is added to the wholesale charge from your credits (unless your account is tax exempt); your customers pay only points.