Embedding a website builder in your product: how the pieces fit

If you run a SaaS product for salons, gyms, contractors or restaurants, your customers ask for a website and you would rather they did not leave to get one. Whether to embed or redirect is covered on our SaaS platforms page and in the white label vs API comparison. This page is for the team that has already decided to embed: how the session handshake works, what to lock down, which features to expose, what breaks inside an iframe, and how to listen for events.

TL;DR

Start with the decision you have already made

There are three ways to give your users a website: send them to a branded builder on its own address, call an API and build your own interface, or embed a ready-made builder inside your product. The trade-offs are covered on our SaaS platforms page and in white label vs API, and the endpoint reference lives on the API page. Here we assume you want the builder to appear inside your own app, under your own navigation, signed in as your user.

Embedded SDK screen in the brand console, with a New embed config button and an empty state explaining that each config has its own client credentials and customisation options

*The Embedded SDK section of the brand console. Each embed config gets its own client credentials.*

The session handshake

Embedding goes wrong most often at sign-in. The pattern We.Inc uses keeps your users signed in to your product only, with no second account to manage:

  1. Your back end calls the embed session endpoint with the config's client ID, its client secret and your own user's ID (email and name are optional).
  2. The response contains a session token, the builder address, the project ID for that user and an expiry time.
  3. Your back end returns only the session token to your front end.
  4. Your front end loads the embed script, points it at a container element, and initialises it with the token. Optional callbacks fire when the builder is ready, when a project is saved, on errors, and when the session expires.
  5. On expiry, your front end asks your back end for a fresh token, exactly as in step 1.

Rules that follow from this:

Allowed origins

Every embed config has a list of allowed origins: the exact HTTPS addresses (or wildcard subdomain patterns) of the product pages that will host the builder. If a session request arrives with an origin header that is not on the list, it is refused.

Plan the list per environment. A common mistake is a single config used by production, staging and local development, which means the production config has to allow test addresses. Create one config per environment instead, each with its own credentials, so revoking staging never touches production.

What to expose

Each config chooses which builder panels your users get. The choices in the console are:

PanelWhat it doesTypical choice for a vertical SaaS
AI chatUsers describe changes in plain English and the AI makes themOn: this is the main editing method for non-technical users
PreviewLive preview of the siteOn
File treeBrowse project filesOff for most audiences
TerminalTerminal access in the builderOff unless your users are developers
DeployPublish the siteOn, or off if you publish from your own interface
ExportDownload the source codeYour call: on gives users an exit, off keeps them in your product

Configs also carry a theme (primary colour, font, corner radius, dark mode), an optional custom logo, a switch for the "powered by" mark, a maximum number of projects per user, and a maximum number of AI messages per session. Set the AI message cap deliberately; it is the main lever on usage cost for a tier that includes websites.

API and Webhooks screen with sections for API keys and webhook endpoints, both empty

*API keys and webhook endpoints live alongside the embed settings in the brand console.*

What breaks inside an iframe

Embedded builders run in a frame on your page. Plan for these before launch, not after the first support ticket.

Listening for events

Two kinds of event matter to an embedding product.

In the page: the embed script's callbacks (ready, saved, error, session expired) let your interface react immediately, for example by showing "Saved" in your own header.

On your server: brand-level webhooks report client events: client signed up, first site created, site published, not published seven days after joining, client referred someone, payment received, and client paused. Each delivery is a JSON body with a delivery ID (stable across retries), the event name, a timestamp and the data.

Webhooks settings with an endpoint field, event checkboxes and a note that failed deliveries are retried

*Choosing webhook events. The note on the right states the retry and auto-disable rule.*

How to receive them safely:

Typical uses: mark the account as "website live" in your product when site published arrives; start an onboarding nudge on not published after seven days; sync paused clients with your own subscription state.

Permissions and the rest of the platform

The embed is one way in. The same brand account also has client accounts with per-client switches (publish, own domain, code view, blog, store, forms, SEO, and approval before publishing), an audit log of organisation actions, and a branded portal you can use alongside the embed for users who prefer a separate tab.

One client's settings with switches for publishing, custom domain, code access, blog, store, forms, SEO and approval before publishing

*Per-client switches in the brand console, independent of the embed config.*

The builder under the brand, with a template site loaded in the preview

*The builder itself, here on the brand's own address. Embedded, the same builder sits inside your product.*

Sites are real code (React, Vite, TypeScript, Tailwind), and each site's code can be downloaded or synced to GitHub, which matters if you ever move platform or a customer asks for their files.

Code panel with a file tree and component source open

*The code panel: the site is source code, not a locked format.*

Pre-launch checklist

Copy this into your launch ticket.

Where to go next

If you are still choosing between embedding and a branded portal, start with the SaaS platforms page. If you need endpoint detail for client provisioning, see the API page. If you are ready to try the embed with your own product in a test environment, book a demo and we will set up a config with you.

Sources

Last checked 2026-10-25.

Book a demo. Pricing is tailored to your volume and setup, and you get your exact price on the call. 0% transaction fee.

Frequently asked questions

Do my users need a separate login for the embedded builder?

No. Your server requests a short-lived session token for your own user ID with the config's client ID and secret, and your front end initialises the embed with that token.

Can I hide parts of the builder from my users?

Yes. Each embed config chooses which panels are visible: AI chat, preview, file tree, terminal, deploy and export. It also sets theme, logo, the powered-by mark, projects per user and AI messages per session.

How are webhooks secured?

Each delivery is signed with HMAC-SHA256, including a version that signs a timestamp with the body so you can reject replays. Deliveries carry a stable ID for de-duplication and are retried up to six times over about fifteen hours.

Will the embed work in Safari?

The session-token handshake avoids depending on the builder's own cookies, but browsers keep tightening third-party storage, so test the full flow in current Safari and Firefox, including private windows, before launch.

Is this different from the We.Inc API?

The API lets you build your own interface and provision clients from your systems. The embed puts the ready-made builder inside your product. Many teams use the API for provisioning and the embed for editing.

Keep reading

More in White Label

We.Inc is an AI-powered website builder you can resell under your own brand. Launch a branded client dashboard, bill on Stripe Connect, and deliver AI-generated websites in minutes. White-label pricing is tailored to your volume and setup: book a 30-minute demo for a quote.

Product

Who It's For

Features

Resources

Company

View Sitemap