Customer Emails

Seventeen automated emails keep your customers informed throughout the entire subscription lifecycle — from activation and trials to renewals, payment issues, status changes, retention offers, saved-card expiry, and gateway verification.

Availability: Free (gateway-specific trigger events require Pro gateway integrations)

Overview

ArraySubs sends customer emails automatically when key subscription events occur. Each email is registered with WooCommerce and appears in WooCommerce → Settings → Emails for full customization. All customer emails are enabled by default and support the placeholder system documented in the Email Overview.

This page is a detailed per-email reference. For general email configuration, template overrides, and the full placeholder list, see the Email Overview.

WooCommerce email registry with the ArraySubs customer email sequence
WooCommerce email registry with the ArraySubs customer email sequence


New Subscription

Sent to the customer when a subscription moves from Pending, Trial, or Auto-Draft to Active status.

WooCommerce email ID: arraysubs_new_subscription

Default subject: [{site_title}] Your subscription #{subscription_id} is active

Default heading: Your subscription is now active!

Trigger: Fires on the arraysubs_data_status_changed hook when the new status is Active and the old status is Pending, Trial, or Auto-Draft.

What the Email Contains

  • Personalized greeting using the customer's first name
  • Confirmation that the subscription is active
  • Subscription details table:
    • Product name
    • Price and billing period (e.g., "$29.99 / every month")
    • Start date
    • Next payment date
    • End date (if a fixed-length subscription)
  • Link to view the subscription in the customer portal

When It Is Sent

Scenario Sent?
Customer completes checkout and the subscription activates immediately Yes
Admin manually creates a subscription and sets status to Active Yes
Trial subscription converts to Active Yes
Subscription reactivated after cancellation/on-hold No — the Reactivated email fires instead

Specific Placeholders

Uses the base placeholders only. No additional email-specific placeholders.


Trial Started

Sent when a subscription enters the Trial status.

WooCommerce email ID: arraysubs_trial_started

Default subject: [{site_title}] Your free trial for {product_name} has started

Default heading: Your free trial has started!

Trigger: Fires on the arraysubs_trial_started hook, dispatched by the FreeTrials feature when a trial period begins.

What the Email Contains

  • Personalized greeting
  • Confirmation that the free trial has begun
  • Trial details table:
    • Product name
    • Trial length (e.g., "14 days")
    • Trial end date
    • What happens after the trial (pricing and billing period)
  • Link to the customer portal

Specific Placeholders

Placeholder Description
{trial_end_date} The date when the trial period ends
{trial_length} Human-readable trial duration (e.g., "14 days", "1 month")

Trial Converted

Sent when a trial subscription converts to a paid subscription.

WooCommerce email ID: arraysubs_trial_converted

Default subject: [{site_title}] Your trial for {product_name} has converted to a paid subscription

Default heading: Your trial has been converted to a paid subscription

Trigger: Fires on the arraysubs_trial_converted hook, dispatched by the Recurring Billing system during trial conversion processing.

What the Email Contains

  • Personalized greeting
  • Confirmation that the trial has ended and the paid subscription is now active
  • Subscription details:
    • Product name
    • Subscription price and billing period
    • Next payment date
  • Link to the customer portal

When It Is Sent

Scenario Sent?
Trial period ends and subscription converts to Active Yes
Trial is manually converted to Active by admin via status change No — the New Subscription email may fire instead, depending on the status transition

Specific Placeholders

Placeholder Description
{next_payment_date} The date of the first paid renewal
{subscription_price} The recurring price of the paid subscription

Renewal Reminder

Sent a configurable number of days before the next payment is due. This is the only customer email delivered via the Action Scheduler rather than immediately.

WooCommerce email ID: arraysubs_renewal_reminder

Default subject: [{site_title}] Your subscription #{subscription_id} renews soon

Default heading: Your subscription renews soon

Trigger: The Action Scheduler fires arraysubs_send_renewal_reminder at the scheduled time. The schedule is set when a subscription activates or after each successful renewal.

What the Email Contains

  • Personalized greeting
  • Advance notice that the subscription is about to renew
  • Subscription details:
    • Product name
    • Recurring amount and billing period
    • Next payment date
  • Link to the customer portal

Timing Configuration

Configure the advance notice period in ArraySubs → Settings → General Settings → Email Reminder Schedule:

Setting Default Range
Renewal Reminder (Days Before) 3 1 – 30

For example, if set to 5, the Renewal Reminder email is sent 5 days before the next payment date.

