Skip to main content

Dynamic tags

When creating templates, Zooza provides dynamic tags to speed up communication with your clients. These tags pull specific information — such as programme name, time, and location — into emails automatically, keeping communication relevant without manual effort.

How to insert dynamic tags

Option 1 — Autocomplete (fastest): Type * anywhere in the email body or subject line. A dropdown appears with all tags available for that template. Start typing to filter the list, then click to insert.

Option 2 — Tags panel: Click the Tags icon in the text formatting toolbar. A full list of available dynamic tags with explanations opens — click any tag to insert it.

Option 3 — Copy and paste: Open Instructions and a complete list of tags (link below the subject/body field in the template editor) and copy the tag text directly, for example *|FIRST_NAME|*.

Note: Not all tags work in every template. The autocomplete and Tags panel only show tags valid for the current template type. Using a tag in the wrong template will result in a blank value in the sent email.

Screenshot — dynamic tags

For bookings

Each email sent for a specific booking allows you to dynamically fill in client data. At the time the email is sent, Zooza replaces these tags with specific values.

Dynamic tagDefinitionExample
*|COURSE_PRICE|*Current programme price. If the class has its own price, the class price is used.20.00 EUR
*|REGISTRATION_VALUE|*Value of the booking at the time of creation. Shows the original full amount.20.00 EUR
*|AFFILIATE_ID|*ID of the partner who facilitated the booking12345
*|REGISTRATION_ID|*Booking number12345
*|REGISTRATION_STATUS|*Booking statusregistered
*|REGISTRATION_FEE|*Booking fee. If not listed on the booking, it is taken from the programme.30 EUR
*|VARIABLE_SYMBOL|*Variable symbol used for payment. Typically the booking number.12345
*|COMPANY|*Your company nameMy company Ltd.
*|COURSE_PLACE|*Programme location. Composed of room and location data. Works without a room assigned — if no room is set, it shows the location name only. If the tag returns blank, the cause is a data sync issue, not a missing room.Big hall, Free time center, 323 Green Lane, Edinburgh
*|ONLINE_MEETING_LINK|*Clickable link to the online meeting room (e.g. Zoom, Teams) configured on the class. Renders as an <a> tag.Join Zoom meeting
*|ONLINE_MEETING_URL|*Raw URL of the online meeting room configured on the class. Use when you want to embed the link yourself.https://zoom.us/j/12345
*|HAS_ONLINE_MEETING|*Returns 1 if an online meeting is linked to the class, 0 if not. Use with *|IF:HAS_ONLINE_MEETING|* to include meeting details only when relevant.1
*|PLACE_DIRECTIONS|*Directions text for the venue, pulled from the venue settings.Take bus 42 to Central Station
*|PLACE_MAP|*Map image or embed for the venue, pulled from the venue settings.
*|COURSE_PLACE_ID|*Location ID123
*|COURSE_ROOM_ID|*Room ID456
*|COURSE_PID|*Unique combination of location and room123_456
*|COURSE_NAME|*Programme name -- class nameExercising with babies -- MINI1
*|COURSE_DATE_DAY|*Day of the programmeMonday
*|COURSE_DATE|*Start date of the first session in the programme.14. 5. 2022
*|COURSE_SUMMARY|*Start time of the programme together with the date13. 5. -- 13.9.2023 at 15:00
*|COURSE_TIME|*Programme start time14:00
*|COURSE_PAYMENT|*Programme price derived from booking. If none on booking, the programme price is used.135 EUR
*|CURRENT_BALANCE|*Current balance on the client's booking. Can be positive or negative.-30 EUR
*|CURRENT_BALANCE_ABS|*Absolute value of the current balance — shown without a minus sign. Useful in sentences like "You owe X EUR".30 EUR
*|PAID|*Total amount paid on the booking so far.100 EUR
*|PAYMENT_STATUS|*Payment status of the booking. Possible values: unpaid, partial, paid.partial
*|SCHEDULE_DURATION|*Programme duration in hours15:00
*|SCHEDULE_NAME|*Class name (without programme name)Butterflies, tuesdays at 17:00
*|SCHEDULED_AT_DATE|*Date when the scheduled payment (debt) is due on the booking10
*|FIRST_NAME|*Client nameJohn
*|DOWNPAYMENT|*Downpayment (deposit) amount set on the booking. Use this to show the deposit sum as text in your email template.50 EUR
*|DOWNPAYMENT_DUE_DATE|*Due date for the downpayment. Only populated when a downpayment is set on the booking.31. 5. 2022
*|HAS_DOWNPAYMENT|*Returns 1 if a downpayment amount is set on the booking, 0 if not. Use with *|IF:HAS_DOWNPAYMENT|* to show deposit-related content only when applicable.1
*|HAS_UNPAID_DOWNPAYMENT|*Returns 1 if the downpayment has not yet been paid, 0 if it has been paid. Use with *|IF:HAS_UNPAID_DOWNPAYMENT|*.1
*|CANCELLATION_SCHEDULED|*Returns 1 if a future cancellation is scheduled on this booking, 0 if not. Use with *|IF:CANCELLATION_SCHEDULED|* to show content only when a cancellation is pending.1
*|CANCELLATION_DATE|*The date the booking is scheduled to cancel, in YYYY-MM-DD format. Empty string if no cancellation is scheduled. Use together with CANCELLATION_SCHEDULED.2026-06-30
*|QR_CODE|*QR code for the full payment amount due on the booking. Requires: IBAN and SWIFT on programme/company.Picture with QR code
*|QR_CODE_DOWNPAYMENT|*QR code for the downpayment amount. Same conditions as QR Code, but generates a code for the downpayment sum instead of the full balance.Picture with QR code
*|IBAN|*Bank account for payment. If specified at the programme level, that value is used.GB54BARC20039545449825
*|DD_SETUP_INSTRUCTIONS|*HTML table of direct debit setup instructions, rendered for the active scheme. SEPA (ERSTE): creditor name, Creditor Identifier, mandate reference, and IBAN/BIC to authorise. BACS/FastPay (UK): confirmation that bank details are already captured and the mandate will be set up on the client's behalf, plus the mandate reference and Direct Debit Guarantee. Only available for direct debit programmes.HTML table
*|COURSE_DATE_START_END|*Start and end date of the programme14. 5. 2022 -- 14. 8. 2022
*|COURSE_TRAINER|*Instructor's nameJohn Winslow
*|USER_ID|*Client user ID12345
*|WIDGET_VIDEO_URL|*URL to view the videohttps://www.zooza.sk/video?token=12345
*|WIDGET_PROFILE_URL|*URL to view profilehttps://www.zooza.sk/profil?token=12345
*|EF_DOB|*Extra field -- date of birth13. 4. 2000
*|EF_IDENTIFICATION_NUMBER|*Extra field -- identification number (birth number, national ID, etc.)900101/1234
*|EF_FULL_NAME|*Extra field -- full nameJohn Winslow
*|EF_CITIZENSHIP|*Extra field -- citizenship (ISO 3166-1 alpha-2 country code)SK
*|EF_EXTRA_FIELD_1|**|EF_EXTRA_FIELD_15|*Custom fields 1–15. The number is the field's slot in Programmes → programme → Additional Fields, not its name — EF_EXTRA_FIELD_2 is whatever you configured in the second slot. See Additional fields.Peanut allergy
*|EF_EXTRA_FIELD_7|*Custom field 7
*|EF_EXTRA_FIELD_8|*Custom field 8
*|EF_EXTRA_FIELD_9|*Custom field 9
*|EF_EXTRA_FIELD_10|*Custom field 10
*|EF_EXTRA_FIELD_11|*Custom field 11
*|EF_EXTRA_FIELD_12|*Custom field 12
*|EF_EXTRA_FIELD_13|*Custom field 13
*|EF_EXTRA_FIELD_14|*Custom field 14
*|EF_EXTRA_FIELD_15|*Custom field 15
*|EF_ADDRESS|*Extra field -- address65 Wood Lane, Bristol
*|EF_BUSINESS_NAME|*Extra field -- company nameZooza
*|EF_BUSINESS_ADDRESS|*Extra field -- company address65 Wood Lane, Bristol
*|EF_BUSINESS_ID|*Extra field -- ID number123456
*|EF_TAX_ID|*Extra field -- TIN1234546
*|EF_VAT|*Extra field -- VAT ID number123456
*|IS_BUSINESS_ORDER|*Whether a booking is on a company or not1
*|TURN_OFF_EVENT_NOTIFICATIONS_URL|*URL to turn off morning notifications. Works only in the Morning Reminders template.
*|CANCELED_CONFIRMATION_URL|*URL for canceling from the session. Works only in the Morning Reminders template.
*|ALLOW_REPLACEMENTS|*Whether make-up sessions are available for the booking1
*|FULL_NAME|*Client's full nameRaymond Robbins
*|LAST_NAME|*Client's last nameRobbins
*|EVENT_NAME|*Name of the session (not the programme or class). Available for session reminder only.Individual session, Cambridge
*|EVENT_DATE|*Date of the session. Available for session reminder only.14. 5. 2021
*|EVENT_PLACE|*Venue of the session. Available for session reminder only.Big hall, Free time center, 323 Green Lane, Edinburgh
*|EVENT_ONLINE_MEETING_LINK|*Clickable link to the online meeting room for the specific session. Available for session reminder only.Join Zoom meeting
*|EVENT_ONLINE_MEETING_URL|*Raw URL of the online meeting room for the specific session. Available for session reminder only.https://zoom.us/j/12345
*|EVENT_HAS_ONLINE_MEETING|*Returns 1 if the specific session has an online meeting, 0 if not. Available for session reminder only.1
*|EVENT_PLACE_DIRECTIONS|*Directions text for the session venue. Available for session reminder only.Take bus 42 to Central Station
*|EVENT_PLACE_MAP|*Map image or embed for the session venue. Available for session reminder only.
*|EVENT_DATE_DAY|*Day of the session. Available for session reminder only.Monday
*|EVENT_TIME|*Session time. Available for session reminder only.14:30
*|EVENT_COURSE|*Programme name for the session. Available for session reminder only.Summer camp 07/2023
*|EVENT_TRAINER|*Main instructor name at the session level. Available for upcoming session notification.Suzan Winslow
*|DEFAULT_COURSE_PRICE|*Programme price if class price is 0; otherwise the class price.34.43 EUR
*|DEBT|*Debt value on booking. If no debt, displays the same as DEFAULT_COURSE_PRICE.100 EUR
*|ORDER_SUMMARY|*Full summary of the booking including programme name, class, date, and price. Recommended for make-up sessions and block-based programmes where individual tags may show incorrect data.Yoga Beginners -- Mondays at 10:00, 14. 5. 2022, 50 EUR
*|SEGMENTS_SUMMARY|*The blocks the client is enrolled in, each with its total price. One line per block.Math — 195,00 €
English — 195,00 €
*|SEGMENTS_INSTALLMENTS|*The same blocks on one line, followed by what the client actually pays each period. See the section below — the figure is representative, not a schedule.Math, English — 97,50 €/month
*|BOOKING_URL|*URL to open the registration widget pre-filled for the client's class. Useful in trial follow-up emails to prompt full registration.https://www.zooza.sk/registracia?schedule=123
*|WIDGET_REGISTRATION_URL|*Base URL of the registration widget. Use to link clients back to the registration page.https://www.zooza.sk/registracia
*|GOING_CONFIRMATION_URL|*URL for the client to confirm their attendance. Use in attendance confirmation templates.https://www.zooza.sk/confirm?token=abc
*|UPCOMING_EVENTS|*Rendered list of upcoming sessions for the booking. Available in the Upcoming Events Notification template only.
*|TURN_OFF_UPCOMING_EVENTS_NOTIFICATIONS_URL|*URL to turn off upcoming event morning notifications. Available in the Upcoming Events Notification template only.
*|UNSUBSCRIBE|*URL to unsubscribe from all marketing emails.https://unsubscribe.zooza.sk/?token=abc
*|VOTING|*URL to open the feedback / rating form for the booking.https://feedback.zooza.app/#id=123
*|CURDATE|*Today's date at the time the email is sent.2. 4. 2026
*|NOW|*Current date and time at the moment the email is sent.2. 4. 2026 14:30
*|DUE_DATE|*Due date for payment33 EUR

