Create account
Sign in
Home
Payments
Business operations
Financial services
Developer tools
Security
All products
Home
Payments
Business operations
Home
Payments
Business operations
Financial services
Developer tools
Support
Overview
Overview
Customers
Products and Prices
Tax Rates
Customer portal
Quotes
Start with a use case
Subscriptions with Checkout
Fixed-price subscriptions with Elements
Metered billing with Elements
Per-seat billing with Elements
Manage subscriptions
How subscriptions work
Subscription webhooks
Change subscriptions
Strong Customer Authentication (SCA)
Improved tax support
Invoices API updates
Migrating to Prices
Additional features
Adding taxes
Applying discounts
Backdating subscriptions
Decimal amounts
Metered billing
Multiple subscriptions
Prorations
Setting quantities
Subscriptions with Connect
Subscriptions with multiple products
Subscription schedules
Tiered pricing
Quantity transformation
Using trial periods
Testing
Add payment methods
Bacs Direct Debit in the UK
BECS Direct Debit in Australia
SEPA Direct Debit in the EU
Invoice customers
How invoices work
Create an invoice
Customize invoices
Hosted invoice page
Additional features
Revenue recognition
Overview
Reports
Methodology
Examples
Overrides
Testing
billing
·
HomePaymentsSubscriptions and invoicesAdditional features

Working with multiple subscriptions

Create multiple subscriptions for a single customer by subscribing them to more than one product or different price of the same product.

You can now model subscriptions more flexibly using the Prices API. It replaces the Plans API and is backwards compatible to simplify your migration. If you’re new to Stripe, learn how to create products and prices. If you already use the Plans API, learn how to update your integration.

Stripe offers the ability to simultaneously create multiple subscriptions on a single customer. This capability is useful when you want to make it possible for your customers to subscribe to multiple products with separate intervals. Each subscription has its own separate billing cycle, invoice, and charge—even if the underlying prices have the same billing interval.

If you want to create multiple subscriptions for a customer with a single billing cycle and invoice, you can combine multiple products in one subscription instead of using multiple subscriptions.

Create multiple subscriptions on a customer by using the same create subscription code:

