Concepts
Tenant (workspace / practice)
A practice is one isolated sending tenant. It has its own:
- Sending domain and DKIM tokens
- Projects and routes
- Suppressions and consent ledger
- Webhooks, inbound mailbox, and API tokens
- Monthly plan cap and reputation counters
One tenant’s bounce or complaint rate never applies to another.
Projects
Projects group routes and tokens inside a tenant. A default project is seeded on create. Use extra projects to separate brands, clinics, or environments.
Project-scoped API tokens (wm_proj_…) can send only for that project. Team tokens (wm_team_…) can manage the workspace.
Routes
Each tenant gets two built-in routes:
| Slug | Type | Use |
|---|---|---|
outgoing |
transactional | Appointments, invoices, password resets, DOI mail |
broadcast |
marketing | Newsletters and campaigns |
You can add more routes (POST /api/practices/{id}/routes) and assign them to a project. {routeID} in APIs accepts a UUID or the slug (outgoing, broadcast).
Route settings:
track_opens/track_clicks— default off for clinical/transactional kindsplain_text_fallback— generate a text part from HTML when you omittext
Message kinds
message_kind drives consent checks, default tracking, and legal-footer rules:
| Kind | Typical route | Default tracking | Legal basis hint |
|---|---|---|---|
termin |
outgoing |
off | contract |
recall |
outgoing |
off | contract |
transactional |
outgoing |
off | contract |
doi |
outgoing |
off | consent |
newsletter |
broadcast |
on | consent |
custom |
broadcast |
on | consent |
quality / test |
outgoing |
off | contract |
ValidateRouteMessageKind rejects newsletter on transactional routes and appointment kinds on broadcast.
Campaigns, journeys, and the template library live under Campaigns, Journeys, and Practice mail.
Consent and channels
Preferences are stored per channel (termin, recall, newsletter, transactional, other). Newsletter requires double opt-in evidence (IP, wording, timestamps) before broadcast.
Every outbound message — including transactional — receives a one-click unsubscribe URL when PUBLIC_BASE_URL is a stable HTTPS origin. Recipients can opt out of all mail from that sender if a tenant misuses transactional mail for marketing.
Suppressions
Addresses can be blocked at team (whole tenant), project, or route scope. Hard bounces and complaints auto-suppress at team scope. List-unsubscribe events suppress at route scope when the message had a route.
Plans
| Plan | Cap | Price | At 100% |
|---|---|---|---|
| Starter | 10,000 / month | 19 EUR | All sending pauses |
| Growth | 50,000 / month | 49 EUR | All sending pauses |
| Pro | 250,000 / month | 99 EUR | Marketing pauses; transactional continues |
| Agency | 750,000 / month | 299 EUR | Marketing pauses; transactional continues |
| Compliance | 1,000,000 / month | 499 EUR | Marketing pauses; transactional continues |
| Enterprise | per agreement | on request | Marketing pauses; transactional continues |
Prices are net per month. Every workspace starts in a sandbox until a person approves production access. Contact sales to discuss access.
At 70% / 90% / 100% of the monthly cap, owners get one email per threshold per UTC month. On Pro and above, broadcast pauses at 100%; transactional kinds can still send. Reputation pause is separate.