This is the complete reference of the merge tags (data fields) that can be used in email, SMS and messaging templates to dynamically insert visitor, host and system information.
How to Use Merge Tags
Merge tags are placeholders that get replaced with actual data when messages are sent. Use the format ${tag_name} in your templates.
Example:
Dear ${name} ${surname},
Your visit to ${company_name} has been confirmed for ${valid_date}.
Key behaviour to know before designing templates:
- A tag that is not populated for a message type renders as empty text, never an error. Every message type fills only the tags relevant to its trigger - see Tag availability by message type below and design each template against the set its type actually provides.
- Tags are case-sensitive: write them exactly as listed.
- Templates are plain text with bare
${tag}placeholders and nothing else. Conditions (<#if>),?has_content,?string(...), calls, arithmetic and other expressions are rejected when you save a template. Optional content is handled by the ready-made block and suffix tags, which fill with the finished text when there is something to show and with nothing when there is not. Templates saved before this rule keep sending as they always did, and a page with such a template still saves while you leave that template unchanged: the check applies only to a field whose text you change. Once you change that field, or use Reload default on it, the new text must follow the rule. - Date and time tags render in the system’s configured timezone (Configuration > Settings > Region), not the recipient’s device timezone.
- HTML-producing tags (
${img_logo_tag},${qr_code_image_tag},${qr_code_button},${groupMembersList}) are for HTML email templates only - never use them in SMS templates.
Reference List of Available Merge Tags
Company and System
Populated for every message type.
| Merge Tag | Description | Example Value |
|---|---|---|
${company_name} | Company/site name; when the location of the visit or registration has its own company name (its Advanced tab, Inherited unticked), it is used in every email about that visit or registration and in the host’s check-in/check-out text message | EvTrack Labs |
${company_contact_number} | Company main contact number | +1-555-1000 |
${app_base_url} | Application base URL | https://app.evtrack.com |
${img_logo_tag} | Company logo as an embedded HTML image (email only); a location with its own email logo (its Invite Email tab) uses it in every email about its visits and registrations | <img src="cid:logo" /> |
Visitor Information
| Merge Tag | Description | Example Value |
|---|---|---|
${name} | Visitor’s first name | Alexander |
${surname} | Visitor’s last name | Grant |
${email} | Visitor’s email address | alexander.grant@evtrack.com |
${mobileNumber} | Visitor’s mobile phone number | +1-555-0123 |
${visitorCompany} | Name of visitor’s company | EvTrack Labs |
${visitorCheckStatus} | Current check-in / check-out status | Checked-in |
${identityNumber} | Visitor’s identity/ID number | 123456789 |
Host Information
| Merge Tag | Description | Example Value |
|---|---|---|
${host_name} | Host’s first name | John |
${host_surname} | Host’s last name | Smith |
${host_email} | Host’s email address | john.smith@company.com |
${host_tel_mobile} | Host’s mobile phone number | +1-555-0456 |
${host_tel_office} | Host’s office phone number | +1-555-1000 |
${host_tel_ext} | Host’s phone extension | 234 |
${host_tel_home} | Host’s home phone number | +1-555-0789 |
${host_unit_address} | Host’s unit/office address | Suite 400, Floor 4 |
${host_organization} | Host’s organization/company | Engineering Division |
${host_department} | Host’s department | Software Development |
${host_group} | Host’s group/team | Platform Team |
Visit Details
| Merge Tag | Description | Example Value |
|---|---|---|
${reason} | Reason for the visit | Business Meeting |
${valid_date} | Visit start date and time | 2026-01-20 09:00:00 |
${expiry_date} | Visit end date and time | 2026-01-20 17:00:00 |
${valid_date_iso} | Visit start date (ISO format) | 2026-01-20 |
${expiry_date_iso} | Visit end date (ISO format) | 2026-01-20 |
${valid_time_iso} | Visit start time | 09:00 |
${expiry_time_iso} | Visit end time | 17:00 |
${event_date} | Event/notification timestamp | 2026-01-20 08:45:00 |
${personal_message} | Personal message from host (pre-registration invitations) | Looking forward to our meeting |
${multiple_entries_enabled} | Multiple entries allowed (YES/NO) | YES |
${multiple_entries_description} | Description of entry permissions | Multiple Entries |
${visiting_context_overview} | Compact “company - location - host” summary, built for SMS and subject lines (pre-registration) | EvTrack Labs - Head Office - John Smith |
Credential Information
| Merge Tag | Description | Example Value |
|---|---|---|
${credential} | Type of credential issued | QR Code |
${otp} | One-Time Password/PIN code | 123456 |
${qr_code_image_url} | URL to download the QR code image | https://axqr.me/3jaxKF |
${qr_code_image_tag} | HTML img tag for the embedded QR code (email only) | <img src="cid:qr123" /> |
${qr_code_button} | HTML call-to-action button (email only); in invitations it reads “Get QR Code”, in pre-registration invitations it reads “Start Registration” and opens the registration form | <a href="...">Get QR Code</a> |
${access_control_list_names} | List of assigned access control lists | Main Entrance, Parking, Floor 4 |
Access Control and Movement
| Merge Tag | Description | Example Value |
|---|---|---|
${accessPoint} | Access control point/door name | Main Entrance |
${direction} | Direction of movement | IN or OUT |
${directionAction} | Action text based on direction | arrived or departed |
${approval_request_url} | Host approval action link (approval requests) | https://app.evtrack.com/a/… |
Location Information
| Merge Tag | Description | Example Value |
|---|---|---|
${location_name} | Name of the location/building | Corporate Headquarters |
${location_complex} | Complex/campus name | Technology Park |
${location_street_address} | Street address | 123 Business Avenue |
${location_suburb} | Suburb/neighborhood | Downtown |
${location_postal_code} | Postal/ZIP code | 12345 |
${location_city} | City name | San Francisco |
${location_state_province} | State or province | California |
${location_country} | Country | United States |
${location_key_contact_name} | Location contact person name | Reception Desk |
${location_key_contact_number} | Location contact phone number | +1-555-0142 |
${gps_latitude} | GPS latitude coordinate (only when the location has coordinates) | 37.7749 |
${gps_longitude} | GPS longitude coordinate (only when the location has coordinates) | -122.4194 |
${external_url_google_search_maps_position} | Directions link: the location’s custom map URL when set, otherwise a Google Maps search link built from the coordinates | https://maps.google.com/… |
In invitations, when a visit has no location of its own, the location tags fall back to the host’s own location. Host notifications and the check-out follow-up fill the location tags from the visit’s own location only; a visit without a location leaves them empty.
WiFi Details
Only populated when guest WiFi access was provisioned for the visit.
| Merge Tag | Description | Example Value |
|---|---|---|
${wifi_ssid} | WiFi network name (SSID) | Guest-WiFi |
${wifi_psk} | WiFi password/pre-shared key | Welcome2026 |
${wifi_guest_username} | Guest WiFi username | visitor123 |
${wifi_guest_password} | Guest WiFi password | TempPass456 |
${wifi_voucher_code} | WiFi voucher/access code | ABCD-1234 |
Parking Information
Only populated when parking was allocated for the visit.
| Merge Tag | Description | Example Value |
|---|---|---|
${parking_type} | Type of parking allocated | Visitor Parking |
${building_name} | Building name for parking location | Tower A |
${floor_name} | Parking floor/level | Level B2 |
${parking_bay} | Specific parking bay number | V-123 |
Cancellation
Populated in visit cancellation notices.
| Merge Tag | Description | Example Value |
|---|---|---|
${cancellation_reason} | The selected cancellation reason | Host unavailable |
${cancellation_message} | The free-text cancellation message | The meeting has been moved to next week |
Registration and Onboarding Fields
Populated in registration notices to administrators and in user onboarding emails.
| Merge Tag | Description | Example Value |
|---|---|---|
${registration_process_url} | URL to process/approve the registration | https://app.evtrack.com/register |
${title} | Person’s title (Mr/Ms/Dr) | Mr |
${middleName} | Middle name | James |
${company} | Company name (registration) | Tech Solutions Inc |
${unitAddress} | Unit/apartment address | Unit 5A |
${telMobile} | Mobile number (registration) | +1-555-0123 |
${telOffice} | Office number (registration) | +1-555-1000 |
${telHome} | Home number (registration) | +1-555-0789 |
${vehicleLicensePlateNr} | Vehicle registration/plate number | ABC-123 |
${registrationOrganisation} | Organization (registration) | Engineering Dept |
${registrationDepartment} | Department (registration) | IT Services |
${registrationGroup} | Group (registration) | Support Team |
${registrationLocation} | Location (registration) | Building A |
${comments} | Registration comments/notes | Special requirements noted |
${activeDate} | Access active-from date | 2026-01-20 |
${expiryDate} | Access expiry date | 2026-12-31 |
${vEventStart} | Calendar event start | 20260120T090000 |
${vEventEnd} | Calendar event end | 20260120T170000 |
${rejectionReason} | Reason for rejection (if applicable) | Documents incomplete |
${registrationRequireAppAccess} | Whether mobile app access was requested (true/false) | true |
${registrationRequireMobileCred} | Whether a mobile credential was requested (true/false) | false |
${registrationRequireRfidCred} | Whether an RFID card was requested (true/false) | true |
${registrationRequireRfidCredReplacement} | Whether an RFID card replacement was requested (true/false) | false |
${registrationOptionalRequestLprAccess} | Whether license-plate access was requested (true/false) | false |
Group Registrations
Populated in registration notices for group pre-registrations.
| Merge Tag | Description | Example Value |
|---|---|---|
${isGroup} | Whether the registration is a group registration (true/false) | true |
${groupName} | Group registration name | Contractor Team A |
${groupType} | Group registration type | CONTRACTOR |
${groupMembersCount} | Number of members in the group | 12 |
${groupMembersList} | Rendered list of the group’s members (email only) | HTML list |
Account and Security
| Merge Tag | Description | Example Value |
|---|---|---|
${username} | Login username (onboarding email) | alexander.grant |
${password} | Temporary password (onboarding email, when set manually) | TempPass123 |
${password_reset_url} | Password reset link (password reset email) | https://app.evtrack.com/reset/… |
${userName} | Account name (login notification email) | Alexander Grant |
${userEmail} | Account email (login notification email) | alexander.grant@evtrack.com |
${ipAddress} | Client IP address (login notification email) | 203.0.113.10 |
${userAgent} | Browser/device description (login notification email) | Chrome on macOS |
${loginTime} | Login timestamp (login notification email) | 2026-01-20 08:45:00 |
${agreementName} | Agreement/terms name (agreement declined notice) | Visitor Terms and Conditions |
App Links
| Merge Tag | Description | Example Value |
|---|---|---|
${app_ios_url} | iOS App Store URL (onboarding email) | https://apps.apple.com/… |
${app_android_url} | Google Play Store URL (onboarding email) | https://play.google.com/… |
${app_huawei_url} | Huawei AppGallery URL (onboarding email) | https://appgallery.huawei.com/… |
${pre_registration_url} | Pre-registration form link (pre-registration invitations) | https://app.evtrack.com/r/… |
Optional block and suffix tags
These tags are filled with ready-made text, built for the message format (line breaks as <br/> in an email body and as new lines in an instant message; an SMS and an email subject put the address on one line, separated by commas), with every value escaped. Each renders as empty text when it has nothing to show. They carry no labels, so write any heading or intro yourself.
| Merge Tag | Description | Example Value |
|---|---|---|
${location_address_block} | The non-empty parts of company name, location name, complex, street, suburb, postal code, city and country, one per line | EvTrack Labs, Corporate Headquarters, 123 Business Avenue |
${location_key_contact_line} | Location contact as “name, number”; either part may be missing | Reception Desk, +1-555-0142 |
${wifi_network_line} | WiFi network and password as “network / password” | Visitor-WiFi / Welcome2026 |
${wifi_login_line} | WiFi login as “username / password” | visitor123 / TempPass456 |
${wifi_voucher_line} | WiFi voucher code | ABCD-1234 |
${wifi_psk_suffix} | Password in brackets, for use at the end of a sentence about the network | (Welcome2026) |
${parking_details_line} | Parking type, building, floor and bay joined with “ - “ | Visitor Parking - Tower A - Level B2 - V-123 |
${host_organization_suffix} | Host’s organization in brackets, placed straight after the host’s name | (Engineering Division) |
${visitor_organisation_suffix} | Visitor’s organization in brackets, placed straight after the visitor’s name | (EvTrack Labs) |
${contact_name} | Who to contact: the host’s name, or the company name when there is no host | Emily Brooks |
${group_member_suffix} | Extra group members as “(+N)” when the group has more than one person | (+3) |
${otp_expiry_minutes} | Number of minutes a one-time code remains valid (verification code SMS) | 10 |
The user-registration notice to administrators has a Yes/No version of each request flag, so the message reads “Yes” or “No” instead of true or false: ${registrationRequireAppAccessYesNo}, ${registrationRequireMobileCredYesNo}, ${registrationRequireRfidCredYesNo}, ${registrationRequireRfidCredReplacementYesNo} and ${registrationOptionalRequestLprAccessYesNo}.
Tag Availability by Message Type
Each message type fills only the tags relevant to its trigger; any other tag renders blank. Design each template against the set its type actually provides:
| Message Type | Trigger | Tags Populated |
|---|---|---|
| Visitor Invitation (email, SMS, WhatsApp) | Visitor invited for a visit | The full set: visitor, host, visit dates, credential/QR, location, WiFi, parking and company tags |
| Pre-Registration Invitation (email, SMS) | Registration invitation sent to a visitor | ${name}, ${surname}, ${email}, ${mobileNumber}, ${host_name}, ${location_name}, ${personal_message}, ${visiting_context_overview}, ${pre_registration_url}, ${qr_code_image_tag}, ${qr_code_button} (as a Start Registration button) |
| Host Notification (email, SMS, push) | Visitor check-in/check-out or status change | Visitor and host basics plus ${visitorCompany}, ${visitorCheckStatus}, ${accessPoint}, ${direction}, ${directionAction}, ${event_date}, ${reason} and the visit’s location tags (email and SMS) |
| Visitor Check-out Follow-Up (email) | After the visitor checks out | Visitor, host and movement tags plus ${email} and the visit’s location tags |
| Host Approval Request (email, SMS, push) | Visitor requires host approval | Visitor basics, ${visitorCompany}, ${accessPoint}, ${reason}, ${approval_request_url} |
| Visit Cancellation (email) | A visit is cancelled | Visitor, host, visit date and location tags plus ${cancellation_reason}, ${cancellation_message} |
| Agreement Declined (email) | A person declines an agreement | ${agreementName} plus the person’s name, mobile number and identity number |
| Registration Notices (email, to administrators) | New registration needs attention | The registration fields plus the group registration tags, ${vEventStart}/${vEventEnd} and ${rejectionReason} |
| User Onboarding (email) | New user account created | The person’s names and contact fields, ${username}, optional ${password}, ${activeDate}/${expiryDate}, the registration request flags and the app store links |
| Password Reset (email) | User requests a password reset | ${password_reset_url} and the company tags |
| Login Notification (email) | Log in to a user account | ${userName}, ${userEmail}, ${ipAddress}, ${userAgent}, ${loginTime} |
The block and suffix tags are filled only in these message types; in any other type they render blank:
| Merge Tag | Message Types |
|---|---|
${location_address_block} | Visitor Invitation (email body: one part per line; email subject and SMS: one line, separated by commas; instant message: one part per line) |
${location_key_contact_line} | Visitor Invitation (email, SMS, instant message) |
${wifi_network_line} | Visitor Invitation (email only) |
${wifi_login_line} | Visitor Invitation (email only) |
${wifi_voucher_line} | Visitor Invitation (email only) |
${wifi_psk_suffix} | Visitor Invitation (email only) |
${parking_details_line} | Visitor Invitation (email only) |
${host_organization_suffix} | Visitor Invitation (email, SMS, instant message) |
${visitor_organisation_suffix} | Reminders |
${contact_name} | Reminders |
${group_member_suffix} | Reminders |
${otp_expiry_minutes} | Verification code (SMS only) |
${registrationRequireAppAccessYesNo} and the other Yes/No request flags | Registration Notices (the user-registration notice) |
${company_name}, ${company_contact_number}, ${app_base_url} and (in emails) ${img_logo_tag} are populated for every type. Movement tags (${accessPoint}, ${direction}, ${directionAction}) exist only in the event-driven notifications - they are never populated in invitations.
How the invitation email is assembled
The invitation email is not one single template - it is assembled from the sections configured under Visitors > Settings > Emails > Invitations, in this order:
- Updated notice - prepended only when an existing invite is re-sent after changes; the subject is also prefixed with
UPDATED: - Header
- Body - the QR code body and/or the PIN body depending on the credentials issued, otherwise the generic body
- WiFi section - only when WiFi was provisioned
- Parking section (or the parking-unavailable section)
- Location section
- Rules section
- Footer
One merged data set is applied to the whole assembled email, so any invitation tag can be used in any section. Locations can override the subject, header, rules and logo for their own invitations - see the location’s Invite Email tab.
SMS and WhatsApp notes
- SMS templates are plain text. Never use the HTML tags. After merging, line breaks are removed, the message is truncated to the configured maximum message parts, and non-standard characters (including accented letters) are converted or dropped by the gateway pipeline - keep SMS templates short and ASCII-simple.
- WhatsApp does not use
${...}merge tags. WhatsApp business templates are pre-approved by the provider and carry numbered variables; EvTrack maps each variable to a source (visitor name, company, start date, end date, access type, reason, location, credential link, and so on) under Configuration > Server Settings > WhatsApp. WhatsApp dates render asdd-MM-yyyyand times asHH:mm. See the SMS and WhatsApp guide for the full setup.
Usage Examples
Example 1: Visitor Invitation Email
Dear ${name} ${surname},
You are invited to visit ${company_name} on ${valid_date}.
Your host ${host_name} ${host_surname} will meet you at ${location_name}.
Location Details:
${location_street_address}
${location_city}, ${location_state_province} ${location_postal_code}
Your access code: ${otp}
Valid from: ${valid_date}
Valid until: ${expiry_date}
${qr_code_image_tag}
Best regards,
${company_name}
Example 2: Host Notification
Dear ${host_name},
Your visitor ${name} ${surname} from ${visitorCompany} has ${directionAction}
at ${accessPoint} (${direction}).
Time: ${event_date}
Reason: ${reason}
Best regards,
${company_name} Security
Example 3: Optional WiFi and Parking Details
Dear ${name},
Your visit to ${company_name} is confirmed!
Visit Details:
Date: ${valid_date_iso}
Time: ${valid_time_iso} - ${expiry_time_iso}
Host: ${host_name} ${host_surname}${host_organization_suffix}
${wifi_network_line}
${wifi_login_line}
${wifi_voucher_line}
${parking_details_line}
${location_address_block}
See you soon!
${company_name}
Each block line renders as nothing when the visit has no WiFi, parking or address data, so no heading or label is left behind. Put any heading text you want in the template itself.
Important Notes
- Optional fields: WiFi, parking, address and GPS data exist only when those features apply to the specific visit. Use the block and suffix tags above instead of conditions; an empty block simply disappears.
- HTML tags: Tags producing HTML (
${img_logo_tag},${qr_code_image_tag},${qr_code_button},${groupMembersList}) are for HTML email templates only. - Date formats: Use the full date-time tags or the ISO date/time pairs to suit the template; all render in the system timezone configured under Region settings.
- Security: Never include sensitive information like passwords in plain text messages unless specifically required.
- Testing: Always send a test message after editing a template - a mistyped tag saves without error and simply renders empty.
- Validation: Templates are checked on save. Only plain text and bare
${tag}placeholders are accepted: a template containing a condition, expression or directive is rejected with an error, as is a malformed tag (for example an unclosed${). An unknown tag name saves fine and renders empty.
Editing templates
Merge tags are used in the notification template editors:
- Invitation emails: Visitors > Settings > Emails > Invitations
- Pre-registration email: Visitors > Settings > Emails > Pre-Registration
- Host notification email: Visitors > Settings > Emails > Host Notifications
- Check-out follow-up email: Visitors > Settings > Emails > Visitor Check-out
- Invitation and movement SMS: Visitors > Settings > Instant Messaging
- Cancellation messages: Visitors > Settings > Cancellation
- User onboarding email: Users > Settings > Onboarding Email
- Password reset email: Configuration > Server Settings > Password
- WhatsApp variable mapping: Configuration > Server Settings > WhatsApp
- Per-location invitation overrides: the location’s Invite Email tab
Every editor has a Reload default action that restores the shipped template for that field - and where the button offers a language menu, loads the shipped translation instead (12 languages are bundled, including a dual-language layout for email templates that shows English alongside the translation).