Renewal Reminder email settings with days-before timing
Renewal Reminder email settings with days-before timing

Specific Placeholders

Placeholder Description
{days_before} The number of days until the next payment date

Scheduling Behavior

  • The reminder is scheduled when a subscription first activates or after each successful renewal payment.
  • If the next payment date changes (e.g., due to a skip or date adjustment), the previously scheduled reminder is cancelled and a new one is scheduled.
  • If the subscription is cancelled, paused, or put on hold before the reminder fires, the reminder may still send if the Action Scheduler job has already been dispatched. The email content reflects the subscription's state at the time of sending.

Renewal Invoice

Sent when a renewal invoice (order) is created for an upcoming payment.

WooCommerce email ID: arraysubs_renewal_invoice

Default subject: [{site_title}] Invoice for subscription #{subscription_id}

Default heading: Your renewal order

Trigger: Fires on the arraysubs_renewal_invoice_created hook when the Recurring Billing system generates a renewal order.

What the Email Contains

  • Personalized greeting
  • Notification that a renewal order has been created
  • Order details:
    • Subscription ID
    • Order number
    • Order total
    • Due date
  • Conditional "Pay for this order" link (only when the order still requires payment — i.e., for manual payment subscriptions)
  • Link to the customer portal

When It Is Sent

Renewal invoices are created a configurable number of hours before the due date. This timing is controlled by system constants, not email settings.

Scenario Sent?
Automatic payment subscription — invoice created before due date Yes
Manual payment subscription — invoice created for customer to pay Yes
Admin manually creates a renewal order No — only programmatic renewal invoice creation triggers this email

Specific Placeholders

Placeholder Description
{order_id} The renewal order number
{order_total} The renewal order total (formatted with currency)
{order_pay_url} Direct link for the customer to pay the order

Payment Successful

Sent when a renewal payment is completed successfully.

WooCommerce email ID: arraysubs_payment_successful

Default subject: [{site_title}] Payment received for subscription #{subscription_id}

Default heading: Payment received

Trigger: Fires on the arraysubs_renewal_payment_complete hook when a renewal order is marked as paid.

What the Email Contains

  • Personalized greeting
  • Confirmation that the renewal payment was received
  • Payment details:
    • Subscription ID
    • Order number
    • Order total
    • Payment method used
    • Next payment date
  • Link to the customer portal

Specific Placeholders

Placeholder Description
{order_id} The renewal order number
{order_total} The amount paid
{payment_method} The payment method used (e.g., "Visa ending in 4242")

Payment Failed

Sent when a renewal payment attempt fails.

WooCommerce email ID: arraysubs_payment_failed

Default subject: [{site_title}] Payment failed for subscription #{subscription_id}

Default heading: Payment failed

Trigger: Fires on any of these hooks:

  • arraysubs_payment_failed — general payment failure
  • arraysubs_renewal_payment_failed — renewal-specific payment failure
  • arraysubs_gateway_payment_failed — gateway-triggered failure (with gateway slug)

What the Email Contains

  • Personalized greeting
  • Warning that the payment could not be processed
  • Reason callout explaining why the charge failed — e.g. "Reason: insufficient funds on the card." or "Reason: the bank requires customer authentication (3D Secure)." — only shown when the gateway returned a recognizable error code
  • Subscription details:
    • Subscription status (Active or On Hold)
    • Order number and total
  • Red-highlighted warning about potential service interruption
  • Conditional "Pay Now" button (if a retry/payment URL is available)
  • Link to manage the subscription in the customer portal

The Payment Failed email uses strong urgency styling — a red warning box and a prominent "Pay Now" call-to-action button — to encourage the customer to resolve the issue quickly.

Failure reason categories

The plugin classifies the gateway error code (Stripe decline_code / error.code, equivalents on PayPal and Paddle) into a stable category and renders the customer-friendly description in the callout. Recognized categories:

Category Reason text shown to the customer
insufficient_funds insufficient funds on the card
card_declined the card was declined by the issuer
expired_card the card has expired
incorrect_cvc the card security code (CVC) was incorrect
invalid_card the card details on file are invalid
authentication_required the bank requires customer authentication (3D Secure)
processing_error a temporary processing error occurred at the gateway
generic_decline the card was declined
unknown (no callout shown — only the raw gateway message goes to the subscription notes)

The chosen category is also written to _last_payment_failure_category subscription meta so the same wording can drive future dunning rules. See Payment Recovery Tools for the retry-pipeline interaction.

