Variables let each customer see their own data on the loyalty card: their name, points, tier or birthday. You write them between double braces, like {{ firstName }}, in the Label or Value of any field on the card front in Customize → Loyalty card. Add a format after a pipe (|) to change how the data looks, for example {{ birthdate | date:'dd/MM/yyyy' }}. This guide lists every variable and format, with examples you can copy. To choose which fields appear on the card, see design your loyalty card.

Where to write variables

1

Open the card front

Go to Customize → Loyalty card, choose Apple Wallet store card or Google Wallet loyalty card, and make sure the view shows Card front.

Loyalty card editor with the Card front fields area highlighted on the Apple Wallet preview
The highlighted dots on the preview open each editable area
2

Open the fields

Click the highlighted area over the texts of the card to open Card front fields. Click any field to edit it.

Card front fields dialog with the header field and the main fields of an Apple Wallet card
Each zone of the card lists its fields
3

Write the label and the value

Type text, variables or both in Label and Value. Click the { } icon at the end of each box to pick a variable from a list instead of typing it. For dates and numbers, the list also offers ready-made formats.

Field dialog with a value that uses the default and titlecase formats
This value shows the first name with a capital letter, or "Customer" when the name is missing
Variable list opened from the { } button, with each variable and a sample value
Dates and numbers open a submenu of ready-made formats
4

Save

Click Save in the field, then Save in Card front fields. Nothing is stored yet: click Save in the save bar at the top of the page to publish the changes. Installed cards update a few minutes later.

