Skip to content

Postmark

Transactional email. A Piksio image goes into Postmark as an ordinary image link. The platform fills in each recipient’s values, and Piksio renders their version when the email is opened.

Postmark writes merge tags like {{first_name}}.

Postmark doesn’t URL-encode values inside links, so keep personalized fields free of & and # (they can cut the link short). If you build the email in code, use the Code output instead: it encodes every value for you.

Paste the HTML into your Postmark template and send each value in the TemplateModel.

Formats offered: HTML, Code, Image URL. The default for Postmark is HTML.

For a design with first_name and company_name, the HTML looks like this:

<img src="https://app.piksio.com/i/YOUR_IMAGE_ID?first_name={{first_name}}&company_name={{company_name}}" width="600" alt="Your personalized image" style="display:block;max-width:100%;height:auto;border:0" />

Building the email in code? The Code output:

// One Piksio image link per recipient. URLSearchParams encodes each value,
// so names like "Smith & Co" are safe. Empty values show the fallback.
function piksioImageUrl(recipient) {
const values = {
first_name: recipient.first_name,
company_name: recipient.company_name,
};
const params = new URLSearchParams();
for (const [key, value] of Object.entries(values)) {
if (value !== undefined && value !== null && value !== '') params.set(key, String(value));
}
const query = params.toString();
return `https://app.piksio.com/i/YOUR_IMAGE_ID${query ? '?' + query : ''}`;
}
// Put it in the HtmlBody you send, or pass the link in your TemplateModel.
const imageHtml = `<img src="${piksioImageUrl(recipient).replace(/&/g, '&amp;')}" width="600" alt="Your personalized image" style="display:block;max-width:100%;height:auto;border:0" />`;
  1. In Use in email, use Test the link with sample values, and again with unfilled tags. Both are free.
  2. Preview one real recipient in Postmark to confirm it fills in the fields.
  3. See Fallbacks and blanks for what a recipient with missing data sees.

Checked against Postmark’s own documentation on 2026-10-07: