Placeholders in Emails

Placeholders for subscription emails, email sequences, and custom HTML templates.

Placeholders work in custom subscription emails (Project → Emails), price-specific templates, and email sequences. At send time web2wave replaces each {placeholder} with the recipient’s data.

Unknown placeholders are removed from the final email (subject and body).


Project & layout

PlaceholderDescription
{logo}Project logo as a ready-made <img> HTML block (linked to your domain)
{project.title}Project name
{project.domain}Project domain (without https://)
{project.favicon}Full URL to the project favicon / logo image
{project.logo_url}Alias for {project.favicon}
{project.support_email}Support email from project settings
{project.legal_address}Legal address from project settings
{project.hero_image_url}Hero banner URL in email sequences (AI-generated per email when enabled; empty in manually edited templates unless set in HTML at generation time)
{download_link}App / web download link for the recipient (user_id appended when configured)
{unsubscribe_url}Plain unsubscribe URL
{unsubscribe_link}Unsubscribe URL wrapped in an <a> tag

User

Available for any identified recipient (lead or subscriber).

PlaceholderDescription
USER_IDRecipient’s web2wave user ID (UUID). Used in links; avoid putting the raw UUID in subject lines
USER.USER_IDSame as USER_ID
USER.EMAILRecipient email address
USER_EMAILAlias for USER.EMAIL
USER.PLAN_IDStable 6-digit numeric plan ID derived from user_id. Available before purchase in email sequences — use in subjects like Your plan #USER.PLAN_ID is ready or Plan #USER.PLAN_ID expires soon

User properties (dynamic)

Any property stored on the user (quiz answers, UTM tags, funnel data) is available as:

  • {user.<property_name>} — e.g. USER.FIRST_NAME, USER.UTM_CAMPAIGN
  • {<property_name>} — legacy short form, e.g. {email}, {last_quiz_path}, {last_screen_id}

Common examples: USER.EMAIL, {utm_source}, {last_quiz_path}, {last_screen_id}.


Email sequences — CTA & tracking

Used mainly in AI-generated sequence templates:

PlaceholderDescription
{cta_link}Primary button URL for an AI-generated sequence step (paywall, quiz, custom URL, or app download). Replaced with the real URL when the draft is saved — use href="{cta_link}" in generated HTML. In manually edited templates, use a full URL or {download_link} instead

When Add UTM tags to links is enabled on a sequence step, web2wave also appends utm_source, utm_campaign, and user_id to first-party links automatically.


Subscription fields

Populated when the recipient has an active (or past) subscription on the project. Empty placeholders are stripped on send.

FieldDescription
{subscription.id}Unique subscription identifier
{subscription.user_id}ID of the user who owns the subscription
{subscription.user_email}User’s email address
{subscription.created_at}Date and time when the subscription was created
{subscription.updated_at}Date and time of the last update to the subscription record
{subscription.payment_system}ID of the payment system (0 = Stripe, 1 = Paddle, 3 = PayPal, 4 = Primer, 6 = Solidgate)
{subscription.payment_system_label}Name of the payment system (Stripe, PayPal, Paddle, etc.)
{subscription.real_payment}Indicates if a real payment has been made
{subscription.pay_system_id}Subscription or customer identifier in the payment system
{subscription.project_domain}Domain of the project where the subscription was created
{subscription.quiz_id}ID of the quiz
{subscription.quiz_name}Name of the quiz
{subscription.paywall_id}ID of the paywall
{subscription.paywall_name}Name of the paywall
{subscription.price_id}Price / plan external ID
{subscription.plan_name}Human-readable plan name
{subscription.price_label}Price option label shown on the paywall
{subscription.price_description}Price description text
{subscription.amount}Subscription amount (as stored on the subscription record)
{subscription.amount_real}Amount including discounts
{subscription.currency}Currency code
{subscription.canceled_at}Date of cancellation (if canceled)
{subscription.cancel_at_period_end}Whether the subscription ends at the end of the current paid period
{subscription.cancel_scheduled}Yes if cancellation is scheduled at period end while still active
{subscription.customer}Customer identifier in the payment system
{subscription.status}Current status (active, canceled, trialing, past_due, …)
{subscription.next_charge_date}Date of the next scheduled charge
{subscription.last_charge_date}Date of the last charge
{subscription.charges_count}Total number of charges for this subscription
{subscription.phases_num}Number of billing phases on the subscription
{subscription.total_revenue}Total revenue in subscription currency
{subscription.total_revenue_usd}Total revenue in USD
{subscription.manage_link}Link to the customer subscription portal
{subscription.user_visit_id}Visit/session identifier (analytics)

Date formatting

Any subscription date placeholder supports PHP-style format():

ExampleOutput style
{subscription.next_charge_date=format('Y-m-d')}ISO date — 2026-03-31
{subscription.next_charge_date=format('F j, Y')}Long date — March 31, 2026
{subscription.last_charge_date=format('D, M j \a\t H:i')}Weekday + time — Tue, Mar 31 at 14:05

Supported tokens: Y, y, m, n, d, j, M, F, D, l, H, G, i, s, A, a. Escape literal characters with \ (e.g. \a\t for “at”).


USER.PLAN_ID vs {subscription.id}

USER.PLAN_ID{subscription.id}
AvailableEvery identified user (including leads)Only after a subscription exists
Format6-digit number (e.g. 219282)Database subscription ID
Typical useNurture emails before purchase — “Your plan #219282 is ready”Post-purchase emails — order / subscription reference

Both can appear in the same template when the user already subscribed; values may differ.


Related pages