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.paidPayment confirmation with invoice details, amount and receipt link.
invoice.payment_failedPersonalised dunning email with update payment CTA and attempt context.
refund.issuedRefund confirmation with amount, timeline and support contact.
subscription.plan_upgradedUpgrade confirmation with new features and next billing amount.
subscription.cancelledCancellation confirmation with access end date and win-back option.
Stop building billing email infrastructure. Centralise every billing email in else.events.