When It Is Sent

Scenario Sent?
Automatic payment renewal fails at the gateway Yes
Manual payment order expires without payment No
Gateway webhook reports a failed charge Yes

Specific Placeholders

Placeholder Description
{order_id} The failed renewal order number
{order_total} The amount that failed
{order_pay_url} Payment link for the failed order
{retry_url} Direct retry payment link

Subscription On Hold

Sent when a subscription transitions to the On Hold status.

WooCommerce email ID: arraysubs_subscription_on_hold

Default subject: [{site_title}] Your subscription #{subscription_id} is on hold

Default heading: Your subscription is on hold

Trigger: Fires on the arraysubs_data_status_changed hook when the new status is On Hold.

What the Email Contains

  • Personalized greeting
  • Notification that the subscription has been placed on hold
  • Subscription details:
    • Product name
    • Subscription ID
    • Recurring amount and billing period
  • Explanation of what "on hold" means for the customer's access and billing
  • Link to the customer portal

When It Is Sent

Scenario Sent?
Grace period expires and subscription moves from Active to On Hold Yes
Admin manually sets subscription to On Hold Yes
Customer requests hold (via customer portal, if allowed) Yes

Specific Placeholders

Uses the base placeholders only. No additional email-specific placeholders.


Subscription Cancelled

Sent when a subscription transitions to the Cancelled status.

WooCommerce email ID: arraysubs_subscription_cancelled

Default subject: [{site_title}] Your subscription #{subscription_id} has been cancelled

Default heading: Your subscription has been cancelled

Trigger: Fires on the arraysubs_data_status_changed hook when the new status is Cancelled.

What the Email Contains

  • Personalized greeting
  • Confirmation that the subscription has been cancelled
  • Cancellation details:
    • Subscription ID and product name
    • Cancellation date
    • Cancellation reason (if the customer provided one)
  • Information about what happens next (access changes, billing stops)
  • Link to the customer portal (for potential reactivation, if allowed)

When It Is Sent

Scenario Sent?
Customer cancels from the customer portal Yes
Scheduled end-of-period cancellation executes Yes
Admin cancels the subscription Yes
On-hold grace period expires and subscription auto-cancels Yes

Specific Placeholders

Placeholder Description
{cancellation_date} The date the subscription was cancelled
{cancellation_reason} The reason the customer selected during cancellation

Subscription Pending Cancellation

Sent when the customer schedules an end-of-period cancellation. The subscription remains active until the scheduled cancellation date, and the customer can undo the scheduled cancellation from their account while it is still pending.

WooCommerce email ID: arraysubs_subscription_pending_cancellation

Default subject: [{site_title}] Subscription #{subscription_id} scheduled to cancel on {scheduled_cancel_date}

Default heading: Your subscription is scheduled to cancel

Templates:

  • HTML: customer-subscription-pending-cancellation.php
  • Plain: plain/customer-subscription-pending-cancellation.php

Specific Placeholders

Placeholder Description
{scheduled_cancel_date} Date the subscription will cancel, or "end of billing period"
{cancellation_reason} Customer-selected reason, or "Not specified"

Subscription Expired

Sent when a subscription transitions to the Expired status.

WooCommerce email ID: arraysubs_subscription_expired

Default subject: [{site_title}] Your subscription #{subscription_id} has expired

Default heading: Your subscription has expired

Trigger: Fires on the arraysubs_data_status_changed hook when the new status is Expired.

What the Email Contains

  • Personalized greeting
  • Notification that the subscription has reached its end date and expired
  • Expiration details:
    • Subscription ID and product name
    • Expiration date
  • Information about access changes
  • Link to the customer portal

When It Is Sent

Scenario Sent?
Fixed-length subscription reaches its end date Yes
Admin manually sets subscription to Expired Yes

Specific Placeholders

Placeholder Description
{expiration_date} The date the subscription expired

Subscription Expiring Soon

Sent before a fixed-length subscription reaches its end date. It uses the same reminder template family as Renewal Reminder, but the date context is the subscription end date rather than the next payment date.

WooCommerce email ID: arraysubs_expiring_soon

Default subject: [{site_title}] Your subscription #{subscription_id} is ending soon

Default heading: Your subscription is ending soon

Templates:

  • HTML: customer-renewal-reminder.php
  • Plain: plain/customer-renewal-reminder.php

Specific Placeholders

