1
Get a publishable key
In the Quickbutik admin, open Custom storefront and copy the shop’s publishable key (
qb_pk_…). It already carries every scope the kit needs. No shop yet? Create one with a single request. See Publishable keys for alternatives.2
Make sure products are visible
The storefront only sees products with
visible: true. If the catalog looks empty, this is usually why.3
Build the page
Pick your flavour below.
4
Mount the thank-you page at /success/[orderNumber]
After payment, the hosted checkout sends the shopper to
<origin of successUrl>/success/<orderNumber>. Only the origin of successUrl is used, and the path is ignored.- Script tag
- React
- Vanilla JS
No npm, no bundler, no JavaScript of your own. Save this as The list above shows the catalog, but a grid card can’t add to the cart on its own. Add items from a product page:The thank-you page (served at Continue with Web components.
index.html:index.html
products.html
/success/<orderNumber>) is one element:success.html
Try the loop
Add a product, open the cart and click checkout. You should land in the hosted Quickbutik checkout.A shop that hasn’t activated Quickbutik Payments runs the checkout in demo mode. The shopper walks the real checkout, but the payment step shows demo methods, no money moves and no order is created. That’s expected while you build, and nothing in your code changes when payments go live. See Going live.
A cookie consent banner appears on the page. That’s on by default from kit 1.8.0: the kit asks the shopper, and only loads the shop’s own GA4, GTM or Meta pixel (set in the Quickbutik admin) after they agree. Set
consent: false in the config, or data-consent="false" on the script tag, to turn it off. See Consent and analytics.Rules worth knowing on day one
- Money is in minor units.
24900is 249,00 kr. UseformatMoney(), or the formatted fields the elements expose. - Render
image.url, neverimage.path.pathis a bare filename and 404s.<ProductImage />,<qb-product-image>andresolveProductImageUrl()handle images for you. stock.stock === nullmeans “not tracked”, so the product is purchasable. It doesn’t mean sold out.- A confirmation
timeoutis not a payment failure. Onlyfailedis.
Next steps
Checkout flow
Sessions, the return leg and confirmation polling.
Storage & SSR
How the server and browser agree on one cart.