Skip to main content

Email Types Reference

Every email Benecaster sends carries a type string — a stable identifier used to target that one email through the filter and action families below. This page is the developer-facing index of those strings. For what each email says and when a podcaster would turn it off, see Automated Emails.

Type strings are stable public API. They will not change between minor versions.


Benecaster Types

Sent from the podcaster’s WordPress site via EmailQueue.

Type string Sent when
welcome A subscriber’s feed token is generated for the first time
token_reset A feed token is reset, by admin or by the subscriber
feed_link A podcaster uses Email feed link on a subscriber to re-send the feed URL they already have. Nothing is reset, so the subscriber’s podcast app keeps working — the whole difference from token_reset
tier_change A subscriber’s tier is updated — upgrade, downgrade, or admin change. For a built-in membership upgrade from the account page, it is sent when the payment succeeds, and it is the only email for that move
donation_thank_you A Listener Support donation is logged and a donor email address is available
subscription_receipt A built-in membership payment is confirmed by Stripe — initial activation and every renewal
renewal_reminder A configurable number of days before a built-in membership subscriber’s renewal
payment_failed The first time Stripe fails to charge a built-in membership renewal
cancellation_confirmation A built-in membership subscriber requests cancellation through their account page
price_change_notice A podcaster changes a built-in membership price and moves existing subscribers to it after a notice period. States the old and new price and the date of the first renewal at the new price. Always sent — it is the notice itself
price_change_reminder Optional, a chosen number of days before the first charge at a new price (after the notice, before the charge). Can be switched off per show
price_change_cancelled A podcaster cancels a price change before it takes effect, to every subscriber who was told about it
cadence_switch_scheduled A built-in membership subscriber schedules a self-service switch to another billing period of their tier (e.g. monthly to annual) from their account page
tier_switch_scheduled A built-in membership subscriber schedules a move down, or to a tier at the same price, from their account page. tier_change is sent separately when the move lands. Never sent for an upgrade, which is charged and lands at once
free_tier_switch_scheduled A built-in membership subscriber chooses the show’s free plan from their account page. Confirms the date their paid plan ends, that they will not be charged again, and that they stay a member with the same feed address. tier_change is sent when the move lands; subscription_cancelled is not
tax_address_needed Stripe Tax can no longer work out the tax for a built-in membership subscriber’s billing address, so their renewals are charged without tax. Sent once when it happens. Links to the account page’s Billing address form. Always sent; no per-show switch
tax_threshold_nudge A show’s built-in membership sales pass US$1,000, or about the same in other currencies, in the calendar year, after tax and refunds. Sent to the site admin email address, not a subscriber, at most once a year per show, and not while Stripe Tax is active in the show’s Stripe account
subscription_cancelled Any bridge’s membership reaches a terminal ended state — not built-in membership only. Sent for a deliberate cancellation and, since 2026-09-18, for a lapse (a fixed term ran out, renewals gave up) too; the email wording says “cancelled” either way
manual_grant_expired An admin-comped access grant expires
promote_grace_reminder About 7 days before a promote-to-bridge grace period expires
promote_grace_expired A promote-to-bridge grace period elapses without re-authorization
guest_password_set A WordPress account is created for someone rather than by them — bulk enrollment, a subscriber added by hand, or a completed donation. Not sent for [benecaster_subscribe] signups, where the subscriber chooses a password on the form
already_following Someone submits the follower signup form with an address that already follows
follower_confirm Someone signs up to follow a show that asks followers to confirm their address. Carries the link that confirms the signup and delivers their feed URL
email_verification A subscriber changes their email address on the account page. Goes to the NEW address with a single-use link that promotes it; the account keeps the old address until the link is clicked, so a typo can’t lock anyone out
donor_data_erasure A Listener Support donor asks, by email address, for their donation details to be removed. Carries a single-use link that confirms the request. Donors usually have no account, so it goes to the address they typed
broadcast A podcaster sends a one-off message to chosen listeners of one show (paying subscribers, followers, everyone, or particular tiers), from Benecaster → Broadcasts or through benecaster_send_broadcast(). Marketing: either opt-out level stops it, and it carries a List-Unsubscribe header. Every send supplies its own subject and body; the registered subject News from {{show_title}} and the broadcast.php template are only what a preview shows with no message

Every type carries a default subject and template. On benecaster_managed_email_types, each Benecaster type has default_subject (with its {{tags}} unfilled, such as Your {{show_title}} receipt — {{amount_formatted}}) and default_template_path. They are what the type sends with when nothing overrides them, and what an email editor starts from.

The email log records a send as queued, sent, failed, suppressed (stopped by an opt-out), or test (a test send, which has no queue row).