curl Ruby Python PHP Java Node Go .NET
curl https://api.stripe.com/v1/subscriptions \ -u sk_test_4eC39HqLyjWDarjtT1zdp7dc: \ -d customer=cus_4fdAW5ftNQow1a \ -d "items[0][price]"=price_CZB2krKbBDOkTS curl https://api.stripe.com/v1/subscriptions \ -u sk_test_4eC39HqLyjWDarjtT1zdp7dc: \ -d customer=cus_4fdAW5ftNQow1a \ -d "items[0][price]"=price_CZB1AX3KOacNJw
curl https://api.stripe.com/v1/subscriptions \ -u sk_test_4eC39HqLyjWDarjtT1zdp7dc: \ -d customer=cus_4fdAW5ftNQow1a \ -d "items[0][price]"=price_CZB2krKbBDOkTS curl https://api.stripe.com/v1/subscriptions \ -u sk_test_4eC39HqLyjWDarjtT1zdp7dc: \ -d customer=cus_4fdAW5ftNQow1a \ -d "items[0][price]"=price_CZB1AX3KOacNJw
# Set your secret key. Remember to switch to your live secret key in production! # See your keys here: https://dashboard.stripe.com/account/apikeys Stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc' sub1 = Stripe::Subscription.create({ customer: 'cus_4fdAW5ftNQow1a', items: [{price: 'price_CZB2krKbBDOkTS'}], }) sub2 = Stripe::Subscription.create({ customer: 'cus_4fdAW5ftNQow1a', items: [{price: 'price_CZB1AX3KOacNJw'}], })
# Set your secret key. Remember to switch to your live secret key in production! # See your keys here: https://dashboard.stripe.com/account/apikeys Stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc' sub1 = Stripe::Subscription.create({ customer: 'cus_4fdAW5ftNQow1a', items: [{price: 'price_CZB2krKbBDOkTS'}], }) sub2 = Stripe::Subscription.create({ customer: 'cus_4fdAW5ftNQow1a', items: [{price: 'price_CZB1AX3KOacNJw'}], })
# Set your secret key. Remember to switch to your live secret key in production! # See your keys here: https://dashboard.stripe.com/account/apikeys stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc' sub1 = stripe.Subscription.create( customer='cus_4fdAW5ftNQow1a', items=[{'price': 'price_CZB2krKbBDOkTS'}], ) sub2 = stripe.Subscription.create( customer='cus_4fdAW5ftNQow1a', items=[{'price': 'price_CZB1AX3KOacNJw'}], )
# Set your secret key. Remember to switch to your live secret key in production! # See your keys here: https://dashboard.stripe.com/account/apikeys stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc' sub1 = stripe.Subscription.create( customer='cus_4fdAW5ftNQow1a', items=[{'price': 'price_CZB2krKbBDOkTS'}], ) sub2 = stripe.Subscription.create( customer='cus_4fdAW5ftNQow1a', items=[{'price': 'price_CZB1AX3KOacNJw'}], )
// Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys \Stripe\Stripe::setApiKey('sk_test_4eC39HqLyjWDarjtT1zdp7dc'); $sub1 = \Stripe\Subscription::create([ 'customer' => 'cus_4fdAW5ftNQow1a', 'items' => [['price' => 'price_CZB2krKbBDOkTS']], ]); $sub2 = \Stripe\Subscription::create([ 'customer' => 'cus_4fdAW5ftNQow1a', 'items' => [['price' => 'price_CZB1AX3KOacNJw']], ]);
// Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys \Stripe\Stripe::setApiKey('sk_test_4eC39HqLyjWDarjtT1zdp7dc'); $sub1 = \Stripe\Subscription::create([ 'customer' => 'cus_4fdAW5ftNQow1a', 'items' => [['price' => 'price_CZB2krKbBDOkTS']], ]); $sub2 = \Stripe\Subscription::create([ 'customer' => 'cus_4fdAW5ftNQow1a', 'items' => [['price' => 'price_CZB1AX3KOacNJw']], ]);
// Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys Stripe.apiKey = "sk_test_4eC39HqLyjWDarjtT1zdp7dc"; SubscriptionCreateParams params1 = SubscriptionCreateParams.builder() .setCustomer("cus_4fdAW5ftNQow1a") .addItem( SubscriptionCreateParams.Item.builder() .setPrice("price_CZB2krKbBDOkTS") .build()) .build(); Subscription subscription1 = Subscription.create(params1); SubscriptionCreateParams params2 = SubscriptionCreateParams.builder() .setCustomer("cus_4fdAW5ftNQow1a") .addItem( SubscriptionCreateParams.Item.builder() .setPrice("price_CZB1AX3KOacNJw") .build()) .build(); Subscription subscription2 = Subscription.create(params2);
// Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys Stripe.apiKey = "sk_test_4eC39HqLyjWDarjtT1zdp7dc"; SubscriptionCreateParams params1 = SubscriptionCreateParams.builder() .setCustomer("cus_4fdAW5ftNQow1a") .addItem( SubscriptionCreateParams.Item.builder() .setPrice("price_CZB2krKbBDOkTS") .build()) .build(); Subscription subscription1 = Subscription.create(params1); SubscriptionCreateParams params2 = SubscriptionCreateParams.builder() .setCustomer("cus_4fdAW5ftNQow1a") .addItem( SubscriptionCreateParams.Item.builder() .setPrice("price_CZB1AX3KOacNJw") .build()) .build(); Subscription subscription2 = Subscription.create(params2);
// Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys const Stripe = require('stripe'); const stripe = Stripe('sk_test_4eC39HqLyjWDarjtT1zdp7dc'); const sub1 = await stripe.subscriptions.create({ customer: 'cus_4fdAW5ftNQow1a', items: [{price: 'price_CZB2krKbBDOkTS'}], }); const sub2 = await stripe.subscriptions.create({ customer: 'cus_4fdAW5ftNQow1a', items: [{price: 'price_CZB1AX3KOacNJw'}], });
// Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys const Stripe = require('stripe'); const stripe = Stripe('sk_test_4eC39HqLyjWDarjtT1zdp7dc'); const sub1 = await stripe.subscriptions.create({ customer: 'cus_4fdAW5ftNQow1a', items: [{price: 'price_CZB2krKbBDOkTS'}], }); const sub2 = await stripe.subscriptions.create({ customer: 'cus_4fdAW5ftNQow1a', items: [{price: 'price_CZB1AX3KOacNJw'}], });
// Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys stripe.Key = "sk_test_4eC39HqLyjWDarjtT1zdp7dc" items1 := []*stripe.SubscriptionItemsParams{ { Price: stripe.String("price_CZB2krKbBDOkTS"), }, } params1 := &stripe.SubscriptionParams{ Customer: stripe.String("cus_4fdAW5ftNQow1a"), Items: items1, } subscription1, _ := sub.New(params1) items2 := []*stripe.SubscriptionItemsParams{ { Price: stripe.String("price_CZB1AX3KOacNJw"), }, } params2 := &stripe.SubscriptionParams{ Customer: stripe.String("cus_4fdAW5ftNQow1a"), Items: items2, } subscription2, _ := sub.New(params2)
// Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys stripe.Key = "sk_test_4eC39HqLyjWDarjtT1zdp7dc" items1 := []*stripe.SubscriptionItemsParams{ { Price: stripe.String("price_CZB2krKbBDOkTS"), }, } params1 := &stripe.SubscriptionParams{ Customer: stripe.String("cus_4fdAW5ftNQow1a"), Items: items1, } subscription1, _ := sub.New(params1) items2 := []*stripe.SubscriptionItemsParams{ { Price: stripe.String("price_CZB1AX3KOacNJw"), }, } params2 := &stripe.SubscriptionParams{ Customer: stripe.String("cus_4fdAW5ftNQow1a"), Items: items2, } subscription2, _ := sub.New(params2)
// Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys StripeConfiguration.ApiKey = "sk_test_4eC39HqLyjWDarjtT1zdp7dc"; var items1 = new List<SubscriptionItemOptions> { new SubscriptionItemOptions {Price = "price_CZB2krKbBDOkTS"} }; var options1 = new SubscriptionCreateOptions { Items = items1, }; var service = new SubscriptionService(); Subscription sub1 = service.Create(options1); var items2 = new List<SubscriptionItemOptions> { new SubscriptionItemOptions {Price = "price_CZB1AX3KOacNJw"} }; var options2 = new SubscriptionCreateOptions { Customer = "cus_4fdAW5ftNQow1a", Items = items2, }; Subscription sub2 = service.Create(options2);
// Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys StripeConfiguration.ApiKey = "sk_test_4eC39HqLyjWDarjtT1zdp7dc"; var items1 = new List<SubscriptionItemOptions> { new SubscriptionItemOptions {Price = "price_CZB2krKbBDOkTS"} }; var options1 = new SubscriptionCreateOptions { Items = items1, }; var service = new SubscriptionService(); Subscription sub1 = service.Create(options1); var items2 = new List<SubscriptionItemOptions> { new SubscriptionItemOptions {Price = "price_CZB1AX3KOacNJw"} }; var options2 = new SubscriptionCreateOptions { Customer = "cus_4fdAW5ftNQow1a", Items = items2, }; Subscription sub2 = service.Create(options2);

