Skip to main content

Adding a Reusable Coupon Self-Redemption Link to a Membership Pass

How to add a permanent coupon redemption link to a membership pass by reusing the membership pass ID as the coupon externalId, allowing coupons to expire and be reissued without updating the pass.

Written by Claudia
Updated over a month ago

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 couponExternalId

  • Resolving and redeeming the active coupon dynamically at redemption time

  • Keeping the membership pass link permanent and reusable


How the Flow Works

  1. A custom link field is added to the back of the membership pass

  2. The link points to a custom webpage (not PassKit directly)

  3. The webpage receives:

    • the membership pass ID (used as the couponExternalId)

    • the coupon campaignId

  4. The webpage uses the PassKit API to:

    • redeem the active coupon using couponExternalId + campaignId

  5. 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


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:

  1. Read couponExternalId and campaignId from the request

  2. Call 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

  1. The membership pass link points to a Make custom webhook

  2. The webhook receives:

    • externalId

    • campaignId

  3. 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:

    • externalId

    • campaignId

5. Add the Action: PassKit – Redeem Coupon

  • Add a new module

  • Select PassKit → Redeem Coupon

  • Map:

    • External IDcouponExternalId

    • Campaign IDcampaignId

  • 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 couponExternalId to 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:

  1. Export membership passes from PassKit as a CSV

  2. Use the membership pass ID column as the coupon couponExternalId

  3. Import the CSV into the coupon campaign

  4. 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 externalId

  • Coupons can expire and be reissued without updating the pass

  • A resolver (webpage or Make) maps externalId + campaignId to 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

Did this answer your question?