Skip to content
Create account
or
Sign in
The Stripe Docs logo
/
Ask AI
Create account
Sign in
Get started
Payments
Revenue
Platforms and marketplaces
Money management
Developer resources
Overview
About Stripe payments
    Overview
    Currencies
    Declines
    Payouts
    Recurring payments
    3D Secure authentication
    Refund and cancel payments
    Balances and settlement time
    Receipts
    Handle webhook events
    SCA readiness
    Older APIs
Upgrade your integration
Payments analytics
Online payments
OverviewFind your use caseManaged Payments
Use Payment Links
Build a checkout page
Build an advanced integration
Build an in-app integration
Payment methods
Add payment methods
Manage payment methods
Faster checkout with Link
Payment interfaces
Payment Links
Checkout
Web Elements
In-app Payments
Payment scenarios
Handle multiple currencies
Custom payment flows
Flexible acquiring
Orchestration
In-person payments
Terminal
Beyond payments
Incorporate your company
Crypto
Financial Connections
Climate
Understand fraud
Radar fraud protection
Manage disputes
Verify identities
HomePaymentsAbout Stripe payments

Recurring payments

Understand your options for charging customers on a recurring basis.

Stripe offers several ways to charge customers on a recurring basis. This guide helps you understand which method or approach best supports your business.

This guide offers a few ways to understand your options:

  • Use cases: Find the right use case for your business.
  • Types of recurring payments: See all the recurring payment types that Stripe supports.
  • Stripe products: Check which Stripe products support your recurring payment use case.

Use cases

Accept recurring payments

Let customers pay you regularly and repeatedly through Stripe.

Split purchases into a few payments

Create installment plans to let customers pay you a total amount in a limited number of partial payments.

Enable customers to manage their own subscriptions

Set up the customer portal so your customers can create and manage their own subscriptions.

Accept recurring donations

Let customers make donations to your organization on a regular basis.

Migrate existing subscriptions to Stripe

Move your existing subscriptions from a third-party service to Stripe.

Types of recurring payments

The following tabs describe the different types of recurring payments that Stripe supports.

Overview

Use Stripe Billing to create and manage your subscriptions through the Dashboard or programmatically through the API.

  • Create a payment link with a recurring product.
  • Create a subscription through the Dashboard or build a subscriptions integration.
  • Create subscription schedules for complex subscription use cases.
  • If you use Connect, create subscriptions for connected accounts and end customers.
Features
  • No coding required. (You can optionally use the Subscriptions API and prebuilt components like Stripe Checkout and Elements to build a programmatic subscriptions integration.)
  • Customize appearance and behavior in your app.
  • Supports multiple products and prices in different currencies.
  • Supports responsive web and mobile native.
  • Website required. You can use Stripe Elements to customize the appearance of payment forms.
Use cases
  • Accept payments from customers on a recurring basis
  • Accept recurring donations
  • Enable customers to manage their own subscriptions
  • Migrate existing subscriptions to Stripe

Stripe products for recurring payments

The following table describes which Stripe products support recurring payments.

ProductFeaturesUse cases
Payment Links
  • No coding
  • Customize branding
  • One payment link for one or more products
  • Mobile support for responsive web
  • No website required; share link through SMS, email, or social media
  • Stripe Tax support
  • Accept recurring payments
  • Enable customers to manage their own subscriptions
  • Accept recurring donations
Invoicing
  • No coding required. (You can optionally use the Invoices API and prebuilt components like Stripe Checkout and Elements to build a programmatic invoicing integration.)
  • Customize branding and templates.
  • One invoice for one or more products. Optionally combine one-time and recurring products.
  • Mobile support for responsive web.
  • No website required. Share invoices through customer portal, hosted invoice page, or as PDFs.
  • Stripe Tax support.
  • Accept recurring payments
  • Enable customers to manage their own subscriptions
  • Accept recurring donations
