Skip to content

Vouchers

Vouchers are the rewards customers receive when they return RE-ZIP packaging at a drop point. This guide explains the voucher data model — what each field means, how different discount types are displayed, and how the fields map to what the customer actually sees on their voucher PDF.

A voucher PDF shows the following to the customer:

  1. Shop logo — fetched from the shop’s logo URL
  2. Shop name — displayed in bold next to the logo
  3. Discount value — formatted according to the voucher type (see below)
  4. Code — the voucher code, displayed in bold (e.g. “Use code SAVE50-A1B2C3”)
  5. Redirect link — if a link is set, the customer is taken to that URL to redeem the voucher on your webshop instead of just seeing the code
  6. Expiration date — formatted according to the customer’s locale, omitted if the voucher does not expire
  7. Conditions — free-text shown below the header
  8. About — the shop’s description

The fixed labels (e.g. “Use code”, “Expiration date”) and date/currency formatting are localised based on the locale field. For example, “Use code” becomes “Brug koden” in Danish, and dates render as 01/01/2027 in en_GB vs 15.3.2027 in da_DK. User-supplied fields like conditions and the shop description are displayed as-is — they are not translated automatically.

The type field determines how the discount is presented to the customer. The value and unit fields are interpreted differently depending on the type.

A discount for a specific currency amount. (Example PDF)

FieldExampleNotes
type"amount"
value5000In minor units (cents, øre, etc.). 5000 = 50.00 DKK.
unit"DKK"ISO 4217 currency code

Displayed as: DKK 50.00 (en_GB) or 50,00 kr. (da_DK)

The value is divided by 10^n where n is the currency’s standard number of decimal places (2 for DKK, EUR, GBP, etc.). This follows the same convention as Stripe and other payment APIs.

A percentage off the order total. (Example PDF)

FieldExampleNotes
type"percentage"
value15The percentage as a whole number
unit"%"

Displayed as: 15 %

A physical item or gift card. (Example PDF)

FieldExampleNotes
type"gift"
value1Quantity
unit"Tote bag"Description of the item

Displayed as: 1 Tote bag

When there is no expiration date, the expiration line is omitted from the voucher entirely (as shown in the gift example).

The conditions field is free-text displayed on the voucher. Use it to communicate restrictions or redemption instructions to the customer:

  • Minimum purchase requirements
  • Product exclusions
  • Validity periods beyond the expiry date
  • How to redeem (in-store, online, or both)

Examples:

  • "Minimum purchase of 200 DKK. Valid in-store and online."
  • "Valid on full-price items only. One use per customer."
  • "Collect in-store. While supplies last."

Conditions are not localised automatically — they are displayed exactly as you provide them. If you have a multilingual audience, we recommend writing conditions in both languages for now:

  • "Min. køb 200 DKK / Min. purchase 200 DKK"

Localisation support for conditions and other free-form fields is on our roadmap.

The link field is a URL that takes the customer directly to your webshop to redeem the voucher. When a link is present, the RE-ZIP app redirects the customer to that URL instead of only showing the code. This is the recommended approach for a seamless redemption experience — the customer taps a button and lands on your webshop with the discount ready to apply, rather than having to copy-paste a code manually.

Think of it like a magic link for email sign-in: the customer doesn’t need to know or type anything — the link itself carries all the information needed to apply the discount. Your redemption endpoint receives the request, looks up the code, applies the discount to the customer’s cart or session — saved to their account if they have one, or local storage if they don’t — and drops them straight into the shopping experience.

The link is typically unique per voucher and points to a redemption endpoint on your side, e.g.:

https://shop.example.com/redeem?code=SAVE50-A1B2C3

The link does not have to be a web URL — it can be a deep link that opens your native app directly, using a custom URL scheme or universal/app link:

myshopapp://redeem?code=SAVE50-A1B2C3
https://shop.example.com/.well-known/app-link/redeem?code=SAVE50-A1B2C3

Just like magic links, you should treat each URL as a single-use secret. Once redeemed, the code behind it is consumed and the link should not work again.

When using on-demand voucher pools, your webhook generates both the code and the link at the moment the customer earns the reward. See the Voucher integration guide for the full setup.

For static pools, the link is provided when uploading codes to a batch — each code can carry its own link.

Vouchers are localised based on a locale string. The locale affects the fixed UI labels and formatting — not user-supplied content like conditions or the shop description, which are displayed as-is.

What changes per locale:

  • Labels — “Use code” / “Brug koden” etc.
  • Expiration label — “Expiration date” / “Udløbsdato” etc.
  • Date formatting01/01/2027 (en_GB) vs 15.3.2027 (da_DK)
  • Currency formattingDKK 50.00 (en_GB) vs 25,00 € (da_DK for EUR)

Supported locales:

LocaleLanguage
da_DKDanish
de_ATGerman (Austria)
de_DEGerman (Germany)
en_GBEnglish (UK)
fr_BEFrench (Belgium)
fr_FRFrench (France)
hu_HUHungarian
nl_BEDutch (Belgium)
nl_NLDutch (Netherlands)
sq_ALAlbanian

The voucher displays the shop’s name, logo, and description. These come from the shop’s account settings and are not part of the voucher data itself. The shop’s logo is loaded from /shops/{id}/logo.

FieldTypeRequiredDescription
codestringyesThe voucher code shown to the customer
linkstringnoRedirect URL for redemption on the shop’s webshop
typestringyesDiscount type: amount, percentage, or gift
valueintegeryesDiscount value — minor units for amount, whole number for percentage, quantity for gift
unitstringyesCurrency code for amount, "%" for percentage, item description for gift
conditionsstringyesFree-text conditions displayed to the customer
expires_atstringnoISO 8601 expiry timestamp. Omit or set to null for no expiry.
  • Voucher integration — setting up on-demand voucher pools with webhook-based generation and redirect links
  • Webhooks — general webhook setup and signature verification