Merge tags for a live waitlist ticket, in any email tool
Published September 28, 2026 · Merge tag syntax checked against each platform’s docs on September 28, 2026
A Lineup ticket is two images whose URLs end in recipient=, followed by the subscriber’s lineup_id. Your email tool writes that value in when it sends, from a field on the subscriber. This guide gives the tag for Kit, Mailchimp and Klaviyo, the pattern for any other tool, and what happens when a tag doesn’t fill in.

How the ticket knows who’s reading
Each ticket image URL ends in recipient= and a lineup_id. Lineup gives every subscriber one when they join: 10 characters, lowercase letters and digits only, random, and never derived from the email address. Your email tool stores it in a field on the subscriber, and its merge tag writes it into the URL when the email is sent. When the inbox loads the image, DynaMail draws that subscriber’s spot and friends.
Because the ID is URL-safe, the tag goes into the URL as it is, with no URL-encoding filter. The goal stays in the friends image’s URL as target, and &scheme=dark on both images switches to DynaMail’s night palette for dark emails.
Lineup’s setup page gives you this snippet with your three widget IDs and your goal filled in. Here, YOUR-SPOT-WIDGET-ID, YOUR-FRIENDS-WIDGET-ID and YOUR-LEADERBOARD-WIDGET-ID stand for them, and 5 is an example goal.
The tag for your email tool
Kit
{{ subscriber.lineup_id }}. Kit keys a custom field by its label, lowercased with underscores, and Liquid reads it as subscriber.<key>. Lineup creates the field when you paste your Kit V4 API key.
Ticket (Kit)
<table role="presentation" width="600" cellpadding="0" cellspacing="0" border="0" style="border-collapse:collapse;">
<tr>
<td width="372" style="padding:0;"><img src="https://img.dynamail.io/widgets/YOUR-SPOT-WIDGET-ID/render.png?recipient={{ subscriber.lineup_id }}" width="372" height="236" alt="Your spot on the YOUR-PRODUCT waitlist" style="display:block;border:0;" /></td>
<td width="228" style="padding:0;"><img src="https://img.dynamail.io/widgets/YOUR-FRIENDS-WIDGET-ID/render.png?recipient={{ subscriber.lineup_id }}&target=5" width="228" height="236" alt="Friends who joined with your link" style="display:block;border:0;" /></td>
</tr>
</table>Mailchimp
*|LINEUPID|*. The audience field you create with the merge tag LINEUPID. Mailchimp tags are at most 10 characters, in capitals.
Ticket (Mailchimp)
<table role="presentation" width="600" cellpadding="0" cellspacing="0" border="0" style="border-collapse:collapse;">
<tr>
<td width="372" style="padding:0;"><img src="https://img.dynamail.io/widgets/YOUR-SPOT-WIDGET-ID/render.png?recipient=*|LINEUPID|*" width="372" height="236" alt="Your spot on the YOUR-PRODUCT waitlist" style="display:block;border:0;" /></td>
<td width="228" style="padding:0;"><img src="https://img.dynamail.io/widgets/YOUR-FRIENDS-WIDGET-ID/render.png?recipient=*|LINEUPID|*&target=5" width="228" height="236" alt="Friends who joined with your link" style="display:block;border:0;" /></td>
</tr>
</table>Klaviyo
{{ person|lookup:'lineup_id' }}. A custom profile property named lineup_id. Klaviyo’s lookup form works for any property name; {{ person.lineup_id }} works too, because the name has no spaces or special characters.
Ticket (Klaviyo)
<table role="presentation" width="600" cellpadding="0" cellspacing="0" border="0" style="border-collapse:collapse;">
<tr>
<td width="372" style="padding:0;"><img src="https://img.dynamail.io/widgets/YOUR-SPOT-WIDGET-ID/render.png?recipient={{ person|lookup:'lineup_id' }}" width="372" height="236" alt="Your spot on the YOUR-PRODUCT waitlist" style="display:block;border:0;" /></td>
<td width="228" style="padding:0;"><img src="https://img.dynamail.io/widgets/YOUR-FRIENDS-WIDGET-ID/render.png?recipient={{ person|lookup:'lineup_id' }}&target=5" width="228" height="236" alt="Friends who joined with your link" style="display:block;border:0;" /></td>
</tr>
</table>Any other email tool
Any tool that can store a text field on each contact and print it inside an HTML block works. Import lineup_id into that field with Lineup’s CSV join, then replace {{lineup_id}} in the snippet with the tool’s own tag for the field. Paste the ticket into an HTML or code block, not a text block, so the editor doesn’t change the braces or quotes in the tag.
Ticket (placeholder tag)
<table role="presentation" width="600" cellpadding="0" cellspacing="0" border="0" style="border-collapse:collapse;">
<tr>
<td width="372" style="padding:0;"><img src="https://img.dynamail.io/widgets/YOUR-SPOT-WIDGET-ID/render.png?recipient={{lineup_id}}" width="372" height="236" alt="Your spot on the YOUR-PRODUCT waitlist" style="display:block;border:0;" /></td>
<td width="228" style="padding:0;"><img src="https://img.dynamail.io/widgets/YOUR-FRIENDS-WIDGET-ID/render.png?recipient={{lineup_id}}&target=5" width="228" height="236" alt="Friends who joined with your link" style="display:block;border:0;" /></td>
</tr>
</table>When a tag doesn’t fill in
A merge tag can fail: a test send that doesn’t fill contact tags, a subscriber whose field is empty, a typo in the field name, an editor that escaped the braces. The image URL then carries the tag itself, an empty value or an ID Lineup doesn’t know.
Lineup’s widgets use the “Readers without a value” setting, so in every one of those cases the ticket is drawn without a number, rather than with the widget’s shared number or someone else’s spot. You can change that on each widget’s Automation card, to show a short text instead, such as “Open your ticket”.
Check a tag before you send
- Found: the value is a lineup_id on this waitlist, and the check shows that subscriber’s spot and friends.
- Not found: a valid-looking ID that isn’t on this waitlist, often one from another waitlist or a deleted test signup.
- Unfilled: the value still contains tag syntax such as braces, pipes, asterisks or spaces, so the email tool didn’t replace it.
- Invalid: something that can’t be a recipient at all.
In Lineup, Check the merge tag takes a value, such as a lineup_id from your subscriber list, and shows the images that reader will get. Paste an unfilled tag there too, to see the ticket a reader gets when the tag fails: it has no number.
Sources
The merge tag syntax above comes from these pages, read on September 28, 2026. Apps rename menus often; if a step no longer matches what you see, the source page is the place to check.
- Kit developers: Create a custom field (opens in a new tab)
- Kit: Basic email personalization with Liquid + FAQs (opens in a new tab)
- Mailchimp: Getting started with merge tags (opens in a new tab)
- Mailchimp: All the merge tags cheat sheet (opens in a new tab)
- Mailchimp developers: Add merge field (opens in a new tab)
- Klaviyo: Message personalization reference (opens in a new tab)
Frequently asked questions
What is lineup_id?
A random 10-character ID that Lineup gives each subscriber when they join. It uses only lowercase letters and digits, so it needs no URL encoding, and it never contains the email address.
Why not use the email address as the recipient?
An email address in an image URL travels through image proxies and server logs. A random ID keeps the ticket personal without putting personal data in the URL.
What happens if the merge tag doesn’t fill in?
The image URL then carries the tag itself, an empty value or an unknown ID. Lineup’s widgets use the “Readers without a value” setting, so the ticket shows no number rather than the widget’s shared one or someone else’s.
Can I use the ticket in a tool that isn’t listed?
Yes, if the tool can store a text field on each contact and print it inside an HTML block. Import lineup_id with Lineup’s CSV join, then use the tool’s own tag for that field after recipient=.