Scheduled cancellation and attendance: When a future cancellation is set on a booking, Zooza automatically hides the client's attendance for sessions on or after the cancellation date. This keeps the trainer roster and the client's widget clean — only sessions up to the effective end date are shown. If the scheduled cancellation is later revoked, attendance is restored automatically.

Conditional tags

You can use conditional tags in templates. For example, if you accept business orders, you can add a conditional block to confirm to the client that you are recording their booking as a business and will send them an invoice shortly.

Tag nameDefinitionApplication
IFIf the condition is true*|IF:BUSINESS_ORDER|* Content *|END:IF|*
ELSEOtherwise*|IF:BUSINESS_ORDER|* content if yes *|ELSE:|* content if not *|END:IF|*
ELSEIFOr if*|IF:BUSINESS_ORDER|* content if yes *|ELSEIF:REGISTRATION_STATUS=registered|* content if status *|ELSE:|* content if not *|END:IF|*
IFNOTIf it is not*|IFNOT:BUSINESS_ORDER|* Content *|END:IF|*

Comparison operators

TagDefinition
=Equals
!=Does not equal
>Greater than
<Less than
>=Greater than or equal
<=Less than or equal

Block summary tags

Two tags summarise the blocks (term segments) a client enrolled in, without printing the rest of the order. Both work in email only — they render formatted output, so they are not available for SMS.

