Skip to main content

Email Templates

[admin] [email-templates] [i18n] [einstellungen]

licensio sends automatic emails to customers on behalf of the provider: activation, welcome, cancellation, and more. Each of these text building blocks is a template that you can customize. Without customization, the multilingual default applies (German or English, depending on the provider language).

Who it's for​

Provider admins who want to control the tone of their customer communication.

Where do I find the templates?​

Settings → Email Templates (path: /settings/emails)

In the editor you select the template slot at the top, edit the subject and body, and can pull available variables from a list on the right.

The 10 template slots​

Each slot is triggered by a clearly defined event:

  • activation : the customer was manually activated by the provider. Sent from the "Activate" admin action.
  • welcome : self-service registration via the widget or /join. Confirms account creation, points out the required activation.
  • payment_reminder : a recurring payment failed. Prompt to check the payment method (contains {{portal_link}}).
  • payment_request : an invoice has been issued for the customer's access ("Invoice issued"). Asks them to pay within 14 days via a secure link (card or SEPA direct debit); access is activated automatically once paid. Contains {{payment_link}}.
  • cancellation : the customer has cancelled. Confirms the cancellation date.
  • cancellation_withdraw : the cancellation was withdrawn before it took effect.
  • rejection : the provider rejects a registration.
  • email_change_old : the customer changes the login email. Notifies the old address as a security note.
  • email_change_new : the customer changes the login email. Sends a setup link to the new address.
  • interval_change : the billing interval was changed (e.g. monthly to yearly).

Available variables​

Variables are written in the template as {{variable_name}} and replaced on send. Today's variable names are historically partly mixed-language (kunde_firma, kundennummer). A refactor migration to neutral English names (customer_name, customer_number) is in the backlog.

Available in all slots:

  • {{tenant_name}} : name of your company
  • {{kunde_firma}} : company name (or last name) of the customer
  • {{kundennummer}} : automatically generated customer number (e.g. PT-2026-0042)
  • {{support_email}} : support address of your provider

Slot-specific:

  • {{cancellation_date}} : only in cancellation
  • {{portal_link}} : only in payment_reminder
  • {{payment_link}} : only in payment_request (secure hosted-invoice link, 14-day window)
  • {{old_email}} / {{new_email}} : only in email_change_old
  • {{reset_url}} : only in email_change_new
  • {{new_interval}} : only in interval_change

Multilingual support​

The defaults exist in German (de) and English (en). Which language a customer mail goes out in is resolved by resolveCustomerLanguage: the customer's own portal language (customers.preferred_language) wins; without a stored choice it falls back to the provider's portal language (tenants.settings.default_locale, configurable under Advanced Settings → Language & Region). If that is not set either, the choice is country-aware: a provider in DE/AT gets German, any other country gets English. So Plant Technology (country DE, no explicit default_locale) stays German, while a non-DE provider defaults to English.

If you store your own template, your text is used in every language. The templates are currently not maintainable per language: multi-locale templates arrive with Phase 5 (Multi-Locale Foundation for FR/ES/IT).

Override rules​

  • Custom template completely missing: the default language from default_locale applies.
  • Custom subject set, body empty: the default body is used, your subject wins (or vice versa). Both fields are merged independently.
  • Variables are replaced after the merge, so you can leave a default body and customize only your subject without having to check variable consistency.

Test send​

The editor has a "Send test" button that sends the currently edited template to your login address, with placeholder values for all variables.

When do changes take effect?​

Immediately. The next email that goes out for the respective slot after saving uses your template. Already sent emails are not affected.

Which send routes use the templates​

Transactional customer mails are rendered from this template system (instead of hardcoded HTML bodies), among them:

  • Admin: customer activation (activate) and the B2B invoice mail (payment_request, incl. resend-payment-link), provider cancellation (cancel), email change (old + new = 2 sends), registration rejection (reject), the welcome/invite mail.
  • Portal: self-service cancellation (cancel-subscription), cancellation withdrawal (cancel-subscription/withdraw), interval change (change-interval).

A few routes (notably the Stripe webhook mails) still use the older pattern and are migrated in a separate sprint.

Keeping variables clean​

If you remove variables (e.g. delete {{kundennummer}} from the welcome template), the variable is simply not replaced: the email then contains an empty spot, not an error. If you insert a variable that is not defined for that slot (e.g. {{cancellation_date}} in the welcome slot), it is also replaced with an empty value.