Skip to content

Email notifications

Every transactional email a marketplace sends (order confirmation, welcome email, password reset…) is a notification. Each notification has a subject and an HTML body written in Liquid, which the marketplace can rewrite in the back office. The filters of the storefront work in emails too: see Liquid filters.

  1. Open Settings → Notifications (/admin/settings/notifications). The page lists the notifications by category (Orders, Users, Reviews…), each with its e-mail status.

  2. Click a notification. The editor opens at /admin/settings/email_templates/<handle>/edit, for example /admin/settings/email_templates/order_new_customer/edit.

  3. Edit Email subject and Email body (HTML), then click Save.

  4. Click Preview to render the email with the marketplace’s most recent real record (its latest order, its latest member), or Send test email to receive it at the address you are signed in with.

Editing the content is available on paid plans. On other plans the editor shows the current template and an Upgrade your account link instead of saving.

Settings in the editor opens Email settings for that notification:

Setting Effect
Send by e-mail Turns the email on or off.
Send as a mobile notification Shown when the marketplace runs the installable app with push notifications and the notification has a push version. Independent of the email.
Email type Send as HTML, Send as plain text or Send as plain text and HTML. The plain-text version is generated from your HTML when you save.
Send copy to (CC), Send invisible copy to (BCC) Extra recipients, separated by commas.

A test email goes through the same rules: a notification switched off sends nothing, even though the screen confirms the test.

The sender is set once for all emails in Settings → Emails (/admin/settings/email): From name, Sender email and replyTo. The sender name and address are used only when Use custom smtp settings is on and the SMTP account is allowed to send for that address; otherwise emails leave from Kreezalid’s default address, with your replyTo as the reply address. The SMTP connection is tested when you save.

A template is a complete HTML document: there is no shared layout around it. The header, the logo and the signature are part of each template, which lets you design each email freely, and means a change of style must be made in every template.

Email body (HTML)
<!DOCTYPE html>
<html>
<body style="{{ email_body_style }}">
<div style="{{ email_container_style }}">
<p><img src="{{ email_logo }}" style="{{ email_logo_style }}" alt="{{ marketplace_name | escape }}"></p>
<p>Hello {{ customer.first_name | escape }},</p>
<p>Thank you for your order <strong>#{{ order.number }}</strong> of
{{ order.amount | money: order.currency }}.</p>
{{ order_details }}
<p><a href="{{ order.customer_url }}" style="{{ email_button_style }}">View my order</a></p>
<p>- <strong>{{ marketplace_name }}</strong></p>
</div>
</body>
</html>

The subject is Liquid too:

Email subject
Your order #{{ order.number }} on {{ marketplace_name }}

Write inline styles: most email clients ignore <style> blocks and external stylesheets. The theme’s assets and asset_url are not meant for emails.

Variable Description
marketplace_name The marketplace’s name
marketplace_url Its storefront URL
email_logo The URL of the email logo: Logo in email in Content → Theme → General, or the main logo when none is set. Use a PNG or JPG: SVG and WebP are not displayed by Outlook or Gmail.
marketplace_logo_email The same URL
email_title The rendered subject
email_body_style, email_container_style, email_logo_style, email_button_style The default inline styles of the body, the central column, the logo and a button
shop name, url, currency, locale, timezone
locale The language of the email

The storefront’s global objects (settings, routes, authenticated_user) are not available in emails.

The objects below are the same as on the storefront: order has the order fields, customer, supplier and user the member fields, listing the listing fields. supplier is the vendor of the order, customer the buyer. customer.dashboard_url and supplier.dashboard_url link to each one’s account.

