Skip to main content

Buy-ups — Extras You Sell to Your Subscribers

Buy-ups are optional extras that subscribers can put on top of their regular membership — a bonus episode back-catalog, an ad-free cut of the show, transcripts, a downloadable extra like a colouring book or a PDF guide. Each one is billed as an additional item on the subscriber’s existing Stripe subscription, on the same billing period they already pay on, so there is no second checkout for the subscriber to go through, and it lasts as long as their membership does.

A buy-up does two jobs for you:

  • It adds something the membership doesn’t include. Extra episodes, extra material, anything a subscriber on any tier can choose to take or leave.
  • It gives you something to sell. A buy-up is an offer you can put in front of people who already pay you, and you control its terms:
    • Which billing periods it is sold on, and at what price. “Transcripts, annual only” is a deliberate offer, not a gap.
    • Whether it is included free with a billing period. “Upgrade to annual and get transcripts” is a price of 0 on your annual period.
    • How many people can have it. “Transcripts, for the first 50 subscribers who want them” — the Subscriber cap.
    • When it is on sale. “This month only” — the On sale from and On sale until dates.

Closing a sale, by either route, takes nothing away. When the cap fills or the sale window ends, nobody new can get the buy-up, and everyone who already has it keeps it.

Buy-ups require Built-in Membership (NativeBridge) to be active on your show. If your site uses a third-party membership plugin — MemberPress, Restrict Content Pro, Paid Memberships Pro, or others — buy-ups are not available.


What a Buy-up Unlocks

Episodes. Tick the buy-up on an episode’s Access tab and the episode opens up to holders — on your website and in the feed their podcast app already fetches. It does not create a second feed. See Restricting Episodes below.

Anything you put on a page. Wrap a download link, an image, a bonus video or extra writing in [benecaster_access_gate] on any page or post, and only holders of that buy-up see it; everyone else sees what you put after [benecaster_else], which is a natural place for your sign-up or purchase button. You can type the shortcode, where buyup is the buy-up’s Access token type, or insert a Buy-up Gate block from the / menu in the episode editor’s page content and pick the buy-up from a list.

[benecaster_access_gate buyup="colouring-book"]
  <a href="/wp-content/uploads/colouring-book.pdf">Download the colouring book</a>
[benecaster_else]
  Add the colouring book to your plan from your account page.
[/benecaster_access_gate]

The gate hides the link. It does not protect the file. A file in your media library keeps its ordinary web address, so anyone who is given that address — by a holder forwarding it, for example — can still open it. The gate decides who is shown the link, not who can reach the file behind it. Price and choose what you deliver this way with that in mind.

Gating a whole episode is still done on the episode’s Access tab, not with the shortcode. And anything beyond showing or hiding content — adding a holder to a mailing list, giving them a Discord or Circle role, telling another system about them — is a developer job: someone checks benecaster_user_has_buyup() wherever the decision needs making. See Buy-up Content Gating for both.


Buy-up or Tier?

If an extra is optional and sits alongside your tiers rather than above them, make it a buy-up. Tiers are a ladder: each one includes everything below it. Extras that different people want in different combinations don’t fit on a ladder — three independent extras would need eight tiers to cover every combination, and there is no sensible order to put “Premium plus transcripts” and “Premium plus the bonus feed” in. As buy-ups, each extra is priced on its own, can be capped on its own, and can be added or dropped without the subscriber changing tier.

If it’s one extra that nearly everyone takes, make it a tier instead. “Premium with transcripts” as its own tier is simpler for subscribers.


Who Can Buy a Buy-up

A buy-up has one price per billing period you choose to sell it on. A subscriber can add it when it has a price for their own billing period, in the same currency their plan bills in. Stripe will not mix billing periods or currencies on a single subscription, which is why the match has to be exact: a buy-up priced only monthly can’t be added by an annual subscriber, and a buy-up priced annually can.

