# Discourse Subscriptions Plugin

**URL:** https://meta.discourse.org/t/discourse-subscriptions-plugin/140818
**Category:** Plugin
**Tags:** official, subscriptions, payments, included-in-core
**Created:** [February 6, 2020, 4:15am UTC](https://meta.discourse.org/t/discourse-subscriptions-plugin/140818 "2020-02-06T04:15:07Z")
**Posts on this page:** 20
**Page:** 1

<div class="post-metadata">

### Author: ![Discourse](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/discourse/32/148734_2.png) [@Discourse](https://meta.discourse.org/u/Discourse)
#### Post date: [February 6, 2020, 4:15am UTC](https://meta.discourse.org/t/discourse-subscriptions-plugin/140818/1 "2020-02-06T04:15:08Z")

</div>

| | | |
| --- | --- | --- |
| :discourse: | **Summary** | The **Discourse Subscriptions** plugin allows site owners to sell recurring and one-time purchase subscriptions that grant access to a group on a Discourse instance. |
| 📖 | **Install Guide** | **This plugin is bundled with Discourse core**. There is no need to install the plugin separately. |

> [@](#):
>
> :discourse2: As this is an #official plugin maintained by the Discourse team, #Support, #Contribute > Bug, #Contribute > UX, and #Contribute > Feature requests can be made in the respective categories here on Meta, and tagged with the appropriate plugin tag. Click on a link below to get one started. 👍
> 
> [❓ **Support**](https://meta.discourse.org/new-topic?category_id=6&body=%3E%20Before%20asking,%20did%20you%20search%20first%3F%20Press%20%F0%9F%94%8D%20at%20the%20upper%20right%20to%20search.&tags=subscriptions "Ask for support on configuring and using Discourse Subscriptions") [🐛 **Bug**](https://meta.discourse.org/new-topic?category_id=1&tags=subscriptions "A bug report means something is broken, preventing normal/typical use of the plugin") [👀 **UX**](https://meta.discourse.org/new-topic?category_id=9&tags=subscriptions "Discussion about the user interface of Discourse Subscriptions, and how features are presented (including language and UI elements)") [💡 **Feature**](https://meta.discourse.org/new-topic?category_id=2&tags=subscriptions "Discussion about how existing Discourse Subscriptions features can be improved or enhanced, and how proposed new features could work")

The Discourse Subscriptions plugin allows you to create one-time as well as recurring subscriptions that users can pay for in order to access gated content. This can be a great way to fund the hosting cost of your community.

 ![This image shows the main page of an online discussion forum with the Subscription plugin enabled. There is now a Subscribe button added to the top nav as well as a Support Us banner.](https://global.discourse-cdn.com/meta/original/4X/5/8/b/58be8bb0edf25b5cea3a31ee3bb217a0157aff95.jpeg)

### Features

The Discourse Subscriptions plugin supports the following features:

- Create new products and plans from the admin panel
- Cancel and refund subscriptions from the admin panel
- Create one time purchase or recurring subscription plans
- Add free trials on recurring subscriptions
- SCA/3D Secure support
- Add/remove users from plan groups as they subscribe/cancel
- Cancel subscription from user profile
- Cancellation of subscription at end of subscription period
- [Optional Support for Stripe Checkout](https://meta.discourse.org/t/discourse-subscriptions/140818#p-696270-stripe-checkout-with-stripe-pricing-tables-12)
- [Automatic sales tax calculation and collection](https://meta.discourse.org/t/discourse-subscriptions/140818#p-696270-automatic-tax-collecting-13)
- [Users can update their card for individual subscriptions](https://meta.discourse.org/t/discourse-subscriptions/140818#p-696270-update-payment-info-11)

The “Subscribe” button located in the top nav will take you to the Subscribe page `/s` where it lists the subscriptions you have configured for your site:

 ![This image displays a web page interface for a platform called "Discourse" where users can subscribe to either a one-time purchase or an ongoing campaign to support the site. (Captioned by AI)](https://global.discourse-cdn.com/meta/original/4X/8/7/4/8740b708cacda01d8c62d41cd838e0817b85424a.jpeg)

Once a user clicks on one of the “Subscribe” button for a specific plan it will open up the payment page for that plan:

 ![This image shows a web page interface for subscribing to a campaign or service, with fields for selecting a payment plan, entering personal and payment information, and a "Subscribe" button. (Captioned by AI)](https://global.discourse-cdn.com/meta/original/4X/0/1/6/0161d3f15a51a1982c26015c5c0075a66224a024.jpeg)

After a user fills out their payment details and their address and click “Subscribe”, they are shown a “Thank you!” message and taken to their billing page:

 ![The image shows a browser window with a subscription management interface, displaying a message confirming that a new subscription has been successfully created. (Captioned by AI)](https://global.discourse-cdn.com/meta/original/4X/f/1/2/f127f5695c78d7dbe0872b90097f5adc114216b3.jpeg)

The user is also automatically added to a group of your choosing so that you can easily see which users have subscribed as well as provide gated content in categories only that group can see.

 ![The image shows a web interface displaying various user groups such as contributors, creators, editors, moderators, publishers, and a group named "supporter" which the user appears to be a member of. (Captioned by AI)](https://global.discourse-cdn.com/meta/original/4X/1/b/2/1b254fef46fa91eb5ffd41b591c94b7f86e5d5bd.jpeg)

### Terms

- **Subscription** - Subscriptions are a recurring payment plan which allow you to control access to content on your community. When a subscription is created or deleted, a user is added or removed from the user group you associate with your subscription plan. A subscription is made up of a product and plans.
- **Product** - A product in Stripe’s terms is what you’re selling. A product can contain one or more plans.
  - To add a description to your product, add a metadata field named “description” and use that one instead. You can use Markdown.

- **Plan** - A plan contains a price, recurring cycle, and associates with a group to which your subscribers gain access.

> 🚨 Be very careful to keep your Stripe private keys safe and secure at all times.

> ⚠ If you were to shut down your instance of Discourse, uninstall this plugin or your site were to go offline, Stripe will continue to bill your customers for your service until the subscription is cancelled.

### Configuration

1. Install & enable the plugin
2. Configure Payment Gateway (Stripe)
3. Configure Webhooks & Events in Stripe
4. Add your Stripe keys (public, secret, webhook secret) under **Admin \> Plugins \> Installed \> Subscriptions \> Settings** `/admin/site_settings/category/discourse_subscriptions?filter=plugin%3Adiscourse-subscriptions`.
5. Create a group for your subscribers to join via purchase
6. Create a product and plan under **Admin \> Plugins \> Subscriptions**
7. Profit!

#### Set up your Payment Gateway.

Firstly, you’ll need an account with the [Stripe](https://stripe.com) payment gateway. To get started, you can set up an account in test mode and see how it all works without making any real transactions or having to set up a bank account. There is no test mode toggle in the plugin; instead, be sure to use your developer keys (they begin with `pk_test`, `sk_test`)

#### Set up Webhooks and Events in your Stripe account

> 💣 Webhooks are **required to make subscription cancellations work fully.** Be sure you have them configured correctly.

Once you have an account on Stripe, you’ll need to [tell Stripe your website’s address](https://dashboard.stripe.com/test/webhooks) so it can notify you about certain transactions. You can enter this in your Stripe dashboard under **Endpoints \> URL**.

**Webhooks address** : `[your server address]/s/hooks` – where [your server address] is the URL of your Discourse install.

You’ll also need to tell Stripe which events it should notify you about via the webhook URL.

Currently, Discourse Subscriptions responds to the following events:

- `customer.subscription.deleted`
- `customer.subscription.updated`
- `checkout.session.completed`
- `checkout.session.async_payment_succeeded`

#### Add the Stripe API and Webhook keys to your plugin settings

Stripe needs to be authorized to communicate with your website. To do this, it publishes a pair of private and public _API keys_ and a _signing secret_ for your web hooks.

To authorize webhooks, add the API keys and webhook secret from Stripe to your settings page (under Developers).

> ⚠ Adding production keys will make live payments. If you plan to test, be sure to switch to `View test data` mode and get `pk_test` and `sk_test` keys under Developers.

In your Stripe account settings, see:

- [https://dashboard.stripe.com/apikeys](https://dashboard.stripe.com/apikeys)
- [https://dashboard.stripe.com/webhooks](https://dashboard.stripe.com/webhooks)

Add these keys under the appropriate settings in **Admin \> Plugins \> Installed \> Subscriptions \> Settings** `/admin/site_settings/category/discourse_subscriptions?filter=plugin%3Adiscourse-subscriptions`.

 ![This image shows the configuration settings for the Discourse Subscriptions plugin, which includes options to enable the plugin, display a subscribe button in the navigation, and provide Stripe API keys and a webhook secret for payment processing. (Captioned by AI)](https://global.discourse-cdn.com/meta/original/4X/2/9/1/29180ddb43cb9036b3c79a03b796c7ed9547c565.png)

#### Set up your User Groups in Discourse

When a user successfully subscribes to your Discourse application, after their credit card transaction has been processed, they are added to a User Group. By assigning users to a User Group, you can manage what your users have access to on your website. User groups are a core functionality of Discourse and this plugin does nothing with them except add and remove users from the group you associated with your Plan.

#### Create one or more products with plans.

Under Admin \> Plugins \> Subscriptions, click add a new Product. Once you have a product saved, you can add plans to it. Keep in mind that the pricing and billing intervals of plans cannot be changed once you create them. This is to avoid confusion around subscription management.

If you take a look at your [Stripe Dashboard](https://dashboard.stripe.com), you’ll see all those products and plans are listed. Discourse Subscriptions does not create them locally. They are created in Stripe.

### Testing

Test with these credit card numbers:

- 4242 4242 4242 4242
- 4111 1111 1111 1111 (no authentication required)
- 4000 0027 6000 3184 (authentication required)

For more test card numbers: [Test card numbers | Stripe Documentation](https://stripe.com/docs/testing)

Visit `/s` and enter a few test transactions.

### Going Live

Once you’re ready to go live, change your API and webhook secret keys to production keys. You will need to create new products and plans in live mode.

Do be aware that if if you don’t properly configure Stripe webhooks, and recurring payments fail to process for any reason (expired credit card, etc.), users will still have access to the group . To have Stripe automatically cancel subscriptions, be sure to set your [Manage failed payments](https://dashboard.stripe.com/settings/billing/automatic) settings similar to the below image and configure webhooks as described above.

 ![managed failed payments](https://global.discourse-cdn.com/meta/original/3X/e/e/ee3a8a9696987d0a08b48de252203f17bc781d72.png)

### Update Payment Info

Users can update their card used for individual subscriptions by visiting the billing page and clicking the edit button next to the subscription which will open up this screen:

 ![CleanShot 2024-07-11 at 13.58.15@2x](https://global.discourse-cdn.com/meta/original/4X/b/9/0/b90809fc349da95b0d967d46d0fd6f27f484b4c7.jpeg)

### Stripe Checkout with Stripe Pricing Tables

You can also opt to replace the Subscription Plugin product and checkout pages and instead use [Stripe Checkout](https://docs.stripe.com/payments/checkout) with [Stripe Pricing Tables](https://docs.stripe.com/payments/checkout/pricing-table).

 ![CleanShot 2024-07-11 at 13.33.53@2x](https://global.discourse-cdn.com/meta/original/4X/4/7/c/47ccfc7a44503104a2a80eeff547b6c2d2c3a462.jpeg)

 ![CleanShot 2024-07-11 at 13.34.44@2x](https://global.discourse-cdn.com/meta/original/4X/6/d/4/6d439998ab4bbe3bcf0bc981f344f0a6c8e02eeb.jpeg)

In your Stripe Dashboard:

1. After you’ve created the products on Discourse, Go to **Products \> Product catalog**
2. Click on the product you’d like to include in the pricing table
3. Click `Edit product`
4. `More Options` and enter the following under `Metadata`:
  - **Key** : `group_name`
  - **Value** : The group’s name on Discourse (e.g., `trust_level_0`)

5. Click `Update product` to save

> ❗ Make sure the group name matches the group that is selected under `User_Groups` on Discourse

 ![Screenshot 2025-07-02 at 10.59.25 AM](https://global.discourse-cdn.com/meta/original/4X/e/4/d/e4d8b64243d02db5e9daf28eb417e8d65ff58cbc.png)

#### Create your Stripe pricing table

1. Go to Products \> Pricing tables
2. Create a new table and add the products you just created
3. After publishing the table, copy the pricing table ID found within the embed code (it starts with `prctbl_...`)
4. Paste the pricing table ID into your `discourse_subscriptions_pricing_table_id` and enable the subscriptions pricing table setting.
5. Click the green checkmarks to save both settings.

 ![image](https://global.discourse-cdn.com/meta/original/4X/e/d/1/ed142cda756eeca84f621f45c583a32864ca6480.png)

##### Recommended step:

When setting up the Pricing Table inside of Stripe it is recommended to link the user to your site after checkout is complete otherwise they will stay on a Stripe confirmation page without a link back to your site.

 ![A screenshot of a payment settings page showing options for supporting a service and setting up a confirmation page. (Captioned by AI)](https://global.discourse-cdn.com/meta/original/4X/8/2/a/82a754ecad0beca6aa74240fa34bb7c7db34c01f.png)

Redirecting to `https://<your-site>/my/billing/subscriptions` is a good choice for subscriptions. For one-off payments you could link directly to `https://<your-site>/my/billing/payments`.

### Automatic Tax Collecting

To enable Automatic Tax Collecting check the Site Setting box for `discourse_subscriptions_enable_automatic_tax`.

If you enable it, but you have not configured your Stripe instance properly to collect tax users may see this popup after completing the checkout process:

 ![image](https://global.discourse-cdn.com/meta/original/4X/3/6/0/360b7bd1482175b4ee805a32722ec1e5c20fcf9c.png)

There is [this guide](https://docs.stripe.com/tax/set-up) for more info, but there shouldn’t be much to do since the plugin is now passing in the appropriate `automatic_tax[enabled]=true` parameter ([step 5](https://docs.stripe.com/tax/set-up#integrate)).

Be sure you configure your registrations ([step 4](https://docs.stripe.com/tax/set-up#add-registrations)) as well:

 ![CleanShot 2024-07-10 at 13.29.55@2x](https://global.discourse-cdn.com/meta/original/4X/8/5/2/8528308428ed53cf42e4dadf0c0014042b5d9e39.png)

Here is an example Discourse Subscription Plugin transaction in Stripe showing that tax was automatically collected:

 ![image](https://global.discourse-cdn.com/meta/original/4X/c/e/d/ceda1695c775225daca3912331b536891c976441.png)

### Settings

| Name | Description |
| --- | --- |
| discourse subscriptions enabled | Enable the Discourse Subscriptions plugin. |
| discourse subscriptions extra nav subscribe | Show the subscribe button in the primary navigation |
| discourse subscriptions public key | Stripe Publishable Key |
| discourse subscriptions secret key | Stripe Secret Key |
| discourse subscriptions webhook secret | Stripe Webhook Secret |
| discourse subscriptions currency | Default Currency Code. This can be overridden when creating a subscription plan. |
| discourse subscriptions campaign enabled | Enables a campaign banner to promote supporting this community financially. |
| discourse subscriptions campaign goal | The numerical goal for your support campaign (subscribers or amount raised). |
| discourse subscriptions campaign type | Selects the type of campaign to run (subscribers or monthly amount raised). |
| discourse subscriptions campaign banner location | Selects the location of the campaign banner (top or sidebar). |
| discourse subscriptions campaign banner bg image | Upload a custom image to use as the background on the campaign banner. |
| discourse subscriptions campaign banner shadow color | Selects the color of the campaign banner drop shadow. |
| discourse subscriptions campaign show contributors | Show avatars of the most recent purchases of subscription products. |
| discourse subscriptions campaign product | The Stripe product id to send supporters when they click the button on the campaign. If this setting is blank, supporters will be directed to the main products page. |
| discourse subscriptions campaign grant | Grants the user a free month of subscriptions |
| discourse subscriptions pricing table id | The Stripe pricing table id from the embed code |
| discourse subscriptions pricing table enabled | Enables using the Stripe pricing table and replaces the existing subscribe page |
| discourse\_subscriptions\_enable\_automatic\_tax | Toggles if sales tax is going to be collected. Requires some setup in Stripe. |
| discourse\_subscriptions\_enable\_verbose\_logging | Enables more verbose logging to aid in debugging. Please do not leave permanently enabled in production. |
| | |

> :discourse2: **Hosted by us?** This plugin is available on our Pro, Business, and Enterprise hosting plans [Subscriptions | Discourse - Civilized Discussion](https://www.discourse.org/plugins/subscriptions.html)

> Last edited by @tgxworld 2026-09-08T05:47:44Z
> 
> Last checked by @MarkDoerr 2024-07-11T20:25:35Z
> 
> > **Check document**
> >
> > Perform check on document:

---

<div class="post-metadata">

### Author: ![blake](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/blake/32/157322_2.png) [@blake](https://meta.discourse.org/u/blake)
#### Post date: [December 2, 2024, 6:55pm UTC](https://meta.discourse.org/t/discourse-subscriptions-plugin/140818/685 "2024-12-02T18:55:58Z")

</div>

5 posts were split to a new topic: [A similar object exists in test mode error](https://meta.discourse.org/t/a-similar-object-exists-in-test-mode-error/339890)

---

<div class="post-metadata">

### Author: ![tvavrda](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tvavrda/32/480674_2.png) [@tvavrda](https://meta.discourse.org/u/tvavrda)
#### Post date: [February 15, 2025, 11:38am UTC](https://meta.discourse.org/t/discourse-subscriptions-plugin/140818/687 "2025-02-15T11:38:45Z")

</div>

Setting `Sidebar` seems to do nothing (latest Discourse [aeb3d717dc](https://github.com/discourse/discourse/commits/aeb3d717dcc3ed3d5a93df2906d42f2a06c9bd66), latest plugin [cc43d32a](https://github.com/discourse/discourse-subscriptions/commit/cc43d32af7866e1ce2f3e4023718131998efdf05)).

 ![The image shows a text block layout with headings for "Discourse subscriptions," "campaign banner," and "location," each including an element labeled "Top" or "Sidebar." (Captioned by AI)](https://global.discourse-cdn.com/meta/original/4X/a/c/d/acd02d5d850d048f2e735acc2fdb4014868e3c64.png)

---

<div class="post-metadata">

### Author: ![tvavrda](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tvavrda/32/480674_2.png) [@tvavrda](https://meta.discourse.org/u/tvavrda)
#### Post date: [February 15, 2025, 1:19pm UTC](https://meta.discourse.org/t/discourse-subscriptions-plugin/140818/688 "2025-02-15T13:19:00Z")

</div>

I am also getting this log message:

`Deprecation notice: The icon name "donate" has been updated to "circle-dollar-to-slot". Please use the new name in your code. Old names will be removed in Q2 2025. [deprecation id: discourse.fontawesome-6-upgrade] [info: https://meta.discourse.org/t/325349]`

EDIT: Made a PR for this  
[https://github.com/discourse/discourse-subscriptions/pull/264](https://github.com/discourse/discourse-subscriptions/pull/264)

---

<div class="post-metadata">

### Author: ![blake](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/blake/32/157322_2.png) [@blake](https://meta.discourse.org/u/blake)
#### Post date: [February 18, 2025, 4:08pm UTC](https://meta.discourse.org/t/discourse-subscriptions-plugin/140818/690 "2025-02-18T16:08:30Z")

</div>

2 posts were merged into an existing topic: [“Support Us” Banner Not Updating](https://meta.discourse.org/t/support-us-banner-not-updating/352522/6)

---

<div class="post-metadata">

### Author: ![blake](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/blake/32/157322_2.png) [@blake](https://meta.discourse.org/u/blake)
#### Post date: [February 18, 2025, 11:31pm UTC](https://meta.discourse.org/t/discourse-subscriptions-plugin/140818/694 "2025-02-18T23:31:45Z")

</div>

Hmmm… locally mine shows up in the sidebar when I switch it over.

 ![CleanShot 2025-02-18 at 16.19.43@2x](https://global.discourse-cdn.com/meta/original/4X/8/a/3/8a3307197ee92716767cfd711b37d7d2c338db35.jpeg)

If you have it on Sidebar we add this css class you can inspect your page and search for `subscription-campain-sidebar`

 ![CleanShot 2025-02-18 at 16.21.09@2x](https://global.discourse-cdn.com/meta/original/4X/8/0/6/806544110a0f691683e0b9982017535f0f6af62c.png)

Is it just staying at the top for you?

---

<div class="post-metadata">

### Author: ![tvavrda](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tvavrda/32/480674_2.png) [@tvavrda](https://meta.discourse.org/u/tvavrda)
#### Post date: [February 19, 2025, 9:09pm UTC](https://meta.discourse.org/t/discourse-subscriptions-plugin/140818/695 "2025-02-19T21:09:08Z")

</div>

Now I see. I had the Category page as default. There it doesn’t show, obviously. It does on the Latest list. So it works fine. Thanks!

---

<div class="post-metadata">

### Author: ![nathank](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/nathank/32/290039_2.png) [@nathank](https://meta.discourse.org/u/nathank)
#### Post date: [February 20, 2025, 6:57am UTC](https://meta.discourse.org/t/discourse-subscriptions-plugin/140818/696 "2025-02-20T06:57:47Z")

</div>

It really should show on the Categories page (or other default pages), shouldn’t it?

---

<div class="post-metadata">

### Author: ![rui5man](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rui5man/32/467691_2.png) [@rui5man](https://meta.discourse.org/u/rui5man)
#### Post date: [March 10, 2025, 9:40am UTC](https://meta.discourse.org/t/discourse-subscriptions-plugin/140818/697 "2025-03-10T09:40:07Z")

</div>

Due to the restrictions in Mainland China, it is difficult for Stripe to pass the review. Could you consider integrating the interfaces of Alipay or WeChat Pay?

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [March 10, 2025, 3:23pm UTC](https://meta.discourse.org/t/discourse-subscriptions-plugin/140818/698 "2025-03-10T15:23:46Z")

</div>

Similar questions in the past have an an answer like “the thing to do would be to create a plugin for Alipay or WeChat Pay”. [discourse.org](http://discourse.org) makes their money from those paying for hosting and I don’t think they have many Enterprise customers who want Alipay or WeChat pay, so you’ll need to ask in #Marketplace or develop it yourself. Perhaps you could interest Alipay or WeChat pay in funding development.

---

<div class="post-metadata">

### Author: ![tknospdr](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tknospdr/32/529762_2.png) [@tknospdr](https://meta.discourse.org/u/tknospdr)
#### Post date: [May 21, 2025, 12:29am UTC](https://meta.discourse.org/t/discourse-subscriptions-plugin/140818/699 "2025-05-21T00:29:05Z")

</div>

> [@Discourse](#):
>
> ### Configuration
> 
> 1. Install & enable the plugin
> 2. Configure Payment Gateway (Stripe)
> 3. Configure Webhooks & Events in Stripe
> 4. Add your Stripe keys (public, secret, webhook secret) under **Admin \> Plugins \> Installed \> Subscriptions \> Settings** `/admin/site_settings/category/discourse_subscriptions?filter=plugin%3Adiscourse-subscriptions`.
> 5. Create a group for your subscribers to join via purchase
> 6. Create a product and plan under **Admin \> Plugins \> Subscriptions**
> 7. Profit!

I’ve gotten 1 - 5 complete, but I guess I’m dumb or blind. I can’t seem to find the interface to set up products and plans on my server.

Ugh, nevermind… I found it. Last piece of the puzzle is that I don’t understand this:

> - To add a description to your product, add a metadata field named “description” and use that one instead. You can use Markdown.

---

<div class="post-metadata">

### Author: ![tknospdr](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tknospdr/32/529762_2.png) [@tknospdr](https://meta.discourse.org/u/tknospdr)
#### Post date: [May 22, 2025, 8:04pm UTC](https://meta.discourse.org/t/discourse-subscriptions-plugin/140818/700 "2025-05-22T20:04:08Z")

</div>

~~I believe I have everything set up correctly. If I check the setting for:~~  
~~`Subscribe button will show the embedded pricing table and Stripe Checkout will be used.`~~  
~~Then purchases work correctly, however, if I uncheck that and use the built in interface I get error boxes such as:~~

> ~~A payment method of type card was expected to be present, but this PaymentIntent does not have a payment method and none was provided. Try again providing either the payment\_method or payment\_method\_data parameters.~~

~~or~~

> ~~This customer has no attached payment source or default payment method. Please consider adding a default payment method. For more information, visit `https://stripe.com/docs/billing/subscriptions/payment-methods-setting#payment-method-priority.`~~

~~Top error is on a non-recurring plan, bottom is a recurring plan.  
Any clues on how to fix it? I like the built in interface better.~~

I figured this out, looks like as I was playing with users in the test environment, Stripe didn’t like it that I used the same Discourse user with different “subscription users”.

Also, the OP should clarify that

> To add a description to your product, add a metadata field named “description” and use that one instead. You can use Markdown.

Go to the Stripe Dashboard, click on Product Catalog, click on a Product, then click on a Price. This is where you will find the metadata fields you can add a description to.

However, it didn’t appear to work for me. I added a test description and nothing changed either using the Stripe table, or the built in layout.

---

<div class="post-metadata">

### Author: ![tobiaseigen](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tobiaseigen/32/539204_2.png) [@tobiaseigen](https://meta.discourse.org/u/tobiaseigen)
#### Post date: [June 8, 2025, 6:58pm UTC](https://meta.discourse.org/t/discourse-subscriptions-plugin/140818/701 "2025-06-08T18:58:54Z")

</div>

6 posts were merged into an existing topic: [Add different payment methods to discourse subscription](https://meta.discourse.org/t/add-different-payment-methods-to-discourse-subscription/218889/16)

---

<div class="post-metadata">

### Author: ![tobiaseigen](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tobiaseigen/32/539204_2.png) [@tobiaseigen](https://meta.discourse.org/u/tobiaseigen)
#### Post date: [June 8, 2025, 7:01pm UTC](https://meta.discourse.org/t/discourse-subscriptions-plugin/140818/702 "2025-06-08T19:01:15Z")

</div>

A post was merged into an existing topic: [Add different payment methods to discourse subscription](https://meta.discourse.org/t/add-different-payment-methods-to-discourse-subscription/218889/22)

---

<div class="post-metadata">

### Author: ![SubStrider](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/substrider/32/512604_2.png) [@SubStrider](https://meta.discourse.org/u/SubStrider)
#### Post date: [June 12, 2025, 11:35am UTC](https://meta.discourse.org/t/discourse-subscriptions-plugin/140818/703 "2025-06-12T11:35:36Z")

</div>

When I try to create a product I just get an error “500”. I am configuring this on a test setup. What can I check to find out why the server error?

 ![Screenshot 2025-06-12 at 5.04.20 PM](https://global.discourse-cdn.com/meta/original/4X/2/4/2/242c94816ca7e5a620e252cbd84bd00d71331834.jpeg)

Similar thing on coupons

 ![Screenshot 2025-06-12 at 5.08.03 PM](https://global.discourse-cdn.com/meta/original/4X/5/5/e/55e8211586e69ffb1d97e3d81b0e5492ec4465e7.png)

---

<div class="post-metadata">

### Author: ![Moin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/moin/32/554653_2.png) [@Moin](https://meta.discourse.org/u/Moin)
#### Post date: [June 12, 2025, 11:40am UTC](https://meta.discourse.org/t/discourse-subscriptions-plugin/140818/704 "2025-06-12T11:40:09Z")

</div>

Is there an entry created at the same time in {YOURFORUM}/logs ?

---

<div class="post-metadata">

### Author: ![SubStrider](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/substrider/32/512604_2.png) [@SubStrider](https://meta.discourse.org/u/SubStrider)
#### Post date: [June 12, 2025, 11:43am UTC](https://meta.discourse.org/t/discourse-subscriptions-plugin/140818/705 "2025-06-12T11:43:20Z")

</div>

Oh wow.. did not know such a page existed. Shows invalid API key. I put in some garbage for the secret key to move ahead and configure the subscription packages for now and come back to keys later when I am ready to test.

---

<div class="post-metadata">

### Author: ![SubStrider](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/substrider/32/512604_2.png) [@SubStrider](https://meta.discourse.org/u/SubStrider)
#### Post date: [June 13, 2025, 9:12am UTC](https://meta.discourse.org/t/discourse-subscriptions-plugin/140818/706 "2025-06-13T09:12:28Z")

</div>

Was able to configure the plugin just fine but then I realized, this plugin only allows for recurring subscriptions. Not one time subscriptions which expire after the defined period.

Like charge X amount for 30 days. After 30 days the user gets removed from the premium group. They can buy it again if they want. Typically I offer 1 month, 3 month, 12 month memberships.

Stripe requires me to register as a firm to be able to support recurring payments. I am taking one time payments on XenForo and the XenForo native feature handles the subscription expiry and removal from group membership.

This completely obliterates my plan to move to discourse within a month. 😢

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [June 13, 2025, 11:26am UTC](https://meta.discourse.org/t/discourse-subscriptions-plugin/140818/707 "2025-06-13T11:26:06Z")

</div>

I have a solution. I can help you make a github action that will pull data from [data explorer](https://meta.discourse.org/t/32566?silent=true) that includes the username and group id to remove them from and then change their group accordingly.

I am doing it for a client that is moving to discourse and has a custom field with dates in it. So we need to move users to a espiring-soon group to give them a banner and then another to remove them from the paid group when the time is up.

If you’ve got a budget you can contact me or ask in #Marketplace. I’m planning a blog post about it with a general purpose example, if I ever get a break.

---

<div class="post-metadata">

### Author: ![SubStrider](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/substrider/32/512604_2.png) [@SubStrider](https://meta.discourse.org/u/SubStrider)
#### Post date: [July 1, 2025, 2:29pm UTC](https://meta.discourse.org/t/discourse-subscriptions-plugin/140818/708 "2025-07-01T14:29:48Z")

</div>

Hello, have got the subscriptions to work fine till the time the callback comes from Stripe. I am using Stripe Pricing table.

I can see the subscription has registered successfully on admin/plugins/discourse-subscriptions/subscriptions page.

However the user has not moved to the required user group.

I have configured the product with the exact same Product Name as on Stripe and I have also created a pricing plan with group selected. The price I have kept zero on the pricing plan as I am assuming for Stripe pricing table configuration it is irrelevant.

What am I missing?

[Next page](https://meta.discourse.org/t/discourse-subscriptions-plugin/140818.md?page=2)
