Introduction
If you want to provide a customer with multiple coupons, rewards or promotions, you can use a Membership or Loyalty pass as an entry point to a webpage that displays the offers available to that customer.
Instead of adding every offer directly to the Membership or Loyalty pass, add a View Offers link to the pass that opens a webpage hosted by you.
For example:
Membership/Loyalty Pass → View Offers → Your Offers Page → Available Coupons
This approach allows you to:
keep a single Membership or Loyalty pass in the customer's Wallet;
display multiple offers in one place;
dynamically control which offers are available to each customer;
update your offers without changing the Membership or Loyalty pass each time; and
manage the appearance and functionality of the offers page yourself.
Note: The offers webpage and the logic used to determine which offers are available are hosted and managed by you rather than PassKit.
Before You Start
Before implementing this approach, you will need:
a PassKit Membership or Loyalty program;
a way to identify the member opening the offers page;
a webpage where you can display the customer's available offers; and
a backend or other data source that determines which offers are available to that customer.
If the offers displayed on your webpage should also be issued as PassKit coupons, you can use the PassKit API or SmartPass Links as part of your implementation.
How It Works
The basic customer journey is:
The customer adds their Membership or Loyalty pass to Apple Wallet or Google Wallet.
The pass contains a link such as View Offers.
The customer taps the link.
Your webpage opens.
Your system identifies the customer.
Your webpage displays the offers currently available to them.
The customer selects an offer.
What happens after the customer selects an offer depends on your implementation.
For example, you could display the offer entirely on your webpage or allow the customer to add an individual PassKit coupon to their Wallet.
Step 1: Create Your Membership or Loyalty Pass
Create your Membership program and configure the Membership or Loyalty Card design you want your customers to use.
Each member should have an identifier that your system can use to determine which offers belong to them.
For example, this could be an external ID associated with the member in your own system.
Your Membership or Loyalty pass acts as the permanent Wallet pass that the customer can return to whenever they want to view their available offers.
Step 2: Create Your Offers Page
Create a webpage that displays the coupons, rewards or promotions available to the customer.
This webpage is hosted and managed by you.
For example, the page could display:
10% Off Your Next Purchase
Free Coffee Reward
Birthday Offer
£5 Off When You Spend £30
Your webpage can determine which offers to display based on your own eligibility rules.
This could include factors such as:
customer;
membership level;
purchase history;
available rewards;
offer validity dates; or
whether an offer has already been redeemed.
Step 3: Add a View Offers Link to the Pass
In the PassKit Designer, add a field to your Membership or Loyalty pass that links to your offers page.
Give the field a clear label, such as:
View Offers
Your URL might look similar to:
https://yourdomain.com/offers?member=MEMBER_IDENTIFIER
When the customer taps View Offers, their browser opens your webpage.
Important: Avoid placing sensitive customer information directly in the URL. Your implementation should use an appropriate method of identifying and validating the customer before displaying personalised information.
Step 4: Identify the Customer
When the offers page opens, your system needs to determine which customer is requesting the page.
Your implementation might use an identifier or token contained in the link.
For example:
https://yourdomain.com/offers?token=YOUR_TOKEN
Your server can validate the token and determine which customer it represents.
Once the customer has been identified, your system can retrieve the offers available to them.
Security: Do not rely solely on a predictable member ID in the URL to protect personalised customer information. Validate requests on your server and use an appropriate authentication or token mechanism for your implementation.
Step 5: Retrieve the Customer's Available Offers
Once the customer has been identified, your system can determine which coupons, rewards or promotions are currently available to them.
Depending on your implementation, this information could come from your own database, CRM, loyalty system or another data source.
The information displayed for each offer could include:
offer name;
description;
expiry date;
redemption status; and
the action available to the customer.
Your webpage can then display the relevant offers to the customer.
Because the offers are managed by your system, you can change which offers are available without adding each offer directly to the customer's Membership or Loyalty pass.
Note: How offers are stored, retrieved and assigned to customers depends on your own implementation. PassKit does not require a specific backend structure for this approach.
Step 6: Decide What Happens When an Offer Is Selected
There are different ways to handle an offer after the customer selects it.
Display the Offer on Your Webpage
You can keep the complete offer and redemption experience within your own webpage.
In this case, your system is responsible for displaying and managing the offer.
Issue a PassKit Coupon
If you want the selected offer to become an individual Wallet coupon, you can create a PassKit coupon when the customer selects it.
This can be done using the PassKit API or a SmartPass Link, depending on your implementation.
The flow could then be:
Membership/Loyalty Pass ↓ View Offers ↓ Your Offers Page ↓ Select Offer ↓ PassKit Coupon ↓ Add to Apple Wallet / Google Wallet
This means the customer keeps their main Membership or Loyalty pass while only adding individual coupons to their Wallet when they choose to use them.
Note: A Membership/Loyalty pass and a Coupon pass are separate passes. If the customer chooses to add a PassKit coupon to their Wallet, they will have both their Membership/Loyalty pass and the selected Coupon pass.
Using SmartPass Links
SmartPass Links can be useful if you want customers to create a PassKit coupon directly from your offers page.
Your webpage can provide an Add to Wallet or Get Offer action for an available promotion.
When selected, the customer follows the SmartPass Link and the coupon can be created using the information supplied in the SmartPass Link payload.
This allows the coupon to be created when the customer chooses the offer, rather than requiring every available coupon to be created in advance.
Example Customer Experience
A customer has a Loyalty pass installed in their Wallet.
They open the pass and select:
View Offers
Their browser opens your offers page, which shows:
10% Off Next Purchase
Free Coffee
Birthday Reward
The customer selects Free Coffee.
Depending on your implementation, they could then either:
view and redeem the reward through your webpage; or
create and add a PassKit Coupon pass for the Free Coffee reward.
When their available offers change, your webpage displays the latest offers the next time they open it. You do not need to add every available offer to the Membership or Loyalty pass itself.
Keeping the Membership Pass Updated
Although the individual offers are displayed on your webpage, you can still update the Membership or Loyalty pass when useful.
For example, you could display:
3 offers available
or:
New reward available
and update that information when the customer's available offers change.
The customer can then select View Offers to see the full details.
This gives customers useful information directly in Wallet without trying to display every offer on the pass.
Security Considerations
If the offers are personalised, make sure one customer cannot change an identifier in the URL and view another customer's offers.
Consider:
using signed or short-lived tokens;
validating requests on your server;
avoiding sensitive information in URLs;
checking that the customer is eligible before issuing an offer; and
validating redemption server-side.
The exact authentication method will depend on your application and security requirements.
User Experience
Design the offers page primarily for mobile devices, as customers will normally open it from Apple Wallet or Google Wallet.
Keep the experience simple and make it clear which offers are:
available;
redeemed;
expired; or
not currently eligible for use.
If selecting an offer creates a separate Wallet coupon, make this clear before the customer adds it.
Handling Errors
No Offers Are Available
If the customer currently has no available offers, display a clear message rather than an empty page.
For example:
You don't have any offers available right now. Check again soon.
No Internet Connection
The external offers page requires an internet connection.
If accessing the offers is an important part of your program, consider making this clear in the information displayed on the pass.
Invalid or Expired Link
If you use expiring or signed tokens, provide a clear message if the link is no longer valid.
Depending on your implementation, you may also provide a way for the customer to generate or receive a new link.
Offers Can't Be Loaded
If your backend or API is temporarily unavailable, display a message such as:
We're unable to load your offers right now. Please try again later.
Do not display a partially loaded or incorrect set of offers.
When to Use This Approach
This approach is particularly useful when:
customers can have multiple offers at the same time;
available offers change frequently;
offers are personalised;
you want to control the offers interface yourself;
you want to avoid displaying large amounts of offer information on the Membership or Loyalty pass; or
you only want to issue a separate Coupon pass when a customer chooses an offer.
For a small number of static promotions, displaying information directly on the Membership or Loyalty pass may be sufficient.
Important Notes
The Membership or Loyalty pass acts as the entry point to your offers experience.
The offers webpage is hosted and managed by you.
PassKit does not automatically provide the webpage or determine which offers should be displayed.
Use an appropriate identifier or token to determine which customer is accessing the page.
Do not expose sensitive customer information in the URL.
Your backend should validate customer eligibility and redemption rules.
Available offers can change without requiring every offer to be added to the Membership or Loyalty pass.
If required, a selected offer can be issued as a separate PassKit Coupon using the PassKit API or SmartPass Links.
Test the complete flow on both Apple Wallet and Google Wallet before making it available to customers.
Summary
For customers who need access to multiple or frequently changing offers, you can use a single Membership or Loyalty pass as an entry point to a custom offers page.
Add a View Offers link to the pass, identify the customer when they open the page, and use your own backend to determine which offers should be displayed.
If an offer should also be available as an individual Wallet coupon, you can use the PassKit API or a SmartPass Link to create the Coupon pass when the customer selects it.
This keeps the main Membership or Loyalty pass simple while giving you greater flexibility over how multiple offers are displayed and managed.

