Skip to content
hidden

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 script

Clicking 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.

anywhere.htmlhtml
<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. 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. 2

    Include embed.js once

    Paste the script tag anywhere HTML is allowed: your website, WordPress, Webflow, Carrd, Framer, Notion, link-in-bio.

  3. 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.htmlhtml
<!-- 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>
app.jsjs
// 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-script.htmlhtml
<!-- 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

AttributeDescriptionExample
data-hidden-storerequiredYour store slug (the part after the domain in your storefront URL).my-store
data-hidden-productrequiredThe product slug shown on the product page and in the dashboard.lifetime-license
data-hidden-textFills an empty element with this label. Ignored when the element already has content.Buy now

Live price

AttributeDescriptionExample
data-hidden-pricerequiredstore/product to show the current display price (lowest variation).my-store/lifetime-license
data-hidden-price-prefixText before the amount.from
data-hidden-currency-symbolSymbol to print. The amount is always USD.$
data-hidden-formatusd (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.