Glossary

Stripe Billing Mode

Billing mode is a per-subscription setting, either classic or flexible, that controls how Stripe calculates prorations, usage and invoices for that subscription.

Also called: billing mode, classic billing mode, flexible billing mode, billing_mode

Definition

Billing mode is the least visible setting in Stripe Billing with the largest consequences. Stripe describes the field on the subscription object as one that "Controls how prorations and invoices for subscriptions are calculated and orchestrated", and it takes one of two values: classic or flexible.

The useful way to think about it is not as a feature you switch on. It is which version of Stripe’s billing engine a subscription was created under. Flexible is the newer one, which Stripe calls out as "Recommended" and describes as providing "accurate and predictable billing behavior and new capabilities". Classic is the older one, kept because integrations depend on it: Stripe says it "Uses the existing Stripe subscription behavior. This setting is maintained for backward compatibility with older integrations."

Because the setting lives on each subscription rather than on the account, one Stripe account can hold both. Two customers on the same plan, signed up eighteen months apart, can produce differently shaped invoices from an identical change. That is why the answer to "does my subscription do this" is often "which mode is it on", and why the question is worth being able to answer before anything else.

Key points

  • +Set per subscription, not per account. One account routinely holds both kinds.
  • +Two values: classic, the original engine, and flexible, the newer one Stripe recommends.
  • +A subscription can be migrated from classic to flexible. It can never be moved back.
  • +The API default follows your integration version: flexible from 2025-09-30.clover onward, classic before it.
  • +The Dashboard default is a separate setting and only applies to subscriptions created in the Dashboard.
  • +Migration changes behaviour only for new activity. Stripe does not recalculate anything created beforehand.

Where the mode comes from when you do not choose one

Most subscriptions get a billing mode without anybody deciding, and there are two different defaults depending on how the subscription was created.

Through the API, the default follows your integration version. Stripe: "For API version 2025-09-30.clover and later, the default is flexible. For earlier versions, the default is classic." A preview version, 2025-08-27.preview, and later previews behave the same way. That has a consequence worth planning for, and Stripe states it as a warning: upgrading your API version "changes the default billing mode for new subscriptions from classic to flexible", so an upgrade nobody framed as a billing change quietly changes how new subscriptions calculate prorations, handle trials and process cancellations. To keep the old behaviour after upgrading you have to set the mode explicitly.

Through the Dashboard, the default comes from a setting instead, under Settings, then Billing, then Subscriptions and emails. It offers three choices: classic selected by default with both modes shown, flexible selected by default with both shown, or flexible only with classic hidden. Stripe is precise about the reach of that setting: it "only applies to new subscriptions created in the Dashboard. It doesn’t affect subscriptions created using the API or subscriptions migrated to flexible mode." Payment Links and Pricing Tables created in the Dashboard follow it too.

And for anyone who was already using Stripe Billing before flexible arrived, Stripe says the account default "is preserved as classic to maintain backward compatibility with your current integration". Nothing was migrated on your behalf.

How to tell which mode a subscription is on

The subscription carries the answer. Read the billing mode field on the subscription itself, which reports classic or flexible, and which also records the timestamp of a migration when one has happened. In the Dashboard the same value appears on the subscription, under Advanced settings when you update it.

The habit worth forming is to check the subscription rather than the account. There is no single account-wide answer to read, and there is no reason to expect a book of business built over several years to be uniform. If you are diagnosing why two customers on the same plan received different documents, this is the first field to look at, and it very often ends the investigation.

One related setting sits inside flexible mode rather than beside it. Flexible subscriptions can display proration discounts as itemized, which Stripe recommends and describes as showing "prorations with gross amounts and accurate discount amounts, consistent with non-prorations", or as included, the older display behaviour using net amounts and zero discount amounts. It changes what a proration line looks like on the invoice, not what it costs.

The migration runs one way

You can move a subscription from classic to flexible, through the Dashboard or through Stripe’s migrate endpoint. You cannot move it back. Stripe states it without qualification: "You can’t migrate a subscription from flexible billing mode to classic billing mode."

The part that matters for the books is what a migration does not touch. Stripe: "The flexible behaviors take effect for all new activity on the subscription after migration. However, Stripe doesn’t recalculate any resources created before migration, including pending proration Invoice Items." So a migrated subscription is not retroactively a flexible subscription. It is a classic history followed by flexible behaviour, and the timestamp on the field is the boundary between them.

Stripe lists four consequences of migrating, and each one is a behaviour change rather than a preference: credit prorations use the original debited amount instead of current subscription values, usage-based billing charges at the price in effect when the usage was reported, the billing cycle anchor is never automatically reset, and the move cannot be reversed.

