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.
Voucher anatomy
Section titled “Voucher anatomy”A voucher PDF shows the following to the customer:
- Shop logo — fetched from the shop’s logo URL
- Shop name — displayed in bold next to the logo
- Discount value — formatted according to the voucher type (see below)
- Code — the voucher code, displayed in bold (e.g. “Use code SAVE50-A1B2C3”)
- Redirect link — if a
linkis set, the customer is taken to that URL to redeem the voucher on your webshop instead of just seeing the code - Expiration date — formatted according to the customer’s locale, omitted if the voucher does not expire
- Conditions — free-text shown below the header
- 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.
Discount types
Section titled “Discount types”The type field determines how the discount is presented to the customer.
The value and unit fields are interpreted differently depending on the
type.
amount — fixed monetary discount
Section titled “amount — fixed monetary discount”A discount for a specific currency amount. (Example PDF)
| Field | Example | Notes |
|---|---|---|
type | "amount" | |
value | 5000 | In 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.
percentage — percentage discount
Section titled “percentage — percentage discount”A percentage off the order total. (Example PDF)
| Field | Example | Notes |
|---|---|---|
type | "percentage" | |
value | 15 | The percentage as a whole number |
unit | "%" |
Displayed as: 15 %
gift — free item
Section titled “gift — free item”A physical item or gift card. (Example PDF)
| Field | Example | Notes |
|---|---|---|
type | "gift" | |
value | 1 | Quantity |
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).
Conditions
Section titled “Conditions”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.
Redirect links
Section titled “Redirect links”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-A1B2C3The 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-A1B2C3https://shop.example.com/.well-known/app-link/redeem?code=SAVE50-A1B2C3Just 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.
Locales
Section titled “Locales”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 formatting —
01/01/2027(en_GB) vs15.3.2027(da_DK) - Currency formatting —
DKK 50.00(en_GB) vs25,00 €(da_DK for EUR)
Supported locales:
| Locale | Language |
|---|---|
da_DK | Danish |
de_AT | German (Austria) |
de_DE | German (Germany) |
en_GB | English (UK) |
fr_BE | French (Belgium) |
fr_FR | French (France) |
hu_HU | Hungarian |
nl_BE | Dutch (Belgium) |
nl_NL | Dutch (Netherlands) |
sq_AL | Albanian |
Shop information
Section titled “Shop information”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.
Field reference
Section titled “Field reference”| Field | Type | Required | Description |
|---|---|---|---|
code | string | yes | The voucher code shown to the customer |
link | string | no | Redirect URL for redemption on the shop’s webshop |
type | string | yes | Discount type: amount, percentage, or gift |
value | integer | yes | Discount value — minor units for amount, whole number for percentage, quantity for gift |
unit | string | yes | Currency code for amount, "%" for percentage, item description for gift |
conditions | string | yes | Free-text conditions displayed to the customer |
expires_at | string | no | ISO 8601 expiry timestamp. Omit or set to null for no expiry. |
Related guides
Section titled “Related guides”- Voucher integration — setting up on-demand voucher pools with webhook-based generation and redirect links
- Webhooks — general webhook setup and signature verification