Apply Promo Code to Membership
Applies a promo code to an active or trialing membership that does not already have one and has exactly one recurring item. The discount lands on the next invoice and follows the code’s duration (once, repeating, or forever). Works for Stripe-billed memberships and memberships billed by Whop’s billing engine, including payment-element and multi-PSP renewals. Stock, plan eligibility, and expiry are still checked. Memberships with multiple recurring items are rejected.
Authorizations
An Account API key, an App API key, an account access token, an account-scoped user token, or a user OAuth token. Prepend the key or token with Bearer, for example Bearer ***************************. See Auth & API keys for how to get each one.
Headers
A unique key that makes this request safe to retry. See Idempotent requests.
255"d9105228-4a08-46b1-8b91-42fed586d383"
Pins the request to a dated API version.
"2026-09-29"
Path Parameters
Membership ID (mem_ tag).
Body
The promo code to apply, as customers enter it at checkout (for example SAVE20).
"SAVE20"
Response
promo code applied
The account (seller) this membership belongs to.
Number of days between recurring charges. null for non-renewing memberships or memberships with multiple renewal schedules.
30
Whether the membership is set to cancel when the current billing period ends. Only meaningful for recurring variants.
true
When cancellation was requested, or when the membership was canceled if no request time is recorded, as an ISO 8601 timestamp. null when neither is recorded.
"2026-01-01T12:00:00.000Z"
Free-text explanation provided when canceling. null when no reason was provided.
"Too expensive"
When the membership was created, as an ISO 8601 timestamp.
"2026-01-01T12:00:00.000Z"
When the current billing period renews, or when a non-renewing membership expires, as an ISO 8601 timestamp. null for one-time purchases with no expiration.
"2026-01-01T12:00:00.000Z"
When the current billing period started, as an ISO 8601 timestamp. null when no billing period is recorded.
"2026-01-01T12:00:00.000Z"
Membership ID, prefixed mem_.
"mem_xxxxxxxxxxxxxx"
The software license key for this membership. Only present when the product includes a software licensing experience.
"WHOP-XXXX-XXXX-XXXX"
URL where the buyer can sign in to manage billing. null without a member record or unless the caller is the buyer or has member:manage on the account.
"https://whop.com/billing/manage/mber_xxxxxxxxxxxxxx"
The caller's member row on the account. Present only when the membership belongs to the caller; null on seller-side reads.
Custom key-value pairs stored on the membership, commonly used for software licensing.
The buyer's phone number recorded for this membership, or null. The number collected (or verified) at checkout when the seller's phone collection is on; falls back to the buyer's account number when they have shared one with this seller.
"+xxxxxxxxxxx"
The variant the buyer purchased, prefixed plan_.
"plan_xxxxxxxxxxxxxx"
The product this membership grants access to, prefixed prod_.
"prod_xxxxxxxxxxxxxx"
The promo code discounting this membership, prefixed promo_. null when none is applied. Set at checkout or by Apply Promo Code to Membership.
"promo_xxxxxxxxxxxxxx"
Billing state of the membership. active/trialing memberships grant access; past_due is the grace period after a failed payment; completed one-time purchases keep access; canceled/expired do not.
trialing, active, past_due, completed, canceled, expired, unresolved "active"
When the membership was last changed, as an ISO 8601 timestamp. Reflects the most recent change to the membership itself, so you can reconcile against webhook retries, replays, and backfills.
"2026-01-01T12:00:00.000Z"
The buyer, prefixed user_. null when the buyer is another business or the membership is unclaimed.
"user_xxxxxxxxxxxxxx"

