Skip to content

What Are Variables

A variable is an element you mark as dynamic. Instead of a fixed value, its content is supplied at render time — from the Generate dialog, a CSV file, or an API request. A single template then produces personalized images at any scale.

Zandovi variables work at the element level, not inside text. When you mark a text element as a variable, its entire text content is replaced by the value you supply. The same applies to image, QR code, and barcode variables — the whole element’s value is swapped.

There is no inline {{...}} interpolation. Typing a mix of static text and a token — like Hello, {{first_name}}! — does not work: the {{first_name}} is not substituted, and the literal characters render as-is. To produce “Hello, Sarah!” you either:

  • make the whole text element the variable and pass the full value Hello, Sarah!, or
  • split it into two elements — a static Hello, next to a first_name variable.

The {{variable_name}} you see in the app — the element’s header badge, and the text drawn on the canvas when a variable has no default — is just how Zandovi labels a variable element. It is not something you type into the text content.

Element typeVariable typeWhat it controls
TextTextThe string content
Image VariableImageThe image URL
QR CodeQRThe data / URL encoded in the QR
BarcodeBarcodeThe data encoded in the barcode

You bind an element to a variable through the Variable tab in the Properties panel, or by toggling Use as variable in the Design tab. See Creating a Variable.

Without variables, a template is a static image — everyone gets the same output. With variables, a single template produces personalized images at any scale:

  • Coupons — unique discount codes per customer.
  • Gift cards — recipient name, balance, expiry date.
  • Certificates — awardee name, course title, date.
  • Event tickets — seat number, attendee name, QR check-in code.
  • Loyalty cards — member ID barcode, points balance.

Variables appear in the Generate dialog, where you can fill them in manually for single renders. For bulk rendering, you supply values in a CSV file. For programmatic rendering, you pass them in the API request body. See Generating & Exporting.