Using quantities instead

If you create multiple subscriptions with the same price, each subscription is independent, including payments and billing cycles. If that’s not what you want, create a single subscription using multiple quantities instead.

A customer can be subscribed to multiple products or even to a single product multiple times. Each subscription has a unique ID and its state is handled independently from the customer’s other subscriptions. Each subscription also has its own independent billing cycle, based on the billing cycle anchor of the subscription.

When a customer has multiple subscriptions, the Customer object’s subscriptions property provides a list of every subscription:

{ "id": "cus_4fdAW5ftNQow1a", "object": "customer", "subscriptions": { "object": "list", "data": [ { "id": "sub_9RRl3XywPg2P5H", "object": "subscription", ... "price": { "id": "price_CZB2krKbBDOkTS", "object": "price", "amount": 2995, ... } }, { "id": "sub_9RRlIq2t9obFLI", "object": "subscription", ... "price": { "id": "price_CZB1AX3KOacNJw", "object": "price", "amount": 1295, ... } }, ] ... } ... }
{ "id": "cus_4fdAW5ftNQow1a", "object": "customer", "subscriptions": { "object": "list", "data": [ { "id": "sub_9RRl3XywPg2P5H", "object": "subscription", ... "price": { "id": "price_CZB2krKbBDOkTS", "object": "price", "amount": 2995, ... } }, { "id": "sub_9RRlIq2t9obFLI", "object": "subscription", ... "price": { "id": "price_CZB1AX3KOacNJw", "object": "price", "amount": 1295, ... } }, ] ... } ... }

Next steps

Now that you understand how to create multiple subscriptions on a single customer, you may want to check out:

  • Setting Quantities
  • Using Trial Periods
  • Subscription API
Was this page helpful?
Questions? Contact us.
Developer tutorials on YouTube.
You can unsubscribe at any time. Read our privacy policy.