TagWhat it shows
*|SEGMENTS_SUMMARY|*Each block on its own line, with the total price of that block.
*|SEGMENTS_INSTALLMENTS|*All blocks on one line, followed by what the client actually pays each period.

For a client enrolled in Math and English, each block costing 195,00 € in total and billed monthly:

  • SEGMENTS_SUMMARYMath — 195,00 € / English — 195,00 €
  • SEGMENTS_INSTALLMENTSMath, English — 97,50 €/month

Use SEGMENTS_SUMMARY when the client needs to see what each block costs. Use SEGMENTS_INSTALLMENTS when they need to see what will leave their account.

The period is not always a month

SEGMENTS_INSTALLMENTS prints whatever period the payment plan actually uses — monthly, quarterly, half-yearly, yearly, per a number of sessions, or a fixed number of instalments. Do not write template copy that calls it "your monthly payment"; let the tag say it. Wording such as "Your payments: *|SEGMENTS_INSTALLMENTS|*" stays correct for every plan.

When the first payment differs

If the first payment is not the same as the rest, the tag prints both parts:

45,00 €, then 97,50 €/month

The figure is representative, not a schedule

SEGMENTS_INSTALLMENTS shows one figure that stands for the plan. It is not a payment schedule, and in three situations it will not match every individual payment:

  • Blocks of different lengths. Where a block-based plan bills blocks that do not run for the same number of weeks, the payments differ between them.
  • A shortened final payment. When the plan does not divide evenly, the last payment is smaller.
  • Hand-edited payments. Any payment you edited by hand on the booking is left as you set it.