You don’t have to price every period. Selling a buy-up on some periods and not others is a way to steer people — an annual-only buy-up is a reason to go annual.

Subscribers who can’t buy a buy-up see it marked Not available on your plan, with a reason, instead of a purchase button. Nothing is hidden — they can still see what the buy-up is — but the button is disabled and a purchase attempt is refused the same way. The reasons are covered on Buy-ups — Subscriber Self-Service. The one you’ll see most is “This extra is not offered on your billing period. Change your billing period to add it.”, which points them at the upgrade rather than a dead end.

Each subscriber is shown the price for their own period, with the period beside it — USD 5.00/mo for a monthly subscriber, USD 49.00/yr for an annual one.

Each price row carries its own currency, set in the buy-up editor; a new row starts in USD. For a subscriber to be able to buy it, the row for their billing period has to be in the currency their plan bills in.


Buy-ups Belong to One Show

A buy-up is created on a show and stays there. It is offered only to that show’s subscribers, unlocks content only on that show, and cannot be moved to another one afterwards. If you run several shows and want the same buy-up on each, create it separately on each — and expect subscribers to buy it separately too.

There is deliberately no reassign control. A buy-up’s Stripe Product and Price, and every grant already sold against it, all carry the original show; moving the definition would leave those behind. To retire one and offer it elsewhere, deactivate it and create a new one on the other show.


Managing Buy-ups

Buy-ups are managed at Benecaster → Memberships → Buy-ups — a sub-tab alongside Tiers, and it works the same way Tiers does: the list shows only the currently selected show’s buy-ups.

With no show selected, Add Buy-up is disabled and a “Create a show before configuring buy-ups” notice appears in its place.


Creating a Buy-up

Click Add Buy-up to open the definition form. The buy-up is created on whichever show is currently selected.

Field Description
Name Shown to subscribers on the account page — keep it short and descriptive
Description Optional longer description shown alongside the name in the Extras section of the subscriber’s account page
Prices One row per billing period you sell the buy-up on — a label, an interval (e.g. 1 month(s), 1 year(s), 3 month(s)), an amount and a currency. Click Add price for another period. One row is marked Default. See Pricing by Billing Period below
On sale from / On sale until Optional. Blank at either end leaves that end open. Times are in your site’s timezone. See Sale Windows below
Subscriber cap Maximum number of subscribers who can hold the buy-up at once. Leave blank for unlimited. Once the cap is reached, the account page’s Extras section shows a “Sold out” state to eligible subscribers who don’t already hold it
Access token type The token type slug granted to the subscriber when they get the buy-up. Must not collide with any existing native tier slug or bridge tier slug — validation blocks the save if a conflict is detected
Available to tiers Multi-select — choose which of this show’s membership tiers can get this buy-up. Leave blank to make it available to every tier on the show. Only that show’s tiers are offered, and tier names are per-show, so a tier on another show with the same name is a different tier. A subscriber holding a paid buy-up who moves to a tier outside that list keeps it until the end of their current billing period, then it ends; see Changing Tier With Buy-ups.
Active Toggle off to hide the buy-up from the subscriber account page without deleting it. Existing holders are not affected — they keep access until their period ends

Tax Category

If Stripe Tax is ready in your show’s Stripe account, the buy-up editor shows a Tax category box, the same one the tier editor shows. Its help text opens Stripe Tax is on in this show’s Stripe account, so this buy-up needs a tax category. Every buy-up needs one, because every buy-up is sold. The box appears whether or not Calculate tax automatically is on in Benecaster, so you can set categories before you start collecting tax.

It asks two questions, What kind of content is it? and How do subscribers get it?, or you can choose Enter a Stripe tax code and type any Stripe tax code. Nothing is selected for you and Benecaster does not recommend a category: it decides how every payment for the buy-up is taxed, so the choice is yours, or your accountant’s.

