This article explains how to add a single, reusable coupon self-redemption link to a membership pass by using a custom webpage (or Make) to redeem a coupon when clicked.
This approach allows the redemption link on the membership pass to remain unchanged, even as coupons expire and new coupons are issued.
Instead of embedding a coupon-specific PassKit ID in the pass, the link uses the membership pass ID as the couponExternalId. When a new coupon is issued, it reuses the same externalId, allowing the same link on the membership pass to continue working without requiring a pass update.
Why Use This Approach?
PassKit’s hosted self-redemption page requires a coupon PassKit ID, which changes every time a new coupon is issued. Embedding this ID directly in a membership pass would require the pass to be updated whenever a coupon expires.
This approach avoids that problem by:
Using the membership pass ID as the
couponExternalIdResolving and redeeming the active coupon dynamically at redemption time
Keeping the membership pass link permanent and reusable
How the Flow Works
A custom link field is added to the back of the membership pass
The link points to a custom webpage (not PassKit directly)
The webpage receives:
the membership pass ID (used as the
couponExternalId)the coupon
campaignId
The webpage uses the PassKit API to:
redeem the active coupon using
couponExternalId + campaignId
The coupon is redeemed immediately and the barcode greys out almost instantly
When the coupon expiry date is reached:
a new coupon can be issued with the same
couponExternalId(membership PassKit ID)the link on the membership pass continues to work without modification
Prerequisites
Either:
An active Make Subscription
Adding the Redemption Link to the Membership Pass Design
To expose the redemption link to members, add a custom field to the back of the membership pass design.
Please see this help article on how to add links to the back of the pass.
Recommended Field Configuration
Label: Redeem Coupon
Type: URL / Link
Location: Back of pass
Value:
https://yourdomain.com/redeem?externalId=${pid}&campaignId={{yourCouponCampaignId}}
${pid} is automatically populated with the membership pass ID.
Once saved, this link will appear on all membership passes using this design.
Redeeming the Coupon via a Custom Webpage
Your webpage should:
Read
couponExternalIdandcampaignIdfrom the requestCall the PassKit API to redeem the coupon using:
couponExternalId(membership pass ID)campaignId(coupon campaign)
PassKit Redeem API Endpoints
Europe server
https://api.pub1.passkit.io/coupon/singleUse/coupon/redeem
US server
https://api.pub2.passkit.io/coupon/singleUse/coupon/redeem
Refer to the Coupon API documentation for request and authentication details.
Using Make Instead of Hosting a Webpage
As an alternative, the redemption flow can be implemented entirely using Make.
How It Works
The membership pass link points to a Make custom webhook
The webhook receives:
externalIdcampaignId
Make uses the PassKit integration to:
redeem the coupon directly using
externalId + campaignId
Example Pass Link
https://hook.eu1.make.com/xxxxx?externalId=${pid}&campaignId={{couponCampaignId}}Recommended Make Scenario (Step-by-Step)
1. Create the Scenario
In Make, click Create a new scenario
Click + to add the first module
2. Add the Trigger: Custom Webhook
Select Webhooks
Choose Custom webhook
Click Add and name it (e.g. Membership Coupon Redemption)
Click Save
Copy the generated webhook URL
3. Add the Link to the Membership Pass
Add a clickable link field pointing to:
https://hook.eu1.make.com/xxxxx?externalId=${pid}&campaignId={{yourCouponCampaignId}}${pid} resolves to the membership pass ID.
4. Initialise the Webhook
Click Run once
Tap the link from a membership pass (or open the URL manually)
Make will detect and expose:
externalIdcampaignId
5. Add the Action: PassKit – Redeem Coupon
Add a new module
Select PassKit → Redeem Coupon
Map:
External ID →
couponExternalIdCampaign ID →
campaignId
Save the module
6. Turn the Scenario On
Click Save
Switch the scenario ON
Managing Coupon External IDs
Automatic Assignment
When creating coupons programmatically:
set
couponExternalIdto the membership pass ID
This ensures the redemption link continues to work across coupon renewals.
Manual Setup Using CSV (Optional)
If coupons need to be created or managed manually:
Export membership passes from PassKit as a CSV
Use the membership pass ID column as the coupon
couponExternalIdImport the CSV into the coupon campaign
Issue coupons using the imported external IDs
This is useful for:
bulk campaigns
migrations
testing environments
manual recovery workflows
Summary
The membership pass contains one permanent redemption link
The membership pass ID is reused as the coupon
externalIdCoupons can expire and be reissued without updating the pass
A resolver (webpage or Make) maps
externalId + campaignIdto the active coupon to redeem
Please note that you will still be charged for both a membership card and coupon card despite there being only one card in the wallet