Subscriptions
  • No coding required. (You can optionally use the Subscriptions API and prebuilt components like Stripe Checkout and Elements to build a programmatic subscriptions integration.)
  • Customize full appearance of payment forms and checkout experience.
  • Multiple products, prices, pricing models, and currencies.
  • Mobile support for responsive web.
  • No website required. You can also add subscriptions to your site.
  • Stripe Tax support.
  • Accept recurring payments
  • Enable customers to manage their own subscriptions
  • Accept recurring donations
Checkout
  • Minimal coding
  • Customize branding
  • Multiple products and prices in different currencies
  • Mobile support for responsive web
  • Website required, but Stripe hosts the payment page
  • Stripe Tax support
  • Accept recurring payments
  • Enable customers to manage their own subscriptions
  • Split purchases into a few payments
  • Accept recurring donations
Elements
  • More coding
  • Customize full appearance
  • Multiple products and prices in different currencies
  • Responsive web and mobile native
  • Website required; you add Elements to your payment page
  • Stripe Tax supported with your own tax integration
  • Accept recurring payments
  • Enable customers to manage their own subscriptions
  • Split purchases into a few payments
  • Accept recurring donations
API
  • Most coding
  • Customize full appearance, accept payments through your own UI
  • Multiple products and prices in different currencies
  • Website required; accept payments through your own UI
  • Stripe Tax supported with your own tax integration
  • Accept recurring payments
  • Enable customers to manage their own subscriptions
  • Split purchases into a few payments
  • Accept recurring donations

Accept recurring payments

Stripe offers several ways for you to accept recurring payments. Use Subscriptions with Stripe Billing, PaymentIntents, SetupIntents, or Invoicing.

Use subscriptions to accept recurring payments

If you have a business model where your customers pay you on a regular basis, you typically want to offer them subscriptions. Stripe offers several ways to create and manage subscriptions.

If you use Organizations, you can view a list of your subscriptions across all of your accounts. You can also filter this list by account. However, you can create and analyze subscriptions only from the Subscriptions page at the account level.

Note

Subscriptions are part of Stripe Billing, which has its own pricing plan.

Create subscriptions from the Dashboard

To create a subscription:

  1. In the Stripe Dashboard, go to the subscriptions page.

  2. Click +Create subscription.

  3. Find or add a customer.

  4. Enter the pricing and product information. You can add multiple products.

  5. Set the start and end date of the subscription.

  6. Set the starting date for the billing cycle. This defines when the next invoice is generated. Depending on your settings, the saved payment method on file might also be charged automatically on the billing cycle date. Learn more about the billing cycle date.

  7. (Recommended) Configure email reminders and notifications for subscribers.

  8. (Optional) Add the default tax behavior, a coupon, a free trial, or metadata.

  9. (Optional) Enable revenue recovery features in the Dashboard, which can help you reduce and recover failed subscription payments. You can automatically retry failed payments, build custom automations, configure customer emails, and so on.

Create subscriptions with Payment Links

To create subscriptions with Payment Links, select Sell a subscription when you create the payment link. Then, share the link with your customers. Learn more about creating and sharing payment links.

Create subscriptions with Checkout

If you’re using Checkout as your payment UI, create subscriptions with the Checkout Sessions API. In typical integrations, you add a button to your site that calls the backend of your application to create the checkout session. Read the subscriptions integration guide to learn more.

After a payment succeeds, the subscription becomes active and the Checkout Session object contains references to the Customer and Subscription objects.

To create a subscription with this API, pass mode=subscription:

server.rb
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
View full sample
# Set your secret key. Remember to switch to your live secret key in production. # See your keys here: https://dashboard.stripe.com/apikeys Stripe.api_key =
'sk_test_BQokikJOvBiI2HlWgH4olfQ2'
# The price ID passed from the front end. # price_id = params['priceId'] price_id = '{{PRICE_ID}}' session = Stripe::Checkout::Session.create({ success_url: 'https://example.com/success.html?session_id={CHECKOUT_SESSION_ID}', cancel_url: 'https://example.com/canceled.html', mode: 'subscription', line_items: [{ # For usage-based billing, don't pass quantity quantity: 1, price: price_id, }], subscription_data: { billing_mode: { type: 'flexible' } } }) # Redirect to the URL returned on the session # redirect session.url, 303