While Stripe Tax is ready in the show’s Stripe account, a buy-up cannot be saved without a category; saving refuses with Choose a tax category for this buy-up before saving. The category is set on the buy-up’s Stripe product, and changing it later updates the product too. A category you have already set stays in the editor, and can be changed or cleared, if Stripe Tax is later turned off.

Until every active buy-up and every active paid tier on a show has a category, that show is not taxed at all. See Built-in Membership for the questions in full, and Setting Up Sales Tax and VAT for the whole setup.


Pricing by Billing Period

The Prices section works the same way it does on a tier: one row for each billing period you sell the buy-up on. The buy-ups list shows every price with its period — USD 5.00/mo · USD 49.00/yr.

  • Price only the periods you want to offer it on. A subscriber on a period with no row is shown the buy-up as not offered on their billing period, with a prompt to change it.
  • Type amounts in the currency’s own units: 4.99 for $4.99, 500 for ¥500, 1.500 for KWD 1.500. A three-decimal currency is rounded so the last digit is 0.
  • Every paid amount must be at least Stripe’s minimum charge in that row’s currency, and the editor names it in that currency: USD 0.50, GBP 0.30, EUR 0.50, JPY 50, MXN 10, HUF 175, and so on through Stripe’s list. A currency Stripe lists no minimum for, such as KWD, BHD or the other three-decimal currencies, takes 0.50 of the currency (KWD 0.500). Anything above 0 and below the minimum is refused. Stripe’s real floor follows the currency your Stripe account pays out in, which Benecaster cannot see, so if you price in a currency other than your payout currency, check Stripe’s minimums yourself.
  • Enter 0 to include the buy-up free with a billing period. It is then granted rather than sold — see Including a Buy-up Free below.
  • One price per billing period per currency. A second row on the same period and currency is refused, because only one of them could ever be offered.
  • One row is always the Default. If you remove the default row, another row takes its place — a buy-up is never left with prices and no default.

When you save, Benecaster creates a Stripe Product for the buy-up and a Price for each row, in every configured Stripe keyset (test and live) — including a $0 Price for a free row. Stripe Prices are immutable, so changing an amount creates a new Price on the same Product. New subscribers always see the current price. Briefly after a save, while that finishes, a subscriber on a newly priced period sees “This extra is not ready to purchase yet” instead of a purchase button.


Including a Buy-up Free

Pricing a buy-up at 0 on a billing period gives it to everyone on that period, with nothing for them to click. It reaches them four ways:

  • They’re already on that period when the price becomes 0. They get it straight away. Saving the buy-up again for any other reason, such as fixing a typo in its description, gives nobody anything.
  • They sign up on that period. On your sign-up form it appears under Included with this billing period, already ticked. They can untick it, so it is opt-out — the promise on your sales page holds for anyone who doesn’t actively decline it. The list changes with the billing period they pick.
  • They switch onto that period. They get it when the switch takes effect, and the switch option names it beforehand.
  • They stay on it. It lasts as long as their membership on that period does.

If a subscriber moves to a period that doesn’t include the buy-up at all, it is dropped, and they are told by name what they’ll lose before they confirm. If the period they move to sells it for money, it is carried over and charged, and that charge is part of the total they confirm. Nothing is taken away or charged without being named first. See Changing Your Billing Period.

A free price works with a cap. “The first 50 to go annual get transcripts free” is a price of 0 on your annual period plus a cap of 50. Once fifty people hold it, nobody new is given it, including people partway through a switch to annual, and everyone who already has it keeps it.

A free buy-up also follows its sale window: outside the window, nobody new is given it.

A subscriber’s no is remembered. Unticking a free buy-up at sign-up, removing it from their account page, and unticking it when they switch billing period are all the same decision, recorded for that subscriber on that show. Nothing gives it back to them automatically after that. Two things can:

  • They switch onto a billing period that includes it. The switch offers it again, by name and ticked, because choosing that period is a new decision. They can untick it there too.
  • They add it back themselves from their account page. That’s free, it clears their earlier no, and it counts as a grant rather than a purchase.

