Understanding tenants
Tenants (previously named as brands) represents a segment that a user belongs to. It can be organizations, teams within an organization, projects, workspaces, subsidiary companies or different product lines in the same business, and so on. Tenants in SuprSend are used to design custom notification experience based on these segments.Possible customizations and usage
Each tenant can have its own properties, preferences, vendors, and custom template design or content. You can use tenants to:- White-label notifications - Send notifications to your customers’ end users with their branding, colors, logos, and social links. One shared template;
$brand.*variables are replaced with tenant-specific values at runtime. - Set admin-level preference defaults - Define default notification preferences at the account or project level that apply to all users within it.
- Per-tenant user preferences - Let users have different notification preferences for each tenant they belong to. For example, a user might mute Slack notifications for one project but keep them on for another. Just pass
tenant_idwhile saving per-tenant preferences for a user. - Route via tenant vendors - Send notifications through your customers’ own email domain, SMS sender ID, or WhatsApp provider instead of yours. If no tenant vendor is set, the default vendor is used.
- Scope in-app feeds - Show a separate notification inbox per tenant so users only see what’s relevant to their current context. Messages are tagged with
tenant_id; badge counts are scoped automatically. - Block preference categories - Block certain paid features / modules or channels for a tenant as they have not subscribed to them.
- Custom template content per tenant - Go beyond variable substitution and give a tenant its own template content, layout, or channels. Create a template variant with a
tenant_idcondition — SuprSend picks the matching variant at send time and falls back to the default template for tenants without one. - Per-tenant user properties or channel identities - Users can have different roles per project or different push tokens, Slack tokens, or emails per app. Set per-tenant overrides on top of the user’s global profile; SuprSend merges them at send time.
default tenant that represents your own organization. If no tenant_id is passed in a workflow or event trigger, the default tenant’s properties are applied.How tenants work
By default, tenancy is a trigger-time concept. You passtenant_id at trigger time and SuprSend applies that tenant’s configuration at runtime to your notifications.
When a workflow is triggered with a tenant_id, SuprSend layers the tenant’s configuration onto the send:
- Select the template variant whose condition matches the
tenant_id, falling back to the default template if no variant matches — this is how a tenant gets its own content, layout, or channels rather than only variable substitution. - Resolve the tenant’s branding properties and replace
$tenant.*variables in workflows or$brand.*variables in your templates with tenant properties. - Evaluate tenant-level admin preferences and default preference settings.
- Apply per-user, per-tenant preferences if the user has them set for that tenant.
- Shallow-merge the recipient’s per-tenant user profile on top of their global profile — per-tenant channel identities (push tokens, Slack tokens, email) and properties (
role,plan) win for this send. - Route the notification through the tenant’s configured vendor, falling back to the default vendor if none is set. If no tenant vendor is set, the default vendor is used.
- Tag the message with the
tenant_idso in-app inbox feeds can be scoped per tenant.
Real-world examples
Multi-tenant B2B2X applications
Admin preferences in SaaS Applications
Project Management App with per-project preference settings
Multiple apps with per-app user identities
FAQ
Do I need to assign users to tenants?
Do I need to assign users to tenants?
tenant_id at trigger time and SuprSend will apply that tenant’s configuration.Can a user belong to multiple tenants?
Can a user belong to multiple tenants?
distinct_id with any number of tenants and store a different set of properties and channel identities per tenant. At send time, SuprSend shallow-merges the user’s global profile with the per-tenant override for the triggering tenant_id. Workspaces can also be set to exclusive mode to restrict a user to at most one tenant.What happens if I don't pass a tenant_id?
What happens if I don't pass a tenant_id?
default tenant is used. Every workspace has one, representing your organization’s own branding and settings.Is there a limit on the number of tenants?
Is there a limit on the number of tenants?
Can I use different workflows per tenant?
Can I use different workflows per tenant?
$tenant.* variables, per-tenant preferences, and step conditions to customize behavior within a single shared workflow. This keeps your notification logic manageable as you scale.What if two business lines have completely different users and notifications?
What if two business lines have completely different users and notifications?
Will all users in a tenant receive a notification when I trigger with that tenant_id?
Will all users in a tenant receive a notification when I trigger with that tenant_id?
tenant_id in a workflow trigger does not send the notification to all users in that tenant. It only applies that tenant’s configuration (branding, preferences, vendors) to the notification. You still need to specify the recipients explicitly in your trigger call.Can I update a tenant's branding and use custom properties in templates?
Can I update a tenant's branding and use custom properties in templates?
$brand.<property> variables in your templates to render them dynamically. See Tenant Templates for details.Can I create completely different template content per tenant?
Can I create completely different template content per tenant?
tenant_id condition to give a tenant its own subject line, body, layout, or even a different set of channels enabled — anything variable substitution alone can’t cover. At send time, SuprSend picks the variant whose condition matches the trigger’s tenant_id; tenants without a matching variant fall through to the default template.When should I use `$brand.*` variables versus a template variant?
When should I use `$brand.*` variables versus a template variant?
$brand.* variables when the content is the same and only tenant-specific values change (logo, primary color, product name, support email) — one shared template stays maintainable and every new tenant just needs its properties populated. Reach for a template variant when the content itself differs — a different CTA, an extra section, a tenant-specific layout, or a legal footer only one tenant needs. Most workspaces use variables broadly and reserve variants for the handful of tenants that need genuinely different content.What happens if a tenant doesn't have a matching template variant?
What happens if a tenant doesn't have a matching template variant?
Can template variants combine tenant conditions with other conditions like language or plan?
Can template variants combine tenant conditions with other conditions like language or plan?
tenant_id, the user’s $preferred_language, trigger data properties, or any combination. Common pattern: one variant per tenant for content differences, plus multi-lingual translations inside each variant for language differences.Is multi-tenancy available on all plans?
Is multi-tenancy available on all plans?