Subscription lifecycle emails — one event per state change, one email per moment

Subscription created, plan upgraded, cancellation confirmed, renewal upcoming — each lifecycle state fires a domain event. else.events delivers the right email at the right moment.

Why subscription lifecycle emails are hard to get right

Many lifecycle states, many templates

Created, activated, upgraded, downgraded, paused, cancelled, win-back — each needs distinct copy, tone and CTA.

Upgrade and downgrade emails need plan context

The upgrade email must reflect the new plan features. The downgrade email must explain what was lost.

Cancellation flow is emotionally sensitive

A cancellation confirmation should acknowledge the decision without being aggressive. Getting the tone wrong damages brand trust.

Renewal emails must be timed by your backend

Upcoming renewal reminders fire N days before the renewal date — your backend controls timing, else.events handles the email.

Each lifecycle state fires one event — else.events routes the right email

Distinct event type per lifecycle state

subscription.created, subscription.upgraded, subscription.cancelled — each routes to a template with appropriate copy.

Plan details in the payload

Include previous_plan, new_plan and features context. The template renders the right context for upgrades and downgrades.

Cancellation tone managed in the template, not the code

Update the cancellation email copy without a deploy. Iterate on tone independently of your release cycle.

Renewal reminders fired by your backend, delivered by else.events

Your cron job fires subscription.renewal_upcoming N days before renewal. else.events sends the reminder.

Subscription lifecycle events and their emails

subscription.created

Subscription created

Welcome to the plan — what is included, billing date, how to manage the subscription.

subscription.plan_upgraded

Plan upgraded

Confirmation of upgrade, new features now available, next billing amount.

subscription.plan_downgraded

Plan downgraded

Confirmation of downgrade, features no longer available, when the change takes effect.

subscription.cancelled

Subscription cancelled

Confirmation of cancellation, when access ends, win-back offer if applicable.

subscription.renewal_upcoming

Renewal upcoming

Reminder before the renewal date with plan details and billing amount.

Frequently asked questions

How do I show what features were gained on upgrade?
Include a features_gained array in the event payload. The template iterates over it to list the new features in the upgrade confirmation email.
Can the cancellation email include a win-back offer?
Yes. Include a win_back_offer flag or discount_code in the payload. The template can conditionally render the offer section.
How do I time the renewal reminder correctly?
Your backend fires subscription.renewal_upcoming when the renewal date is within your chosen threshold (e.g. 7 days). else.events sends the reminder email for each event it receives.
Can I test different cancellation email tones without a deployment?
Yes. Update the template copy in the else.events UI. You can iterate on tone and messaging independently of your release cycle.

Subscription lifecycle emails — every state, every moment

Each subscription lifecycle change fires the right email automatically.

  • Free during public beta
  • Distinct template per lifecycle state
  • Plan context rendered from payload