Create subscriptions with Elements

If you’re using Elements as your payment UI, create subscriptions with the Subscriptions API.

Pass the selected price ID and the ID of the customer record to the backend. Then, on the backend, create the subscription with status incomplete using payment_behavior=default_incomplete. Then return the client_secret from the subscription’s first PaymentIntent to the frontend to complete payment. Learn how to build a subscriptions integration with Elements.

server.rb
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
# Set your secret key. Remember to switch to your live secret key in production. # See your keys here: https://dashboard.stripe.com/apikeys Stripe.api_key =
'sk_test_BQokikJOvBiI2HlWgH4olfQ2'
post '/create-subscription' do content_type 'application/json' data = JSON.parse(request.body.read) customer_id = cookies[:customer] price_id = data['priceId'] # Create the subscription. Note we're expanding the Subscription's # latest invoice and that invoice's confirmation_secret # so we can pass it to the front end to confirm the payment subscription = Stripe::Subscription.create( customer: customer_id, items: [{ price: price_id, }], payment_behavior: 'default_incomplete', payment_settings: {save_default_payment_method: 'on_subscription'}, billing_mode: {type: 'flexible'}, expand: ['latest_invoice.confirmation_secret'] ) { subscriptionId: subscription.id, clientSecret: subscription.latest_invoice.confirmation_secret.client_secret }.to_json end

At this point, the subscription is inactive and awaiting payment. In the following example response, the minimum fields you must store are highlighted. We recommend that you also store any field that your application frequently accesses.