Placeholder Description
{days_before} Number of days before the end date
{subscription_end_date} The subscription end date

Subscription Reactivated

Sent when a subscription is reactivated after being cancelled, on hold, or expired.

WooCommerce email ID: arraysubs_subscription_reactivated

Default subject: [{site_title}] Your subscription for {product_name} has been reactivated

Default heading: Your subscription has been reactivated!

Trigger: Fires on the arraysubs_data_reactivated hook, dispatched by the Subscriptions feature when the reactivateSubscription() method completes.

What the Email Contains

  • Personalized greeting
  • Confirmation that the subscription is active again
  • Subscription details:
    • Product name
    • Next payment date
    • Recurring amount and billing period
  • Link to the customer portal

When It Is Sent

Scenario Sent?
Customer reactivates from the customer portal Yes
Admin reactivates the subscription Yes
Customer pays a pending renewal and the subscription is restored Yes

Specific Placeholders

Placeholder Description
{next_payment_date} The next scheduled payment date after reactivation

The Reactivated email always fires regardless of the email settings toggles — it does not have a separate enable/disable setting in the settings helper defaults. It can still be toggled off in the WooCommerce email settings page.


Auto-Downgrade

Sent when a subscription is automatically switched to a lower-tier plan.

WooCommerce email ID: arraysubs_auto_downgrade

Default subject: [{site_title}] Your subscription #{subscription_id} has been changed to {new_product_name}

Default heading: Your subscription plan has changed

Trigger: Fires on the arraysubs_auto_downgrade_completed hook, dispatched by the Plan Switching feature when the auto-downgrade handler completes execution.

What the Email Contains

  • Personalized greeting
  • Notification that the plan has been automatically changed
  • Plan change details:
    • Old product/plan name
    • New product/plan name
    • Updated pricing and billing period
  • Explanation of why the change occurred
  • Link to the customer portal

When It Is Sent

Scenario Sent?
Subscription expires and auto-downgrade target is configured Yes
Subscription cancelled and auto-downgrade on cancel is configured Yes
Trial expires and auto-downgrade on trial expire is configured Yes
Customer manually switches plans No — this is only for automatic downgrades

Specific Placeholders

Placeholder Description
{old_product_name} The name of the previous plan
{new_product_name} The name of the new (downgraded) plan

Retention Discount Accepted

Sent when a customer accepts a retention discount offer during the cancellation flow.

WooCommerce email ID: arraysubs_retention_discount_accepted

Default subject: [{site_title}] Your retention discount for {product_name} is active

Default heading: Your subscription discount is now active

Trigger: Fires on the arraysubs_retention_offer_accepted hook when the Cancellation Flow feature processes an accepted discount offer.

What the Email Contains

  • Personalized greeting
  • Confirmation that the discount is now applied
  • Discount details:
    • Discount percentage
    • Number of renewal cycles the discount applies
    • Original recurring amount
    • New discounted amount
    • Savings per renewal cycle
  • Link to the customer portal

When It Is Sent

Scenario Sent?
Customer accepts a discount offer in the cancellation modal Yes
Admin applies a discount manually No — only the retention flow triggers this email
Customer accepts a pause, downgrade, or contact-support offer No — this email is specific to discount offers

Specific Placeholders

Placeholder Description
{discount_value} The discount percentage (e.g., "20%")
{discount_duration} Number of renewal cycles the discount lasts
{base_recurring_amount} Original price before the discount
{discounted_recurring_amount} New price after the discount
{savings_per_renewal} Amount saved per renewal cycle

Card Expiring Notice

Sent when the Stripe gateway reports that the saved payment card for a subscription is expiring soon.

WooCommerce email ID: arraysubs_card_expiring

Default subject: [{site_title}] Update the card for subscription #{subscription_id}

Default heading: Your card is expiring soon

Trigger: Fires on the arraysubs_card_expiring hook. The core email class is registered with WooCommerce, and the event is dispatched by the Pro Stripe gateway integration when Stripe reports an expiring saved card.

Notifies customers that their saved card is about to expire, encouraging them to update their payment method before the next renewal attempt.

Template files:

  • HTML: customer-card-expiring.php
  • Plain: plain/customer-card-expiring.php

Key fields shown: card last four digits, card expiry date, and a payment-method update link.


Renewal Requires Verification

Sent when an automatic renewal needs customer authentication such as Strong Customer Authentication (SCA / 3D Secure).

Renewal Requires Verification email settings with SCA placeholders
Renewal Requires Verification email settings with SCA placeholders

WooCommerce email ID: arraysubs_renewal_requires_verification

Default subject: [{site_title}] Verify your subscription renewal #{subscription_id}

Default heading: Your renewal needs verification

Trigger: Fires on the arraysubs_renewal_requires_verification hook. The core email class is registered with WooCommerce, and the event is dispatched by the Pro Stripe gateway integration when a renewal payment intent requires customer action.

Notifies customers with a link to complete the verification step before the renewal grace period ends.

Template files:

  • HTML: customer-renewal-requires-verification.php
  • Plain: plain/customer-renewal-requires-verification.php

Key fields shown: subscription ID, renewal order ID, payment method summary, grace-period date, and verification link.


Real-Life Use Cases

Use Case 1: Reducing Involuntary Churn

A customer's credit card fails during an automatic renewal. ArraySubs sends the Payment Failed email with a red warning, the amount owed, and a prominent Pay Now button. The customer clicks the link, completes the payment, and the subscription stays active. At the same time, the Admin Payment Failed email alerts the store owner to monitor the situation.

Use Case 2: Smooth Trial-to-Paid Transition

A customer signs up for a 14-day free trial. They receive the Trial Started email confirming the trial length and end date. Three days before the trial ends, the Renewal Reminder prompts them that a charge is upcoming. When the trial converts, the Trial Converted email confirms the paid subscription with updated pricing and the next payment date.

Use Case 3: Retention Offer Communication

A customer clicks "Cancel Subscription" in their account. The retention flow offers a 20% discount for 3 months. The customer accepts, and the Retention Discount Accepted email confirms the new discounted amount, savings per cycle, and how many cycles the discount covers — reinforcing the decision to stay.

Use Case 4: Subscription Lifecycle Visibility

A fixed-length 12-month subscription nearing expiration sends the Subscription Expired email when the end date passes. If the product has an auto-downgrade target configured, the Auto-Downgrade email follows, explaining the plan change and the new pricing.


Troubleshooting

Problem Likely Cause What to Do
Customer did not receive the New Subscription email Email is disabled, or the subscription did not fully transition to Active status Check the email toggle in WooCommerce settings and verify the subscription status in the admin
Renewal Reminder sent at the wrong time The days-before setting does not match expectations, or the next payment date changed after scheduling Check ArraySubs → Settings → General Settings → Email Reminder Schedule and verify the subscription's next payment date
Payment Failed email not sent The failure hook did not fire (e.g., the payment method was not attempted) Verify the gateway processed the payment attempt. Check Action Scheduler for pending or failed jobs.
Customer received both New Subscription and Reactivated emails The subscription was reactivated from a non-standard state This is uncommon. The system checks the previous status to prevent overlap, but edge cases in manual admin actions can trigger both.
Auto-Downgrade email shows wrong product The auto-downgrade target product was changed after the downgrade was scheduled Verify the Linked Products tab on the original product. The email reflects the product at the time of downgrade execution.

  • Email Overview — How ArraySubs emails work, placeholder reference, and template overrides.
  • Admin Emails — Admin notification emails for new subscriptions, payment failures, and cancellations.
  • Store Credit Emails — Store Credit notification emails Pro.
  • Lifecycle Management — Subscription status transitions that trigger these emails.
  • Billing and Renewals — Renewal and grace period settings that affect billing emails.

FAQ

Are all customer emails enabled by default?

Yes. Every customer email ships enabled. You can disable any individual email in WooCommerce → Settings → Emails.

Can I change the "From" name and email for subscription emails?

Yes — but it is a WooCommerce-wide setting, not per-email. Go to WooCommerce → Settings → Emails and update the "From" name and "From" address at the top of the page. This applies to all WooCommerce and ArraySubs emails.

Does the Renewal Reminder reschedule automatically after a renewal?

Yes. After each successful renewal payment, the system cancels the old reminder and schedules a new one based on the updated next payment date.

What email does a customer get when their trial converts?

The Trial Converted email. The New Subscription email is not sent for trial-to-active conversions because the Trial Converted email covers that transition specifically.

Can I preview an email before it is sent?

Not directly from the ArraySubs settings. However, WooCommerce email settings pages include a preview link that shows the HTML template with placeholder data.

Are Card Expiring and SCA Authentication emails available now?

Yes. Both email classes are registered in WooCommerce. They are sent when the Pro Stripe gateway dispatches the corresponding card-expiry or renewal-verification event.