Billing email code is spread across payment webhook handlers
Failed payment handler sends one email. Subscription upgrade handler sends another. Refund handler sends a third. No central view.
Invoices, receipts, payment failures, refunds, plan upgrades and cancellations — each billing event triggers the right email through else.events, without custom billing email infrastructure.
Failed payment handler sends one email. Subscription upgrade handler sends another. Refund handler sends a third. No central view.
The invoice email template lives in a string constant next to the webhook handler. Changing it means a code change and a deploy.
A customer says they never received the refund confirmation. There is no easy way to check what was sent and when.
EUR vs USD formatting, German vs English copy — each variation adds conditional logic to your billing email code.
invoice.paid, invoice.payment_failed, subscription.cancelled, refund.issued — each routes to the right template.
View, edit and version all billing email templates in the else.events UI — not scattered across your codebase.
See every billing email sent, the template version used and the delivery status — searchable by user or event type.
Include locale and currency in the billing event. Templates format amounts and text correctly per locale.
invoice.paid Payment confirmation with invoice details, amount and receipt link.
invoice.payment_failed Personalised dunning email with update payment CTA and attempt context.
refund.issued Refund confirmation with amount, timeline and support contact.
subscription.plan_upgraded Upgrade confirmation with new features and next billing amount.
subscription.cancelled Cancellation confirmation with access end date and win-back option.
Stop building billing email infrastructure. Centralise every billing email in else.events.