Embed
Sell from any website
Drop a Buy button and a live price on your site, blog, docs or link-in-bio. Buyers pay in a modal without leaving your page and get the same instant delivery as on your Hidden storefront.
Configure
Slugs come from your dashboard: the store slug is your storefront URL, the product slug is on each product page.
Shown before the live price.
The button is your own element: style it with your CSS. Only the two data attributes matter.
Live preview
Loading scriptClicking opens https://sellhidden.com/demo/p/starter-kit in a checkout modal on this page. The price comes from the public API and shows a placeholder until the store exists.
<button data-hidden-store="demo" data-hidden-product="starter-kit">Buy now</button>
<span data-hidden-price="demo/starter-kit" data-hidden-price-prefix="from "></span>
<script src="https://sellhidden.com/embed.js" async></script>How it works
One script tag. That is the whole integration.
- 1
Add the attributes to any element
A button, a link, a div: give it data-hidden-store and data-hidden-product. Style it however you like.
- 2
Include embed.js once
Paste the script tag anywhere HTML is allowed: your website, WordPress, Webflow, Carrd, Framer, Notion, link-in-bio.
- 3
Buyers check out in place
Clicking opens a modal with the live product page and checkout. Close with the X, Escape or a click outside. Price, stock and delivery come from your dashboard.
- One script tag. No SDK, no build step, no plugin to keep updated.
- Buyers check out in a modal and never leave your page.
- Live prices from the public API, cached for 60 seconds.
- Change a price or stock level in your dashboard and every embed follows.
- The button is your own element with your own CSS.
<!-- Several buttons and prices on one page: one script tag -->
<a data-hidden-store="my-store" data-hidden-product="starter-kit">Get the starter kit</a>
<button data-hidden-store="my-store" data-hidden-product="pro-kit">Go Pro</button>
<p>Pro is <span data-hidden-price="my-store/pro-kit"></span> today.</p>
<script src="https://sellhidden.com/embed.js" async></script>// Open the checkout modal from your own code (after embed.js loaded)
window.HiddenEmbed.open("my-store", "starter-kit");
window.HiddenEmbed.close();
// Bind buttons and prices you added after page load (single-page apps)
window.HiddenEmbed.scan();<!-- No JavaScript allowed? Link straight to checkout -->
<a href="https://sellhidden.com/my-store/p/starter-kit?buy=1">Buy now</a>Reference
Attributes
Buy button
| Attribute | Description | Example |
|---|---|---|
data-hidden-storerequired | Your store slug (the part after the domain in your storefront URL). | my-store |
data-hidden-productrequired | The product slug shown on the product page and in the dashboard. | lifetime-license |
data-hidden-text | Fills an empty element with this label. Ignored when the element already has content. | Buy now |
Live price
| Attribute | Description | Example |
|---|---|---|
data-hidden-pricerequired | store/product to show the current display price (lowest variation). | my-store/lifetime-license |
data-hidden-price-prefix | Text before the amount. | from |
data-hidden-currency-symbol | Symbol to print. The amount is always USD. | $ |
data-hidden-format | usd (12.00 with symbol) or raw (12, no symbol). | usd |
Once loaded, a price span also gets data-hidden-in-stock="true|false", so you can style sold-out products. A missing product leaves the span empty and sets data-hidden-error.
Privacy
The script sets no cookies and reads nothing on the host page. The only request before a click is the public price lookup for spans you added.
Security
Slugs are validated and URL-encoded. The checkout host is taken from the script src, so a copied snippet cannot be pointed elsewhere. Messages from the modal are accepted only from that origin.
Performance
About 6 KB, no dependencies, idempotent: include it once or ten times, elements are bound exactly once.
Need more than a button?
Signed webhooks, API keys and a public REST API are on every plan. The docs cover signatures, retries and every endpoint.