{ "id": "sub_JgRjFjhKbtD2qz", "object": "subscription", "application_fee_percent": null, "automatic_tax": { "disabled_reason": null, "enabled": false, "liability": "null" }, "billing_cycle_anchor": 1623873347,

Create subscriptions through the Subscriptions API

Use the Subscriptions API to create basic subscriptions for recurring prices. Learn how to build an end-to-end subscriptions integration or use the immersive quickstart.

Here’s how to create a subscription where the initial payment also includes a one-time purchase (like a service fee):

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/subscriptions \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d customer=
{{CUSTOMER_ID}}
\ -d "items[0][price]"={{RECURRING_PRICE_ID}} \ -d "add_invoice_items[0][price]"={{ONE_TIME_PRICE_ID}}

Create subscriptions with the Subscription Schedules API

For more complex subscription scenarios, use the Subscription Schedules API. Learn more about subscription schedules and their use cases.

Here’s how to create a recurring subscription:

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/subscriptions \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d customer=cus_Gk0uVzT2M4xOKD \ -d "items[0][price]"=price_F52b2UdntfQsfR \ -d "expand[0]"="latest_invoice.payments" \ -d "expand[1]"="latest_invoice.confirmation_secret" \ -d off_session=true

Save and reuse payment information for recurring charges

Set up recurring payments by charging a customer’s saved payment information. Capture the payment details with a PaymentIntent or SetupIntent. Then use the client secret associated with those objects to charge the customer later. This approach is good if you don’t want to use Subscriptions or have implemented your own subscription logic. These steps only cover what’s needed to collect payment method information and to charge it. Read the guide for complete integration details to save and reuse payment details.

  • Use PaymentIntents to capture payment information during a checkout flow. Charge the customer on-session for their immediate purchase, then charge them later. This flow is good for: charging customers for an initial payment in a series of recurring payments, or charging for a one-time setup fee for a subscription service.
  • Use SetupIntents to capture payment information outside of a checkout flow. Collect the details from the customer and store them in a SetupIntent. This flow is good for: capturing payment information while you onboard a customer that you intend to charge later, or for setting up free trials.
  1. As part of the checkout process, create a PaymentIntent and pass setup_future_usage. In most cases, you want to use off_session for recurring payments. Read more about optimizing future payments.
    Command Line
    cURL
    Stripe CLI
    Ruby
    Python
    PHP
    Java
    Node.js
    Go
    .NET
    No results
    curl https://api.stripe.com/v1/payment_intents \ -u "
    sk_test_BQokikJOvBiI2HlWgH4olfQ2
    :"
    \ -d customer=
    {{CUSTOMER_ID}}
    \ -d amount=1099 \ -d currency=usd \ -d setup_future_usage=off_session \ -d "automatic_payment_methods[enabled]"=true
  2. Save the payment method information and associate it with the customer record. If you’re using Stripe Checkout, pass setup_future_usage in the payment_intent_data array. See an example of how to save payment details with Checkout. If you’re using Elements, capture the information with the Address Element.
  3. When you’re ready, retrieve the payment method information for the customer and charge them by creating another PaymentIntent. To reduce the chance of declines, pass off_session and confirm as True. These arguments indicate that the customer is not present and enable immediate confirmation.
    Command Line
    curl
    Stripe CLI
    Ruby
    Python
    PHP
    Java
    Node.js
    Go
    .NET
    No results
    curl https://api.stripe.com/v1/payment_intents \ -u
    sk_test_BQokikJOvBiI2HlWgH4olfQ2
    :
    \ -d amount=1099 \ -d currency=usd \ # In the latest version of the API, specifying the `automatic_payment_methods` parameter is optional because Stripe enables its functionality by default. -d "automatic_payment_methods[enabled]"=true \ -d customer="{{CUSTOMER_ID}}" \ -d payment_method="{{PAYMENT_METHOD_ID}}" \ -d return_url="https://example.com/order/123/complete" \ -d off_session=true \ -d confirm=true

Use invoices to automatically charge customers

You can use invoices to handle recurring payments. For example, the Powdur company has a monthly landscaping service. Each month, the landscapers send Powdur an invoice and automatically charge the payment method they have on file for Powdur.

The following sections describe your options for using invoices for recurring payments.

Create an invoice through the Dashboard

To create and send an invoice, complete the following steps:

  1. In the Dashboard, go to the Invoices page, and click Create Invoice to open the invoice editor. Whenever you exit the invoice editor, Stripe saves a draft. (To delete a draft invoice, click the overflow menu () next to an invoice on the Invoices page.)

  2. Select an existing customer or click Add new customer. For new customers, you have to enter a name. You can optionally add an email address or other details.

  3. (Optional) Click the overflow menu () in the Items section to open the Items Options dialog. Choose the desired currency and tax rendering option for the invoice.

  4. Select Add one-time item to create a single, one-time item. To save a product for future use, select Create new product.

  5. Enter the Quantity and Price for your new item or product.

  6. (Optional) Click the Item options under each item to add a tax rate, coupon, or supply date. You can also use the Dashboard to create a tax rate or coupon.

  7. (Optional) Use the Memo box to provide more information to your customer. You can edit the memo on an invoice by clicking Edit memo on its details page.

  8. Select one of the following invoice delivery options:

    • Automatically charge a payment method on file: Immediately charges the invoice amount to your customer’s payment method that you have on file.

    • Send invoice or payment page link manually: Provides a payment link for you to send to customers after you confirm the invoice.

    • Email invoice with link: Enables Stripe to send an email with a payment page and an invoice PDF.

    • Email invoice without link: Enables Stripe to send an invoice PDF only.

  9. (Optional) To schedule this invoice to finalize automatically at some date in the future, select Schedule send date. Or, depending on what you selected in the previous step, Schedule charge date or Schedule finalization date.

  10. (Optional) Expand Advanced options, and add custom fields. To learn more, see Net prices and taxes. Expand Advanced options, and add custom fields.

  11. Click Review invoice and decide whether you want to include additional emails or continue editing. Send the invoice.

Create an invoice with the Dashboard

Create an invoice through the API

You can create an invoice through the Invoices API. You need to create product, price, and customer before you create the invoice because you specify those values for the invoice and invoice items. Read the guide to understand all the steps for integrating with the Invoicing API. Or see the quickstart for an immersive, code-first experience.

To create an invoice through the API, follow these steps:

Set the collection_method attribute to send_invoice. For Stripe to mark an invoice as past due, you must add the days_until_due parameter. When you send an invoice, Stripe emails the invoice to the customer with payment instructions.

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/invoices \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d customer=
{{CUSTOMER_ID}}
\ -d collection_method=send_invoice \ -d days_until_due=30

Then, create an invoice item by passing in the customer id, product price, and invoice ID invoice.

The maximum number of invoice items is 250.

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/invoiceitems \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d customer=
{{CUSTOMER_ID}}
\ -d "pricing[price]"=
{{PRICE_ID}}
\ -d invoice=
{{INVOICE_ID}}

If you set auto_advance to false, you can continue to modify the invoice until you finalize it. To finalize a draft invoice, use the Dashboard, send it to the customer, or pay it. You can also use the Finalize API:

Note

If you created the invoice in error, void it. You can also mark an invoice as uncollectible.

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl -X POST https://api.stripe.com/v1/invoices/
{{INVOICE_ID}}
/finalize
\ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"

Schedule recurring invoices

If you want to set up a recurring invoice, create a subscription.

You can choose how to collect payment:

  • Send an invoice to the customer. You can set the collection terms, including due date and accepted payment methods.
  • Automatically charge a saved payment method. If the customer has a saved payment method, Stripe automatically charges that method.

In the Dashboard, you configure payment collection in the subscription editor. In the API, you configure payment collection with the collection_method parameter.

You can also configure Stripe to send customers reminder emails about unpaid recurring invoices.

Stripe automatically generates an invoice for each billing cycle in a subscription. Learn more about the invoice lifecycle for subscriptions.

Split purchases into a few payments

Offer your customers payment plans in installments with Subscription Schedules API (part of Stripe Billing) or buy now, pay later methods. If your business is based in Mexico, you can offer card payments in installments.

Create an installment plan with Subscription Schedules

Installment plans allow customers to make partial payments for a set amount of time until the total amount is paid. For example, when The Pacific buys new printing presses, they sell the used ones to other publications. Smaller publications rarely have enough funds to pay for a printing press upfront, so they pay using an installment plan instead.

For most presses, The Pacific charges 1,000 USD per month so a reusable price is created:

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/prices \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d unit_amount=100000 \ -d currency=usd \ -d product=prod_Hh99apo1OViyGW \ -d "recurring[interval]"=month

Depending on the make, model, and age of the printing press, The Pacific charges different amounts. This example charges 1,000 USD each month for 6 months, for a total of 6,000 USD.

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/subscription_schedules \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d customer=
{{CUSTOMER_ID}}
\ -d start_date=now \ -d end_behavior=cancel \ -d "phases[0][items][0][price]"=
{{PRICE_ID}}
\ -d "phases[0][items][0][quantity]"=1 \ -d "phases[0][iterations]"=6

The number of iterations is multiplied by the price’s interval—6 monthly payments in this example—to determine the number of times the customer is charged. end_behavior determines what happens to the subscription after the last iteration is complete. In an installment plan, the subscription isn’t needed anymore so end_behavior is set to cancel.

In rare cases, The Pacific charges less than the usual 1,000 USD per month. In these scenarios, they use price_data to create a single-use price. This example creates a 500 USD price, and charges monthly for 6 months:

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/subscription_schedules \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d customer=
{{CUSTOMER_ID}}
\ -d start_date=now \ -d end_behavior=cancel \ -d "phases[0][items][0][price_data][currency]"=usd \ -d "phases[0][items][0][price_data][product]"=prod_Hh99apo1OViyGW \ -d "phases[0][items][0][price_data][recurring][interval]"=month \ -d "phases[0][items][0][price_data][unit_amount]"=50000 \ -d "phases[0][items][0][quantity]"=1 \ -d "phases[0][iterations]"=6

Use a buy now, pay later payment method

Stripe supports several different buy now, pay later methods. These methods let customers pay in installments over time. You’re paid immediately and in full. Your customers pay nothing or only a portion of the total purchase. Buy now, pay later methods help retailers boost conversion, increase average cart size, and reach new customers who don’t have credit cards.

Learn more about buy now, pay later methods

Accept card payments in installments

Only available in Mexico

If your business is based in Mexico, you can offer your customers installments for card payments, or meses sin intereses. Using this method adds an additional fee to the standard credit card transaction fee.

Accept installments with a Stripe-hosted checkout page (Stripe Checkout), prebuilt UI components (Stripe Elements), the Invoicing API, or through Payment Links with no code.

Some connectors and plugins also support installments.

Requirements for meses sin interes

There are restrictions on which transactions and cards can use meses sin intereses. You don’t need to implement these rules yourself. Stripe automatically determines meses sin intereses eligibility after you set up the payment method.

  • Stripe only supports installments for Stripe Mexico accounts.
  • The payment method must be a credit card issued in Mexico.
  • The card must be a consumer card–installments don’t support corporate cards.
  • The card must be issued by one of our supported issuers.
  • The currency value must be MXN (pesos).
  • The total payment amount must be above a minimum transaction amount. Stripe provides a minimum transaction amount based on the number of months in the plan selected. You can specify which installment plans you want to enable and define your own custom minimum and maximum transaction amounts by configuring custom installment settings in the Dashboard.

Enable customers to manage their own subscriptions

If you want your customers to manage their own accounts and recurring subscriptions, use the customer portal. Stripe hosts the customer portal, which allows your customers to self-manage their payment details, download invoices, and manage their subscriptions in one place. Read the no-code customer portal guide for complete details.

Integrate with the customer portal API

Set up the customer portal

  1. In the Stripe Dashboard, activate the customer portal link on the customer portal settings page.
  2. On the same page, go through the configuration options for the customer portal. Set up the customer portal without writing any code. Learn more about all the configuration options.
  3. Share the portal link with your customers.
  4. Optional Customize the branding and prefill email addresses by adding the prefilled_email URL parameter to the portal link.

See what your customers can do in the customer portal

View demo

Accept recurring donations

You can accept recurring donations with Stripe, in the same way as recurring payments. For example, you have a llama rescue organization, Llama House, and want to allow supporters to choose an amount for a recurring, monthly donation. You can use Payment Links to create a link to share on social media and email. From the same payment link, you can also generate a QR code to add to flyers, and an embeddable buy button for your website–all from the Dashboard.

Accept recurring donations with Payment Links

  1. In the Stripe Dashboard, create a payment link.
  2. Select Products or subscriptions.
  3. Find or add a recurring product that represents the recurring donation.
  4. Under Advanced options, toggle the call to action option to Donate.
  5. Create the link and share it. You can share the link directly, embed it as a button on your site, or generate a QR code.
  6. Track payments associated with the payment link in the payments overview in the Dashboard.

Learn more about creating and sharing payment links.

Migrate existing subscriptions to Stripe

If you have existing subscriptions in another system, you can migrate them to Stripe Billing. Read the guide for more information.

See also

  • Get an overview of subscriptions
  • Create a payment link
  • Get started with no-code invoices
  • Save payment details during a payment to set up future payments
  • Save card details to set up future payments
Was this page helpful?
YesNo
  • Need help? Contact Support.
  • Join our early access program.
  • Check out our changelog.
  • Questions? Contact Sales.
  • LLM? Read llms.txt.
  • Powered by Markdoc