Rewardly Docs
Guides

Branding the redemption page

Make reward emails and the redemption experience yours.

Recipients should recognize you, not the platform. Three fields control what they see, on your account:

FieldWhere it shows
senderNameEmail sender line and "sent you a reward" heading
logoUrlEmail header
brandColorButtons and accents on the redemption page

Read your current branding

curl https://paybilt-rewards-api.fly.dev/v1/account \
  -H "Authorization: Bearer $REWARDLY_KEY"

Update it

curl -X PATCH https://paybilt-rewards-api.fly.dev/v1/account/branding \
  -H "Authorization: Bearer $REWARDLY_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "senderName": "Acme Loyalty",
    "logoUrl": "https://acme.com/logo.png",
    "brandColor": "#635BFF"
  }'

Only the fields you include are changed. brandColor must be a 6-digit hex value; pass null for logoUrl or senderName to clear them.

Changes apply to every redemption page immediately — including links already in recipients' inboxes — and to emails sent from then on.

Customize merchant emails

Owners and admins can open Settings → Email templates to edit the reward invite and cards-ready messages. Members can inspect the source, variables, and rendered preview, but cannot save or reset templates.

The studio stores preview data separately from delivery data. Preview values only control the sample shown in the editor. Every delivered email uses the current merchant, reward, recipient, and issued-card records loaded by the worker.

Supported variables

Both templates support:

  • {{recipient.firstName}}
  • {{merchant.name}}
  • {{merchant.senderName}}
  • {{merchant.logoUrl}}
  • {{merchant.brandColor}}
  • {{reward.type}}
  • {{reward.redemptionUrl}}

Reward invite templates also support:

  • {{reward.amount}}
  • {{reward.message}}
  • {{reward.expirationDate}}

Cards-ready templates also support:

  • {{reward.remainingAmount}}
  • {{reward.isPartial}}
  • {{cards.count}}
  • {{cards.items}}, an iterable card list

Inside the cards loop, each item exposes {{name}}, {{brandName}}, {{amount}}, {{currency}}, and {{imageUrl}}. Those item variables are not valid outside the loop.

Exact block syntax

Variables are HTML-escaped. Only if and each blocks are accepted:

{{#if reward.message}}
  <blockquote>{{reward.message}}</blockquote>
{{else}}
  <p>A reward is waiting for you.</p>
{{/if}}
{{#each cards.items}}
  <p>
    {{brandName}} — {{name}} — {{amount}} {{currency}}
  </p>
{{/each}}

Blocks take exactly one variable. Triple braces, partials, custom helpers, subexpressions, data variables such as @index, prototype access, and unknown variables are rejected. Card item fields must use their short names inside the cards.items loop, as shown above.

Security restrictions

Templates are compiled on the API and again immediately before delivery. Rewardli rejects scripts, forms and form controls, frames, embedded objects, SVG, audio/video, event-handler attributes, unsupported HTML tags or attributes, CSS imports, external fonts, unsafe CSS expressions, and javascript:, data:, protocol-relative, or plain-HTTP URLs. Links and images must use absolute HTTPS URLs. Subjects must be plain text on one line and no longer than 200 characters. Source HTML is limited to 64 KB and rendered HTML to 100 KB.

The preview uses the same renderer and sanitizer as delivery, then displays the result in a scriptless, navigation-restricted iframe with a restrictive Content Security Policy. Rewardli appends its compliance footer after sanitization, so template source cannot remove or replace it.

If a saved custom template cannot render during delivery, the worker records the failure and sends the canonical Rewardli template instead.

Reset to the Rewardli default

Reset to default deletes the merchant override for the selected email. The canonical Rewardli source and preview samples take effect immediately; a later edit creates revision 1 of a new override. Saves and resets use revision checks, so the studio asks you to reload instead of overwriting another administrator's newer changes.

Per-reward personality

Branding is account-wide, but each reward carries its own message, shown prominently on the intro screen. Use it for the personal touch:

{ "message": "Casey, thanks for a great first year on the team!" }

On this page