benecaster_token_revoked is an action hook, not an email type. It fires whenever a token is revoked (see benecaster_token_revoked), but there is no corresponding token_revoked email — it is not registered in EmailTypeRegistry and does not appear in the table above.

Add-on Types

Not registered, and not present in email settings, unless the add-on is active.

Type string Add-on
episode_notification Email Editor
analytics_digest_daily Analytics Dashboard
analytics_digest_weekly Analytics Dashboard
analytics_digest_monthly Analytics Dashboard

Add-ons may register further types through benecaster_managed_email_types. Those follow the same snake_case convention and are documented by the add-on that owns them.

Not Plugin Types

License server emails are dispatched from benecaster.com, not through the plugin’s EmailQueue. They fire none of the hooks below, never appear in the queue, and cannot be filtered or templated. If a filter you expect to fire never does, check whether the email actually originates on the site.


Filter Families

Every filter below has a shared form and a type-specific variant. The pattern is {filter}_{$email_type} — so benecaster_email_subject_welcome targets only the welcome email.

Shared filter Type-specific variant Filters
benecaster_email_should_send benecaster_email_should_send_{type} Whether the email dispatches at all
benecaster_email_subject benecaster_email_subject_{type} Subject line
benecaster_email_body_html benecaster_email_body_html_{type} HTML body
benecaster_email_body_text benecaster_email_body_text_{type} Plain-text body
benecaster_email_from_name benecaster_email_from_name_{type} Sender name
benecaster_email_from_address benecaster_email_from_address_{type} Sender address
benecaster_email_merge_tags benecaster_email_merge_tags_{type} Resolved merge tag map

Type-specific variants take one fewer parameter — $email_type is omitted, since it’s encoded in the hook name. Everything else, including return type, is unchanged.

Use the type-specific variant when your callback targets one template. Use the shared filter when one callback handles several types differently.

Actions

Shared action Type-specific variant Fires
benecaster_before_email_send benecaster_before_email_send_{type} Immediately before dispatch
benecaster_after_email_send benecaster_after_email_send_{type} Immediately after dispatch

Suppression and Transactional Status

benecaster_email_should_send will suppress any type, but that does not make suppressing any type advisable.

Transactional emails should never be suppressed by your own code. welcome and token_reset are the delivery mechanism for feed URLs — suppress them and subscribers simply never receive access, with nothing surfaced to explain why. Billing emails carry the same weight for compliance reasons: price_change_notice, price_change_reminder, price_change_cancelled, and cadence_switch_scheduled each state what the subscriber is about to be, or was just, charged.

A subscriber’s own unsubscribe choice is a separate mechanism from this filter, and it has three tiers:

Type Stopped by a broadcast opt-out Stopped by a full opt-out
broadcast and other non-transactional types Yes Yes
episode_notification (Email Editor add-on) — answers to its own new-episode opt-out (episode_notifications), which stops nothing else No Yes
Transactional types (listed in UnsubscribeManager::TRANSACTIONAL_TYPES, filterable via benecaster_transactional_email_types) No Yes
Types registered with 'unsubscribable' => false No No

broadcast is the only genuinely marketing-class type in the list. follower_confirm is neither transactional nor exempt, so a subscriber who opted out of broadcasts on that show does not get it. A broadcast opt-out is a marketing preference, so a subscriber who opted out of broadcasts still receives their feed URL and their billing emails; only a full opt-out stops those.

guest_password_set, already_following, email_verification, feed_link and donor_data_erasure are registered with unsubscribable: false, and are delivered through both opt-out levels. Each is a one-shot reply to something the person or their podcaster just did: the password for an account created for them, the response to a signup form they submitted, the link that completes an address change they asked for, the feed URL a podcaster re-sent them with Email link, and the link that confirms a donor’s request to have their details removed. They also carry no List-Unsubscribe header, since a one-click button would record a preference that is then ignored for that type.

The flag is read from the benecaster_managed_email_types catalogue, so an add-on can give its own type the same protection by registering it with 'unsubscribable' => false. Absent means suppressible: the exemption has to be declared. It is a much stronger claim than being transactional, so reserve it for mail a person cannot do without. benecaster_email_should_send still runs for these types like any other — the exemption covers the subscriber’s opt-out, not your own code.

If your goal is to route an email through your own service rather than stop it, suppress with this filter and send it yourself in the same callback — don’t suppress and assume something else will deliver it.


Merge Tags

Available tags vary by type. See Email Merge Tags for the full catalog, including the global set available to every type and how to register your own.

See Also

Need this built rather than just documented? See our services →