This is intended — a single representative figure is more use to a client than a wall of dates. When someone needs the exact list, use *|ORDER_SUMMARY|*, which carries every payment with its due date.

Tell clients the number is indicative if your template is the only thing they will see. A parent comparing 97,50 €/month against a final payment of 62,00 € will otherwise report it as an error.

When the tags show nothing

Two cases are deliberate, not faults:

  • No payment plan on the booking. SEGMENTS_INSTALLMENTS renders nothing at all. There is no instalment to describe, so it stays silent rather than printing a zero.
  • Pay-per-attendance. Block names appear, but with no amount — the price depends on attendance, so it is not known in advance.

If a tag is blank and the booking falls into neither case, check that the client is actually enrolled in a block. A booking with no blocks has nothing for these tags to list.

Known limitations and troubleshooting

Tags in make-up sessions

When a client books a make-up session, tags like *|COURSE_TIME|*, *|COURSE_DATE_DAY|*, and *|COURSE_PLACE|* pull data from the primary class's first session, not the make-up session. This means the email may show incorrect time, day, or location for the make-up.

Workaround: Use *|ORDER_SUMMARY|* instead — it includes the correct session details for the specific booking context.

Tags in block-based programmes

For programmes using blocks (term segments), *|COURSE_DATE_DAY|* and *|COURSE_TIME|* pull from the first session in the class, which may not match the client's enrolled block.

Workaround: Use *|ORDER_SUMMARY|* to display the correct block-specific information. A dedicated block-specific date tag is not yet available.

Alternative workaround for time slot: Include the time slot in the block name itself (e.g. "Mondays 17:00" or "January — Mon 17:00"). *|ORDER_SUMMARY|* includes the block name, so clients see the time in their confirmation email even without a dedicated tag.

A per-block tag is not planned, and will not be added. This is worth understanding rather than waiting for, because the reason is structural: blocks belong to a single class and there is no relationship between the blocks of one class and those of another. A tag such as BLOCK_1 could not mean anything reliable — you would have no way of knowing whether the class in question has a first block at all, let alone whether it is the one you meant.

The same constraint is why blocks cannot be included in the registration export. Blocks can be reported per class, but not across registrations drawn from different courses.

A summary tag that lists only blocks, without the rest of the order, now exists — two of them, in fact. See Block summary tags above. Showing blocks in the client profile is still planned.

