Domain Workspaces

FloatMessage is organized around domains. Every asset you create - messages, chat conversations, form submissions, surveys, tickets, push subscriptions, analytics - belongs to exactly one domain. The dashboard always shows you a single domain at a time, and the embed script only loads what belongs to the host it's running on.

Plan limits

  • Free trial & Pro - 1 domain workspace.
  • Enterprise - up to 20 domain workspaces.

You pick your first domain when you sign up. If you sign up with Google, FloatMessage redirects you to a one-screen onboarding step before the dashboard loads to collect the domain. Enterprise users can add more from Dashboard → Domains.

Adding a domain

  1. Open Dashboard → Domains.
  2. Click Add.
  3. Enter the hostname (acme.com - no protocol, no path, no port) and an optional friendly name.
  4. Save. The new domain shows up in the workspace switcher in the sidebar.

There's no DNS or TXT verification - the hostname is the workspace key, and the embed script will only load assets when it's actually running on a host you registered. Your first domain is automatically marked Primary and is what new dashboards default to.

The workspace switcher

If you have more than one domain, a workspace switcher dropdown appears in the dashboard sidebar. Picking a domain scopes the entire dashboard to that workspace:

  • Messages - only messages that belong to the current domain.
  • Chat - only conversations and visitors from this domain. Chat settings (welcome message, AI config, etc.) are also per-domain.
  • Submissions - only form submissions from this domain.
  • Surveys - only responses from this domain.
  • Tickets - only tickets from this domain.
  • Overview / analytics - impressions, clicks, dismissals, chat opens scoped to this domain.

Anything you create while a domain is selected is automatically tagged with that domain. There's no “cross-domain” mode - messages always belong to exactly one domain.

Embed script

On the website itself the embed script auto-detects which domain it's running on. You install the same script tag on every site:

<script src="https://floatmessage.com/embed/floatmessage.js?userId=YOUR_USER_ID" defer></script>

When the script loads it reads window.location.hostname and sends it to the server on every backend call. The server resolves the host to one of your registered domains and only returns the messages, chat config, and analytics that belong to it. If the script lands on a host you haven't registered, the response is empty - nothing renders.

Already installed with data-user? Still works. The runtime accepts both formats.

Override the auto-detected domain

If you need to pin the script to a specific domain (staging, preview deployments, behind a custom proxy) set domain explicitly in the URL:

<script src="https://floatmessage.com/embed/floatmessage.js?userId=YOUR_USER_ID&domain=acme.com" defer></script>

How matching works

When the embed script calls /api/embed/user?userId=…&domain=acme.com, the server:

  1. Looks up acme.com in your registered domains.
  2. If found, returns only the messages whose domainId matches that domain.
  3. If not found, returns an empty list. Nothing renders.

The same rule applies to /api/embed?id=<messageId>: the server checks that the message's domain matches the calling host before returning it. This stops a copy-pasted message ID from rendering on a site you don't own.

Subdomains are treated as distinct hosts. www.acme.com and acme.com are different domains as far as FloatMessage is concerned - register the host you actually use, or use ?domain= to canonicalize.

Use cases

  • Single site (Free / Pro) - your one domain is the workspace. Nothing to configure beyond signup.
  • Agencies (Enterprise) - manage many client websites from one dashboard, each with its own messages, chat, and analytics. Combine with team management to give each client a viewer-role login on their own workspace.
  • Multi-brand companies (Enterprise) - keep separate chat configs, popups, and surveys per brand without spinning up multiple FloatMessage accounts.
  • Geographic sites (Enterprise) - run different campaigns on acme.com and acme.fr.
  • Staging vs production (Enterprise) - point staging at a separate domain workspace so test traffic and conversations stay out of your live data.