Notification (handle) Sent to When Variables
New order (order_new_supplier) Vendor An order is placed order, customer, supplier, order_details, event_calendar, order.accept_url, order.decline_url
Order confirmation (order_new_customer) Buyer An order is placed order, customer, supplier, order_details
Order accepted (order_accepted_customer) Buyer The vendor accepts the order order, customer, supplier, order_details, event_calendar, order.customer_url, order.supplier_url
Order rejected (order_rejected_customer) Buyer The vendor declines the order, or does not answer in time order, customer, supplier, order_details, order.refusal_reason, order.refusal_date
Order cancelled (order_canceled_customer) Buyer The order is cancelled same as Order rejected
Order automatically cancelled (order_auto_canceled_customer) Buyer The order is cancelled automatically same as Order rejected
Order shipped (order_shipping_fulfillment) Buyer The vendor marks the order shipped order, customer, supplier, order_details
Order delivered (order_customer_confirmed) Vendor The buyer confirms receipt order, customer, supplier, order_details
Order paid (order_payout_created) Vendor The vendor’s payout is sent order, customer, supplier, order_details
Pending order (pending_order_customer) Buyer An order is placed with a manual payment or a bank transfer order, customer, supplier, order_details, manual_payment_instructions
Order message (order_message) Buyer or vendor A message is posted on an order sender, recipient, order, message_content, order_link

order_details is the summary of the order’s items, already rendered as HTML. Each item in it is drawn by the theme snippet order-item-email.liquid, which you can edit in the theme editor: the snippet receives order_item, order, variants_label, audience (buyer, seller or admin) and recipient_tz, the recipient’s time zone. event_calendar and manual_payment_instructions are HTML blocks too: print them as they are.

Notification (handle) When Variables
Welcome email (user_registration) A member signs up user
Email confirmation (user_confirm_email_address) A member must confirm their address user, confirm_email_link
Forget password (user_reset_password) A member asks for a new password user, reset_password_link
Account status change (user_group_changed) A member moves to another group. Off by default. user, previous_group, new_group, dashboard_url

In these emails user holds first_name, last_name, public_name, email, avatar, attributes, group_id, group_name, group_alias and lang (the last four are not in the account status change). previous_group and new_group hold id, title, alias, can_post_listing and is_onboarding.

Shown when the marketplace uses the matching feature.

Notification (handle) When Variables
Listing accepted (listing_accepted) A moderator approves a listing user, listing
Listing rejected (listing_rejected) A moderator rejects a listing user, listing, moderation.reason, moderation.details
Listing expiring (listing_expiring) A listing reaches the end of its validity user, listing, validity_days, expires_on
Listing fee due, fee window ending, fee expired (listing_fee_due, listing_fee_window_ending, listing_fee_expired) Listing publication fees user, listing, payment_url, plus amount (fee due) or ends_on (window ending)

Shown when the Reviews app is on: rating request to the buyer, review request to the vendor, and their reminders. Variables: order_details, review_url, customer, supplier (there is no order).

Notifications Shown when Variables
New results for a saved search (saved_searches_new_results) The Saved searches app is on user, listings, listings_thumbnails (HTML cards), search, search_results_url
Payment account verified, restricted, action required, information due soon, information received The marketplace pays vendors through Stripe Connect custom accounts user, onboarding_url, has_eventually_due
Complete your account to get paid Same user, order.order_number, onboarding_url
Booking reminders to the buyer and to the vendor The Advanced Calendar app is on customer, supplier, order (with order.listing), booking.title, booking.starts_at (in the recipient’s time zone), booking.session_label
  • Use Preview after every change: it renders your Liquid with real data, and shows “You cannot preview this email notification.” when the marketplace has no record to build it from yet, or for the few notifications preview does not support.
  • The Variables list beside the editor is a reminder, not the contract. Where it differs from this page, trust this page: for the member emails, the fields are under user. ({{ user.first_name }}), and the order message’s addressee is recipient.
  • Escape what members typed: {{ customer.first_name | escape }}.
  • Format amounts in the order’s currency: {{ order.amount | money: order.currency }}.
  • Dates are printed in the marketplace’s time zone by date; pass the recipient’s when you have it, for example {{ order.checkout_at | date: 'd/m/Y H:i', recipient_tz }} inside order-item-email.liquid.