On the account page a free buy-up reads Included with your plan, or Active — Included with your plan once they hold it, rather than a price of zero. Removing one asks them to confirm and tells them it won’t come back on its own, but that they can add it again from the same page at any time.


Sale Windows

On sale from and On sale until turn a buy-up into a limited-time offer — “this month only”. Either can be left blank: no opening date puts it on sale straight away, and no closing date keeps it on sale indefinitely. Times are in your site’s own timezone (Settings → General).

Closing a sale takes nothing away. After the closing date nobody new can buy it, and everyone who already has it keeps it. That is the same promise a full subscriber cap makes.

Subscribers outside the window see one of two different messages, and the difference is deliberate:

  • Before it opens: “This extra is not on sale yet. Check back soon.”
  • After it closes: “This extra is no longer available.”

Changing a Price

Re-pricing a billing period asks what to do with the people paying on that period — and leaves every other period’s holders alone. Saving a changed amount opens “What should happen to existing subscribers?”, naming the period. If you change several periods in one save, you get a choice for each, each with its own notice settings:

  • Keep existing subscribers on their current price — the default, and what happens if you close the dialog without choosing. Current holders keep paying what they always have; only new subscribers pay the new price.
  • Move existing subscribers — holders on that period move to the new price. You set Days of notice (0 is valid, meaning the change applies at their very next renewal) and can turn on an optional reminder email before the change takes effect.

A price that was 0 can only be kept. When you give a price to a billing period that was free, the dialog tells you how many subscribers currently hold the buy-up at no charge, and Move isn’t available for that row: those subscribers were given the buy-up and never agreed to pay anything, so there is no price to move them from. They keep it free for as long as they stay on that billing period, and the new price applies to new subscribers only.

This is permanent. Nothing you change afterwards reaches the people who already hold it: the price, the sale window and the subscriber cap all apply to new subscribers only. Decide before you include a buy-up free whether you’re happy to keep giving it to those people.

Removing a price row is not a price change. Its holders keep the price they have, and you are not asked about them.

Every holder a Move applies to is emailed before anything changes — the notice goes out first, and the cron moves them only after the notice period ends. A holder who drops the buy-up in the meantime is simply not moved, since there’s nothing left to move. A subscriber whose billing is already past due or paused is skipped rather than moved; they’re named in an admin notice so you know who wasn’t moved and can follow up.

The buy-up’s edit screen lists price changes in progress, one block per billing period, each with a Retry N failed link when the change has failures — it re-queues just those holders rather than re-running the whole cohort. A pending Move can also be undone with Cancel change any time before the notice period ends. See Built-in Membership for the same mechanics as they apply to tiers, and Price Change Considerations before running a Move.


Restricting Episodes

Once a buy-up is defined, you can gate individual episodes behind it from the episode editor’s Access tab. The picker there offers only the active buy-ups belonging to that episode’s own show.

When multiple buy-ups are selected for an episode, access uses OR logic — a subscriber holding any one of them can access the episode. See Buy-up Content Gating for how to configure per-episode access.


The Subscriber Experience

Active buy-ups appear on the subscriber’s account page in a section headed Extras, which is what subscribers see buy-ups called. In wp-admin they are always buy-ups; neither screen calls them add-ons, a word kept for Benecaster’s own add-ons. Subscribers can add and remove buy-ups there, and free ones also appear on your sign-up form. See Buy-ups — Self-Service for Subscribers for how the subscriber-facing flow works.


For Developers

The admin REST endpoints for buy-up CRUD are documented at Buy-ups Admin REST API.

Three lifecycle action hooks fire during the self-service flow:

The global helper function benecaster_user_has_buyup() checks whether a subscriber holds a live grant for a given buy-up.

See Hook a subscriber’s buy-up purchase/cancellation to grant extra benefits or send an email for a worked example.

See Also

Need this built rather than just documented? See our services →