Waitlist / SDK integration
Waitlist SDK
Put the waitlist on any page — share its hosted URL, or embed it as an auto-resizing iframe. These are the exact snippets your dashboard's SDK → Waitlist tab generates (same source, pre-filled with your slug and default language). Replace YOUR_WAITLIST_SLUG with your waitlist's slug.
Show the waitlist on your website
Hosted waitlist page — share this URL
https://onelo.tools/waitlist/YOUR_WAITLIST_SLUG
The URL works on its own as a hosted page if you'd rather link to it than embed it. The look comes from the linked app's Branding & Waitlist tabs.
Embed · Full-width (follows browser width)
<iframe
id="onelo-embed-YOUR_WAITLIST_SLUG"
src="https://onelo.tools/waitlist/YOUR_WAITLIST_SLUG?lang=en"
style="width:100vw;max-width:100vw;margin-left:calc(50% - 50vw);border:none;min-height:480px;"
loading="lazy"
></iframe>
<script>
// Auto-resize the iframe height to its content (no inner scrollbar). Handles
// both the waitlist form and the store (the waitlist-mode toggle shows either).
window.addEventListener('message', function (e) {
if (e.origin !== "https://onelo.tools") return;
var d = e.data || {};
if (d.type === 'onelo:resize' && d.height) {
var f = document.getElementById('onelo-embed-YOUR_WAITLIST_SLUG');
if (f) f.style.height = d.height + 'px';
}
});
</script>Embed · In-container (fills its slot — keeps it inside your page column)
<iframe
id="onelo-embed-YOUR_WAITLIST_SLUG"
src="https://onelo.tools/waitlist/YOUR_WAITLIST_SLUG?lang=en"
style="width:100%;border:none;min-height:480px;"
loading="lazy"
></iframe>
<script>
// Auto-resize the iframe height to its content (no inner scrollbar). Handles
// both the waitlist form and the store (the waitlist-mode toggle shows either).
window.addEventListener('message', function (e) {
if (e.origin !== "https://onelo.tools") return;
var d = e.data || {};
if (d.type === 'onelo:resize' && d.height) {
var f = document.getElementById('onelo-embed-YOUR_WAITLIST_SLUG');
if (f) f.style.height = d.height + 'px';
}
});
</script>postMessage listener that auto-resizes the iframe to its content (no inner scrollbar). The page adapts on its own: it shows the signup form while Waitlist mode is on, and redirects to your store once you launch (unless you disable Auto-redirect to store, in which case it shows a branded “closed” state) — so the same embed keeps working before and after launch. See Waitlist mode & the store.Choosing the language
The form's language is driven by the ?lang= query on the URL. Your code decides the value — render your German page with ?lang=de, your Polish page with ?lang=pl, and so on. An unknown or missing value falls back to your default language. Full details in Customize the form.
Is the embed secure?
Yes. The signup endpoint is public by design — anyone can submit an email — so the protection is about stopping abuse, not gatekeeping access:
| Protection | What it does |
|---|---|
| Slug binding | The embed is bound to your account by the waitlist slug in its URL — there is nothing secret in it to leak. |
| Rate limiting | Capped at 5 signups per minute per IP — blunts scripted floods and email enumeration. |
| Bot verification | Cloudflare Turnstile challenges automated submissions before the signup is accepted. |
| Honeypot | A hidden field that bots fill and humans never see; filled submissions are silently dropped. |
| List-size cap | Your list holds up to Free 500 / Pro 5,000 / Business 20,000 active entries in total. At the cap, the endpoint declines new signups. |
| Hashed IP | IP addresses are stored only as a SHA-256 hash, for abuse tracking — never in the clear. |
No API key needed
The embed and the hosted page are bound to your account by the waitlist slug alone — no publishable key is involved. Copy the pre-filled snippet from the dashboard → SDK tab.