Billing lifecycle emails.

Concept set — not yet in code. The 13 templates the billing lifecycle still needs, on the exact production v3.5 shell (email/platform/). Sample data uses real tier pricing (Pro $15/mo, Team $15/seat, 3-seat floor). Covers the self-serve dunning → pause → pay-up → reactivate arc, invoices/receipts/statements with refunds, credits, discounts and Stripe Tax lines, seat true-ups, and the nonprofit program. Once approved these move into relay-platform/src/relay/email_templates.py and get re-rendered into the platform gallery.

Trigger map — status → email

TriggerEmailStatus
invoice.upcoming (T-3)invoice-upcoming — renewal preview w/ line itemsconcept
invoice.paidpayment-receipt — itemized receipt (discounts, credits, tax)concept
invoice.payment_failed №1payment-failed — first noticeshipped
invoice.payment_failed №2+payment-retry — retry count + Pay nowconcept
last retry exhausted (T-1)payment-final-notice — pause warningconcept
stripe_status → unpaidaccount-paused — free-contract fallback + reactivateconcept
invoice.paid while unpaid/past_duepayment-recovered — plan restoredconcept
charge.refundedrefund-issued — amount, card, timelineconcept
credit / commitment appliedcredit-applied — source + burn-downconcept
monthly close (1st)statement-ready — charges, refunds, credits, taxconcept
seat true-up (post-402 confirm)seat-trueup — proration + new totalconcept
subscription.deletedsubscription-canceled — teardown + 180d win-backconcept
trial T-7 / T-1trial-endingshipped
trial lapsedtrial-expiredshipped
trial → paidconverted-paidshipped
plan change up / downplan-changed / plan-downgradedshipped
EAP grace endingeap-grace-endingshipped
nonprofit application submittednonprofit-received — review timeline + verificationconcept
nonprofit application approvednonprofit-approved — standing discount attachedconcept

Dunning & recovery · 4 concepts

payment_retry_email

⚠️ Relay — we still couldn't process your payment
invoice.payment_failed · attempt 2+
concept

payment_final_notice_email

⚠️ Relay — final notice: paid features pause tomorrow
retries exhausted · T-1 before pause
concept

account_paused_email

⏸️ Relay — your paid features are paused
stripe_status → unpaid · free-contract fallback
concept

payment_recovered_email

✅ Relay — payment received, you're back
invoice.paid while past_due/unpaid
concept

Invoices, receipts & statements · 5 concepts

invoice_upcoming_email

🧾 Relay — your renewal is coming up
invoice.upcoming · T-3 before renewal
concept

payment_receipt_email

✅ Relay — receipt for your payment
invoice.paid · line items incl. tax
concept

statement_ready_email

🧾 Relay — your July statement is ready
monthly close · PDF + CSV
concept

refund_issued_email

✅ Relay — your refund is on the way
charge.refunded
concept

credit_applied_email

✅ Relay — a credit was applied to your account
balance credit / commitment redemption
concept

Plan & seats · 2 concepts

seat_trueup_email

🤝 Relay — your team grew, seats updated
member joined > seats · post-402 confirm
concept

subscription_canceled_email

👋 Relay — your subscription has ended
subscription.deleted · 180d win-back note
concept

Nonprofit program · 2 concepts

nonprofit_received_email

👋 Relay — we received your nonprofit application
application submitted · manual review
concept

nonprofit_approved_email

✅ Relay — your nonprofit discount is approved
admin approval · standing 50% Team discount
concept