The preview in the admin uses sample data (Ada Lovelace, 1250 points, and your first tier or the tier you're editing), so you can check the result before saving.

How a variable is written

A variable goes between double braces. Spaces inside the braces don't matter, so {{firstName}} and {{ firstName }} are the same.

{{ variable }}
{{ variable | format }}
{{ variable | format:'text' }}
{{ variable | format:'text':'other text' }}
{{ variable | first format | second format }}
  • Formats come after a pipe (|). You can chain several, and they apply from left to right.
  • Values for a format go after a colon (:), one colon per value.
  • Texts go in single or double quotes: default:'Customer'. Numbers don't need quotes: slice:0:12.
  • Another variable can be a value without quotes: default:email shows the email when the first variable is empty.
  • Mix freely text and variables in the same box: Hi {{ firstName }}!
  • Variable names are case-sensitive: firstName works, firstname doesn't.
  • Write each variable on a single line.

If a variable or format can't be read, the card shows the text exactly as you typed it, braces included. The admin catches these mistakes before you save (see error messages).

Variables you can use on the card front

These variables work in every label and value on the card front and in the Apple Wallet pass title. The In the { } list column shows the name in the variable picker. A few program texts aren't in the list, but they work when you type them.

Variable In the { } list Example Notes
firstName Customer first name Ada Can be empty
lastName Customer last name Lovelace Can be empty
name Customer full name Ada Lovelace First and last name together. Can be empty
email Customer email ada@example.com
phone Customer phone +34600000000 Can be empty
birthdate Customer birthday 1990-05-14 A date. Can be empty
balance Customer balance 1250 A number
balanceName Not in the list, type it Points Your balance name in plural
singularBalanceName Not in the list, type it Point Your balance name in singular
tierStatus Tier status Gold Empty for customers without a tier
tierPoints Tier points 3400 A number: the points that count toward the tier. 0 for customers without a tier
tierBalanceName Not in the list, type it Points Only for programs with tiers
singularTierBalanceName Not in the list, type it Point Only for programs with tiers
memberSince Member since 2024-02-03 A date
externalCustomerId Customer ID 7012345678901 The customer's ID in Shopify or your system
id JeriCommerce customer ID 0b5e7c2a-...
customerId Customer ID (JeriCommerce) 0b5e7c2a-... Same as id

The identifiers are under More variables in the list. Tier status and Tier points only appear in the list when your program has tiers.

Links can't go on the card front. Variables such as referralLink, inviteFriendLink or the customer page links (linkCustomerAppRewards and similar) only work on the back of the card and in buttons. The same applies to written web addresses.

Formats (pipes)

Format Values What it does Example Result
default 1 Shows the value you give when the variable is empty {{ firstName | default:'Customer' }} Ada, or Customer
if 1 or 2 Shows the first value when the variable has data, the second (or nothing) when it's empty {{ tierStatus | if:'VIP member':'Member' }} VIP member
uppercase 0 Text in capitals {{ firstName | uppercase }} ADA
lowercase 0 Text in lowercase {{ email | lowercase }} ada@example.com
titlecase 0 First letter of each word in capitals {{ name | titlecase }} Ada Lovelace
slice 1 or 2 Keeps part of a text, from a start position to an end position (counting from 0) {{ name | slice:0:3 }} Ada
number 0 or 1 Adds the thousands separator of the card's language. A value like '1.0-2' sets the decimals {{ balance | number }} 1,250
plural 2 Shows the first value when the number is 1, the second for any other number, including 0 {{ balance | plural:'point':'points' }} points
date 1 Writes a date with the pattern you give {{ memberSince | date:'dd/MM/yyyy' }} 03/02/2024

Formats only work on the type of data they expect. date needs a date (birthdate, memberSince), number and plural need a number (balance, tierPoints), and uppercase, lowercase, titlecase and slice need text. default and if work with anything. The admin warns you when a format doesn't fit the variable.

0 is not empty. A customer with 0 points shows 0, not the default value.

Date patterns

date accepts four ready-made styles that adapt to the card's language, or your own pattern.

Pattern English Spanish
shortDate 2/3/24 3/2/24
mediumDate Feb 3, 2024 3 feb 2024
longDate February 3, 2024 3 de febrero de 2024
fullDate Saturday, February 3, 2024 sábado, 3 de febrero de 2024
dd/MM/yyyy 03/02/2024 03/02/2024
MM/dd/yyyy 02/03/2024 02/03/2024
dd.MM.yyyy 03.02.2024 03.02.2024
yyyy-MM-dd 2024-02-03 2024-02-03
dd/MM 03/02 03/02
d MMMM 3 February 3 febrero

In your own patterns, d is the day, dd the day with two digits, MM the month in numbers, MMM the short month name, MMMM the full month name and yyyy the year. Use lowercase yyyy and dd: uppercase YYYY or DD don't give the date you expect, and the card then shows the date as it is stored, for example 1990-05-14 for birthdate.

Numbers

number uses the separator of the card's language: 1,250 in English, 1.250 in German. Spanish and Italian only add it from five digits (12.500). Without a value it shows up to three decimals. Your balance is a whole number, so {{ balance | number }} is usually enough. To force decimals, add a value with the pattern '{minimum digits}.{minimum decimals}-{maximum decimals}', for example number:'1.0-0' for no decimals.

Recipes

Copy these into Value or Label and adapt the texts.

What you want Write
First name, or a fallback when it's missing {{ firstName | default:'Customer' | titlecase }}
Points label that changes between singular and plural {{ balance | plural:singularBalanceName:balanceName }}
Points with a thousands separator {{ balance | number }}
Tier points with their name {{ tierPoints | number }} {{ tierPoints | plural:singularTierBalanceName:tierBalanceName }}
Birthday as day and month {{ birthdate | date:'d MMMM' }}
Member since, written out Member since {{ memberSince | date:'mediumDate' }}
A long name cut to fit {{ name | slice:0:18 }}
The tier, or the email when there's no tier {{ tierStatus | default:email }}
A label that depends on the tier {{ tierStatus | if:'Tier Status':'Email' }}
A greeting in capitals HI {{ firstName | default:'there' | uppercase }}

Default content of each field

Every field starts with built-in content, and the built-in labels are translated for you. Restore default puts them back.

Wallet Field Default label Default value
Apple Top right field {{ balance | plural:singularBalanceName:balanceName }} {{ balance }}
Apple First field under the banner Member name {{ name }}
Apple Second field under the banner {{ tierStatus | if:'Tier Status':'Email' }} (Tier Status, or Email without a tier) {{ tierStatus | default:email }}
Apple Third and Fourth field under the banner Empty Empty, hidden until you set them up
Apple Poster Poster footer Member Since {{ memberSince | date:'dd/MM/yyyy' }}
Google First row, left field {{ balance | plural:singularBalanceName:balanceName }} {{ balance }}
Google First row, right field Tier Status {{ tierStatus }}
Google Second row, left field Member name {{ name }}
Google Second row, right field Member Since {{ memberSince | date:'dd/MM/yyyy' }}

Rules on the card front

  • An empty value hides the field. When the Value turns out empty for a customer, for example {{ phone }} for someone without a phone, the field doesn't appear on their card. The admin warns with "May be left off the pass for customers without this data. Add a default to always show it." Add default to always show something.
  • 255 characters at most per label or value. The pass title allows 80, on Apple Wallet and Google Wallet.
  • No links. Links and web addresses are rejected on the front. Put them in a section on the back or in a button.
  • Apple Wallet row. The four fields under the banner share one row from the left. Hidden or empty fields leave no gap. Long texts shrink, then get cut, so keep values short.
  • Google Wallet rows. Each row has two fields. If one is empty, the other starts the row, and an empty row is left out.
  • Tiers. A tier design can change any field, or show a field the default design hides. See designs for tiers.
  • Updates. Installed cards get a new design about five minutes after you save. When a customer's data changes, like their points, tier points or tier, their card updates within seconds.

Translations

To translate labels and values, choose the language with the language button below the preview, then open Card front fields. The dialog shows the language you're translating. Only your own texts change between languages. Keep variable names, format names and patterns exactly as they are. Translate only the texts in quotes, for example default:'Cliente'. If you show tier points, also keep the tier points variable in your default text: when it only appears in a translation, the card doesn't update when the customer's tier points change.

Dates and numbers follow the language of each text. {{ memberSince | date:'longDate' }} shows "February 3, 2024" in English and "3 de febrero de 2024" in Spanish. Google Wallet does this for every language. On Apple Wallet, a text is only formatted in another language once you add a translation for it, even if the translation is the same text.

The values of the first row on Google Wallet (First row, left field and First row, right field) show the same text in every language, written in your default language. See translate wallet sections.

Other places that use variables

The back of the card, button links and automatic push messages also accept variables between double braces, and they resolve the same formats. There, the admin doesn't check formats as you type, so test the result on a card. Link variables (referralLink, inviteFriendLink, linkCustomerAppRewards, linkCustomerAppProfile and the other customer page links) are allowed in back sections, buttons and automatic push messages. The text of campaign push notifications only accepts referralLink and inviteFriendLink. The Google Wallet title is plain text and doesn't use variables.

Error messages

The admin checks each label and value while you type and shows the problem under the box.

Field dialog showing an error because firstname is written with a lowercase n
Variable names are case-sensitive, and the admin suggests the right one
Message What to do
Close the variable with its two closing braces. Add the missing }}.
Check "...": a variable, then its formats, with texts in quotes. Write the variable first, then | and the format. Put texts in quotes.
"x" is not a variable of this field. Did you mean "y"? Fix the spelling or the capital letters, or pick the variable from the { } list.
"x" is not a variable of this field. The variable doesn't exist on the card front. Check the variable table.
"x" is not a format. Use one of the nine formats.
"x" only applies to dates / numbers / texts. Use the format with a variable of the right type.
"x" needs 2 values. / "x" needs 1 value. Add the missing values after colons, for example plural:'point':'points'.
"x" takes up to 2 values. / "x" takes up to 1 value. / "x" takes no values. Remove the extra values.
Put "x" in quotes, or use a variable. Add quotes around the text, or write a valid variable name.
The front of the pass shows content only. Add links in a section on the back or in a button. Remove the link or the link variable.