Two practical notes. Working with flexible subscriptions through the API requires your integration to be on Stripe API version 2025-06-30.basil or later, though Stripe says the Dashboard can create one or migrate an existing subscription regardless of your version. And a subscription with an active schedule can only be migrated through the API rather than the Dashboard, in which case Stripe updates the schedule’s billing mode to match.

What actually differs, and where to read the detail

Billing mode is not a formatting preference, and the differences are specific rather than general. Stripe maintains a comparison page for the full list. Four of them have practical accounting consequences, and each is covered properly elsewhere on this site rather than summarised badly here.

Prorations and backdating. The mode decides whether a backdated period arrives as a single prorated line or as one line per natural billing period.

Usage-based pricing. On a mid-period price change, flexible bills usage at the price in effect when it was reported, and classic bills only usage reported since the current price took effect.

Mixed intervals. A subscription carrying items on different billing intervals requires flexible mode. Classic does not support it at all.

Trials and cancellations. Stripe names trial offers as a flexible-only capability, and lists cancellation processing among the behaviours that change on migration.

The common thread is that classic and flexible usually produce the same total and different documents. Since the document is what your accounting system receives, the mode is a bookkeeping question as much as a billing one.

What billing mode means for your QuickBooks records

Nothing in Acodei’s product documentation covers subscriptions, subscription items or billing modes, and it should not be read as detecting the mode or behaving differently by it. The honest statement is narrower and more useful: billing mode changes what Stripe produces, not what Acodei does with it.

What is documented is the invoice path. A finalized Stripe invoice becomes a QuickBooks Invoice reproducing every line item, and tax lines, as your mapping settings allow. When the invoice is paid, by a successful charge, by a manual payment per your settings, or by a credit balance offset, a QuickBooks Payment Receipt or Credit Memo follows and is applied to that invoice, which requires QuickBooks Automatic Application to be switched on.

Read those two facts together and the consequence falls out. The mode decides how many invoices exist, how many lines each one carries, and what period those lines cover. The sync then reproduces whatever Stripe finalized. So the place billing mode shows up in your QuickBooks file is in the shape and count of the documents that arrive, and the way to investigate a document that looks wrong is to check the mode on the subscription that produced it.

Want to see this on your own Stripe data?

Start a free trial

Frequently asked questions

What is billing mode in Stripe?

It is a per-subscription setting, either classic or flexible, that Stripe describes as controlling how prorations and invoices for subscriptions are calculated and orchestrated. Flexible is the newer engine Stripe recommends; classic is the original behaviour, kept for backward compatibility with older integrations.

Is billing mode set per account or per subscription?

Per subscription. Stripe says you can configure each subscription to use one of two billing modes, so a single account can hold both. Two customers on the same plan can behave differently if they were created under different modes.

How do I know which billing mode a subscription uses?

Read the billing mode field on the subscription itself, which reports classic or flexible and records when a migration happened. There is no account-wide answer to read instead, so check the individual subscription you are investigating.

What is the default billing mode for new subscriptions?

Through the API it depends on your integration version: Stripe sets flexible as the default for API version 2025-09-30.clover and later, and classic for earlier versions. Through the Dashboard it depends on a separate default billing mode setting, which applies only to subscriptions created in the Dashboard and not to those created through the API.

Can I switch a subscription from flexible back to classic?

No. Stripe states that you cannot migrate a subscription from flexible billing mode to classic billing mode. The move from classic to flexible is available through the Dashboard or the migrate endpoint, but it is a one-way decision per subscription.

Does migrating to flexible change my existing invoices?

No. Stripe says the flexible behaviours take effect for all new activity after migration and that it does not recalculate any resources created before migration, including pending proration invoice items. A migrated subscription carries a classic history followed by flexible behaviour.

Does changing billing mode change what syncs to QuickBooks?

Not directly. Acodei documents the finalized Stripe invoice as the trigger for a QuickBooks Invoice, and a paid invoice as the trigger for a Payment Receipt or Credit Memo. Billing mode changes how many invoices Stripe produces and what lines they carry, so it changes the documents that arrive rather than how they are handled.

What customers say about running Stripe through Acodei

Stripe Verified Partner BadgeQuickBooks Intuit Badge
If you're testing out all the different Stripe/QuickBooks integration apps right now, let me save you some time. This one is the best one by far.
RyanOwner at Indie Music Academy
Works well and is really helpful for massive transactions. The support is really fast and helpful. 100% recommended.
AndresCo-founder and CEO at Kanguro Collections and Reinsurance

Related reading

More glossary terms

See the full glossary

Ready to try Acodei?

Connect Stripe to QuickBooks Online in minutes and let the fees, refunds, and payouts land where your accountant expects them.