Promotion and Voucher Management
This guide covers creating and managing promotion codes and vouchers from the admin interface.
Overview
Promotions and vouchers allow you to offer discounts and incentives to customers:
- Promotions: Discount codes customers can apply
- Vouchers: Gift cards and store credit with balances
Promotions
Promotions are discount codes customers can apply to their bookings.
Creating Promotions
Step 1: Basic Information
- Promotion Code: Unique code (e.g., "SUMMER25")
- Name: Display name
- Description: What the promotion offers
- Promotion Type: Percentage or fixed amount
Step 2: Discount Configuration
- Discount Value: Percentage or amount
- Maximum Discount (for percentages): Cap on discount
- Minimum Spend: Required minimum booking amount
Step 3: Scope and Availability
- Scope Type: Site-wide or product-specific
- Scope ID: Which site or product
- Start Date: When promotion becomes active
- Expiration Date: When promotion expires (optional)
Step 4: Usage Limits
- Total Usage Limit: Maximum times code can be used
- Per Customer Limit: Maximum uses per customer
- Stackable: Can combine with other promotions
Step 5: Visibility
- Active: Enable/disable promotion
- Public: Visible to customers or admin-only
Promotion Types
Percentage Discount
Discount as a percentage of booking total.
Configuration:
- Type: Percentage
- Discount Value: Percentage (1-100)
- Maximum Discount: Optional cap
Example:
Code: SUMMER25
Type: Percentage
Value: 25%
Max Discount: €100
Minimum Spend: €50
Booking: €200
Discount: €50 (25% of €200, under €100 cap)
Final: €150
Fixed Amount Discount
Fixed discount amount regardless of booking total.
Configuration:
- Type: Fixed Amount
- Discount Value: Amount (e.g., 10.00)
- Minimum Spend: Optional requirement
Example:
Code: SAVE10
Type: Fixed Amount
Value: €10
Minimum Spend: €30
Booking: €50
Discount: €10
Final: €40
Promotion Scope
Site-Wide Promotions:
- Apply to all products at a site
- Most common type
- Easier to manage
Product-Specific Promotions:
- Apply to specific products only
- Targeted discounts
- More precise control
Promotion Rules
Usage Limits
Total Usage Limit:
- Maximum total uses across all customers
- Example: "Use code 500 times total"
- Prevents overuse
Per Customer Limit:
- Maximum uses per individual customer
- Example: "Once per customer"
- Prevents abuse
Minimum Spend
Requirement:
- Booking must meet minimum amount
- Discount only applies if threshold met
- Example: "€50 minimum for 10% off"
Maximum Discount Cap
For Percentage Discounts:
- Limits maximum discount amount
- Prevents excessive discounts
- Example: "25% off, max €100 discount"
Stacking Rules
Stackable Promotions:
- Can be combined with other stackable codes
- Multiple discounts applied
- Total discount may be limited
Non-Stackable Promotions:
- Cannot combine with other codes
- Only one promotion per booking
- System prevents stacking
Promotion Priority
When multiple promotions are stackable:
- Applied in priority order
- Higher priority applied first
- Lower priority applied after
Priority Configuration:
- Set priority when creating
- Higher number = higher priority
- Used for stacking order
Managing Promotions
Editing Promotions
What You Can Edit:
- Name and description
- Discount value
- Usage limits
- Expiration date
- Active status
Editing Limitations:
- Code cannot be changed (create new instead)
- Historical usage preserved
- Active status can toggle
Deactivating Promotions
When to Deactivate:
- Promotion period ended
- Usage limit reached
- Promotion no longer valid
- Testing completed
Effects:
- Code no longer works
- Existing uses preserved
- Can reactivate if needed
Promotion Analytics
Tracking Metrics:
- Total uses
- Total discount given
- Average discount per use
- Revenue impact
- Popular codes
Viewing Analytics:
- Promotion details page
- Usage statistics
- Performance metrics
- Trend analysis
Vouchers
Vouchers are stored-value instruments like gift cards or store credit.
Voucher Types
Gift Cards
Prepaid vouchers customers purchase or receive.
Characteristics:
- Fixed initial value
- Balance tracked
- Can be used multiple times
- Balance persists until used
Store Credit
Credit issued from refunds or promotions.
Characteristics:
- Issued automatically or manually
- Balance from refunds
- Can be used for bookings
- Expires (if configured)
Creating Vouchers
Step 1: Basic Information
- Voucher Code: Unique code (auto-generated if not provided)
- Voucher Type: Gift card or store credit
- Original Value: Initial balance
- Site (optional): Site-specific voucher
Step 2: Usage Configuration
- Usage Limit: Single-use or multi-use
- Expiration Date (optional): When voucher expires
- Customer (optional): Assign to specific customer
Step 3: Additional Settings
- Active Status: Enable/disable
- Notes: Internal notes
- Metadata: Additional information
Bulk Voucher Creation
Create multiple vouchers at once for campaigns.
Bulk Creation:
- Specify quantity
- Set voucher properties
- Generate codes automatically
- Export code list
Use Cases:
- Marketing campaigns
- Gift card sales
- Loyalty rewards
- Bulk distribution
Bulk Options:
- Number of vouchers
- Value per voucher
- Voucher type
- Code prefix
- Expiration date
CSV Export/Import
For large-scale promotion and voucher management, the system supports CSV export and import functionality.
Exporting Promotions
Export promotions to CSV or JSON format for reporting, backup, or external analysis.
Export Features:
- Filter by status (active/inactive)
- Filter by type (percentage, fixed_amount, etc.)
- Filter by scope (site, product)
- Filter by date range
- Paginated results (max 1000 per request)
Export Columns:
| Column | Description |
|---|---|
id | Unique promotion ID |
code | Promotion code |
name | Display name |
promotionType | Type (percentage, fixed_amount, etc.) |
scopeType | Scope (site, product, booking) |
discountValue | Discount amount or percentage |
startsAt | Start date (ISO 8601) |
expiresAt | Expiration date |
usageLimitTotal | Total usage limit |
currentUsageCount | Current usage count |
isActive | Active status |
isPublic | Public visibility |
Use Cases:
- Generate campaign performance reports
- Backup promotion data
- Audit promotion history
- Share data with external systems
Importing Promotions
Import promotions from CSV for bulk creation.
Import Process:
- Prepare CSV file with required columns
- Preview import to validate data without persisting
- Review errors and fix data issues
- Execute import to create promotions
Required CSV Columns:
code- Unique promotion code (3-50 characters)name- Display namepromotionType- One of:percentage,fixed_amount,buy_x_get_y,bundlescopeType- One of:site,product,bookingisStackable- Boolean (true/false)priority- Number (0-100)startsAt- ISO 8601 dateisActive- BooleanisPublic- Boolean
Optional CSV Columns:
description- Promotion descriptiondiscountValue- Discount amount (required for percentage/fixed_amount)minSpendAmount- Minimum spend requirementmaxDiscountAmount- Maximum discount capusageLimitTotal- Total usage limitusageLimitPerCustomer- Per-customer limitexpiresAt- Expiration date (ISO 8601)scopeId- Scope target IDsiteId- Site restriction
Example CSV:
code,name,promotionType,scopeType,discountValue,isStackable,priority,startsAt,isActive,isPublic
SUMMER25,Summer 25% Off,percentage,site,25,true,10,2025-06-01T00:00:00Z,true,true
SAVE10,Save €10,fixed_amount,site,10,true,5,2025-01-01T00:00:00Z,true,true
Validation Rules:
- Code must be unique within tenant
- Code must be 3-50 characters
- Discount value: 1-100 for percentage, > 0 for fixed_amount
- Priority must be 0-100
expiresAtmust be afterstartsAtif both provided
Import Limits:
- Maximum 1000 rows per import
- Maximum 10MB file size
Exporting Vouchers
Export vouchers to CSV or JSON format.
Export Features:
- Filter by status (active, redeemed)
- Filter by type (single_use, multi_use, gift_card, loyalty_credit)
- Filter by customer (email or ID)
- Filter by date range (issued after/before)
- Search by code
- Paginated results (max 1000 per request)
Export Columns:
| Column | Description |
|---|---|
id | Unique voucher ID |
code | Voucher code |
voucherType | Type (single_use, gift_card, etc.) |
originalValue | Initial value |
currentBalance | Remaining balance |
usageLimit | Usage limit |
currentUsageCount | Current usage count |
customerEmail | Associated customer email |
isActive | Active status |
isRedeemed | Fully redeemed status |
issuedAt | Issue date |
expiresAt | Expiration date |
Use Cases:
- Gift card inventory reports
- Customer voucher statements
- Balance reconciliation
- Redemption analysis
Importing Vouchers
Import vouchers from CSV for bulk creation.
Import Process:
- Prepare CSV file with required columns
- Preview import to validate and see auto-generated codes
- Review errors and fix data issues
- Execute import to create vouchers
Required CSV Columns:
voucherType- One of:single_use,multi_use,gift_card,loyalty_creditoriginalValue- Initial balance (minimum 0.01)
Optional CSV Columns:
code- Voucher code (auto-generated if empty)usageLimit- Usage limit (defaults to 1 for single_use)customerEmail- Customer emailcustomerId- Customer IDexpiresAt- Expiration date (ISO 8601, must be future)promotionId- Link to promotionsiteId- Site restrictionredemptionNotes- Internal notes
Example CSV:
voucherType,originalValue,customerEmail,expiresAt
gift_card,50,customer@example.com,2026-12-31T23:59:59Z
gift_card,100,,2026-12-31T23:59:59Z
loyalty_credit,25,vip@example.com,
Auto-Generated Codes:
When code is empty, the system generates unique codes:
- Gift cards:
GC-XXXXXX - Loyalty credit:
LC-XXXXXX - Single use:
SU-XXXXXX - Multi use:
MU-XXXXXX
Validation Rules:
- Code must be unique within tenant (if provided)
- Original value must be >= 0.01
- Customer email must be valid format (if provided)
- Expiration date must be in future (if provided)
Import Limits:
- Maximum 1000 rows per import
- Maximum 10MB file size
Best Practices for CSV Import/Export
Before Importing:
- Always use Preview first to validate data
- Review error summary for common issues
- Fix CSV and re-upload if errors found
- Check for duplicate codes in your file
Handling Import Errors:
- Missing required field: Add the missing column/value
- Invalid enum value: Use valid values from documentation
- Duplicate code in batch: Remove duplicate rows
- Code already exists: Use unique codes or remove duplicates
Export Best Practices:
- Use filters to export relevant subset
- Export regularly for backup purposes
- Use JSON format for programmatic processing
- Use CSV format for spreadsheet analysis
Managing Vouchers
Viewing Vouchers
Voucher List:
- All vouchers with filters
- Search by code
- Filter by status, type, site
- View balances
Voucher Details:
- Current balance
- Usage history
- Issuance details
- Redemption records
Adjusting Voucher Balance
Balance Adjustments:
- Add credit manually
- Refund to voucher
- Correct errors
- Issue credits
Adjustment Process:
- Open voucher details
- Click "Adjust Balance"
- Enter adjustment amount
- Add reason/notes
- Process adjustment
Adjustment Types:
- Credit: Add to balance
- Debit: Subtract from balance
- Refund: Restore from booking refund
- Correction: Fix errors
Voucher Status
Status Types:
- Active: Can be used
- Redeemed: Fully used
- Expired: Past expiration date
- Inactive: Disabled
Voucher Usage History
Tracking:
- All uses recorded
- Booking references
- Amounts used
- Remaining balance
- Timestamps
Viewing History:
- Voucher details page
- Chronological list
- Filter by date
- Export history
Promotion Stacking
Understanding Stacking
Stacking allows multiple promotions to be combined.
Stackable Promotions:
- Can be used together
- Discounts compound
- System validates compatibility
- Total discount calculated
Non-Stackable Promotions:
- Cannot combine
- Only one code works
- Highest priority applies
- System prevents stacking
Configuring Stacking
Making Promotions Stackable:
- Set "Stackable" flag when creating
- Define stacking priority
- Configure stacking rules
- Test combinations
Stacking Priority:
- Higher priority applied first
- Lower priority applied after
- Order affects final price
- Total discount may be limited
Stacking Examples
Example 1: Stackable Promotions
Promotion 1: 20% off (stackable)
Promotion 2: €10 off (stackable)
Booking: €100
After Promotion 1: €80 (20% off)
After Promotion 2: €70 (€10 off)
Total Savings: €30
Example 2: Non-Stackable
Promotion 1: 20% off (not stackable)
Promotion 2: €10 off (not stackable)
Booking: €100
Best promotion: Promotion 1 (saves €20 vs €10)
Final: €80
Promotion and Voucher Best Practices
Promotion Strategy
Planning:
- Set clear objectives
- Define target audience
- Plan timing
- Budget for discounts
Monitoring:
- Track usage rates
- Monitor revenue impact
- Measure effectiveness
- Adjust as needed
Voucher Management
Issuance:
- Document issuance reason
- Track voucher recipients
- Secure code generation
- Maintain audit trail
Redemption:
- Monitor redemption rates
- Track usage patterns
- Identify popular vouchers
- Optimize campaigns
Security
Code Security:
- Use secure code generation
- Prevent code guessing
- Monitor for abuse
- Implement usage limits
Balance Security:
- Protect voucher balances
- Audit balance changes
- Prevent unauthorized adjustments
- Maintain audit logs
Common Scenarios
Scenario 1: Seasonal Promotion
Goal: Summer promotion for all products
Setup:
- Create percentage discount (25% off)
- Set scope to site-wide
- Set date range (June-August)
- Set usage limits
- Make stackable
- Publish code
Scenario 2: Product Launch Promotion
Goal: Discount for new product
Setup:
- Create fixed amount discount (€20 off)
- Set scope to specific product
- Set minimum spend requirement
- Set per-customer limit (once per customer)
- Limited time offer
Scenario 3: Gift Card Campaign
Goal: Sell gift cards for holidays
Setup:
- Create bulk vouchers
- Set voucher value (€50, €100, €200)
- Generate unique codes
- Set expiration (optional)
- Distribute codes
- Track redemptions
Scenario 4: Loyalty Rewards
Goal: Reward repeat customers
Setup:
- Issue vouchers as rewards
- Credit to customer accounts
- Set usage rules
- Track redemption
- Measure program success
Troubleshooting
Promotion Not Working
Check:
- Promotion is active
- Not expired
- Usage limits not reached
- Minimum spend met
- Scope matches booking
Solutions:
- Verify promotion status
- Check expiration dates
- Review usage limits
- Confirm scope settings
Voucher Issues
Common Issues:
- Balance insufficient
- Voucher expired
- Code not found
- Already fully used
Solutions:
- Check voucher balance
- Verify expiration
- Confirm code spelling
- Review usage history
Stacking Problems
If Codes Won't Stack:
- Check stackable settings
- Verify priority order
- Review stacking rules
- Test individually
Next Steps
- Learn about Pricing Configuration for base pricing
- Review Operations for daily management
- Check Reports for promotion analytics
- Explore Catalog Management for product setup