The confirmation email shows only the day of the week

If your booking confirmation says "Monday" where you expected "Monday 8 September", the template is using *|COURSE_DATE_DAY|*. That tag outputs the weekday and nothing else — by design.

For the actual dates, use *|COURSE_SUMMARY|*, which outputs the start and end date together with the time (13. 5. — 13. 9. 2023 at 15:00). It is the right tag for "when does this run", and the one to reach for in a booking confirmation.

Use *|ORDER_SUMMARY|* instead when you want the whole booking — programme, class, dates and price — rather than just the schedule.

Tags in order confirmation emails

Dynamic tags are not fully supported in order (product purchase) confirmation emails. Tags like *|COURSE_NAME|*, *|COURSE_TIME|*, etc. will not populate because orders are not linked to a specific class or session.

Only basic client tags (*|FIRST_NAME|*, *|FULL_NAME|*, etc.) work in order emails.

Tags in subject lines

Most dynamic tags work in email subject lines, but some may not populate in certain template types. Always test your email before sending to a large class.

COURSE_* tags in session reminder templates

COURSE_* tags (e.g. *|COURSE_DATE_DAY|*, *|COURSE_TIME|*, *|COURSE_PLACE|*) pull from the class at the time it was created — specifically from the first session that existed when the class was set up. If the original schedule was later changed or sessions were deleted and recreated, COURSE_* tags may show outdated values.

In session reminder templates, always use EVENT_* tags instead — they pull from the actual session being reminded about:

Instead ofUse
*|COURSE_DATE_DAY|**|EVENT_DATE_DAY|*
*|COURSE_DATE|**|EVENT_DATE|*
*|COURSE_TIME|**|EVENT_TIME|*

EVENT_* tags are only available in session reminder templates.

The cancellation confirmation template also needs EVENT_*

The same rule applies to the cancellation confirmation template (#communication/templates?type=cancelation_confirmation), and this one catches people out because the mistake stays invisible for years.

The template tells a client which session they just cancelled, so every tag in it must describe the session, not the class:

Instead ofUse
*|COURSE_PLACE|**|EVENT_PLACE|*
*|COURSE_NAME|**|EVENT_NAME|*
*|COURSE_DATE|**|EVENT_DATE|*
*|COURSE_TIME|**|EVENT_TIME|*

Why it hides: COURSE_PLACE is the venue on the class, EVENT_PLACE is the venue on the session. As long as those two match, the email looks correct. It only breaks once a session runs somewhere else — which is normal for group programmes, where the class venue and the session venue often differ.

COURSE_NAME fails the same way on make-up sessions. If a client attends a make-up in a different class and then cancels it, COURSE_NAME names the class they are enrolled in, not the one they just cancelled out of. Use EVENT_NAME.

If you have never edited this template, check it anyway. Both cases seen in support were on templates the customer had not touched.

Session-context tags in manual sends

Tags that pull session-specific data — *|COURSE_PLACE|*, *|COURSE_TIME|*, *|COURSE_DATE_DAY|*, *|EVENT_DATE|*, etc. — require an automatic send triggered by a session event (e.g. session reminder, booking confirmation). When you compose and send a message manually from the Communication tab without a session trigger, these tags have no context to pull from and will return blank.

If session-context tags are not populating in your manual send:

  • Check whether you need the data in the message body or if you can reference it another way (e.g. include the session date in the subject line manually, or use *|ORDER_SUMMARY|* which includes session details).
  • If the email is intended to be automated (sent on a schedule or event), configure it as an automatic template rather than a manual send.

QR_CODE tag returns blank or doesn't appear

*|QR_CODE|* requires both IBAN and SWIFT/BIC to be set on the billing profile. Without these, the tag silently returns blank — the QR image is not rendered.

Fix: Go to Settings → Billing profiles, open your active profile, and confirm that IBAN and SWIFT/BIC are filled in. If you use per-programme billing settings, check the programme's Payment tile as well.

QR codes are currently available for SK, CZ, and other SEPA markets. If your account is based outside these markets, the *|QR_CODE|* tag may not generate a QR image regardless of the settings.

Tag rendering outages

In rare cases, the dynamic tag rendering service may experience temporary outages, causing tags to appear as blank in sent emails. If you notice blank tags in recently sent emails:

  1. Check Communication → Sent emails to verify which emails were affected.
  2. Contact support to confirm whether a service issue occurred.
  3. Resend affected emails after the issue is resolved.