Model usage-based pricingLegacy
Learn about different pricing models for usage-based billing on Stripe.
Note
We’ve updated the way usage-based billing works. See the updated usage-based billing docs.
Learn how to migrate.
With usage-based pricing models, you charge your customers based on how much of your service they use during the billing cycle, instead of explicitly setting quantities, as in the per-seat and flat rate pricing models. (Another difference is that in the per-seat and flat-rate models, you could optionally collect payment for the billing cycle up front. With metered billing, you have to collect payment in arrears.) You must also record and report usage.
Togethere wants to charge on a per-minute basis for usage of their new conferencing service, where more usage drives the per-minute price lower for the customer.
Here’s what that model looks like on Stripe:
Usage-based pricing model
Usage types
For recurring purchases, you define how much to charge customers through usage_
-either licensed or metered.
Licensed usage
Metered usage
Package and standard pricing
In the Dashboard, you can select Standard pricing or Package pricing as pricing models. Both of these models map to the licensed (recurring[usage_
) usage type. With both models, you specify the number of units when you create or update a subscription. Here’s how they differ:
- With Standard pricing, the quantity defaults to 1.
- With Package pricing, you set the unit amount to values of 2 or more.
Model usage-based pricing on Stripe
The following example shows how to create a metered usage pricing model. In this case, Togethere charges .07 USD per minute.
The subscription integration guide explains how to fit pricing models into a full integration.
- If you’re using Stripe Checkout, the next step is to create a Checkout session for your site. Make sure you set up Stripe.
- If you’re using Stripe Elements, the next step is to create a Customer. Make sure you set up Stripe and the sample application.
For other versions of usage-based pricing, see the advanced models section. Also learn how to set up free trials and other optional features for a usage-based billing integration.
Advanced pricing models
Flat rate and per-seat
You can subscribe the customer to two separate products to model a pricing structure that includes both a base fee and additional per-seat pricing. One product serves as the flat base price and the other product represents the variable per-seat pricing.
Togethere charges a flat monthly rate for their service plus a tiered price for more than 50 users.
Model flat rate and per-seat on Stripe
To model this structure on Stripe, Togethere creates a Product and Price for the base fee:
Then they create a monthly price that charges 15 USD per user:
Here’s how they subscribe a customer with three users to the base fee price and the per-user price:
This results in a 50 USD charge every month: the 5 USD base monthly rate, plus 15 USD each for 3 users.
Flat rate with metered usage
You can also combine flat fees with usage-based pricing to charge a flat monthly rate in addition to charging for usage over the billing cycle.
To create a flat rate with a metered usage pricing model on Stripe through the Products and Prices APIs:
Create the
Flat monthly fee
product.Create a price for the
Flat monthly fee
product.Create the
Meeting per minute usage
price.
When you create subscriptions, specify both price IDs:
Decimal amounts
Decimal pricing is useful if you need to create pricing amounts that aren’t whole numbers. For example, if you’re running a cloud storage SaaS business, you can create a price that charges 0.05 cents for each MB used per month. Based on usage, the quantity of MB is then multiplied by 0.05 cents and rounded to the nearest whole cent.
Creating objects with decimal amounts
To create prices with decimal amounts, specify unit_
instead of unit_
. unit_
allows you to set the amount in the minor unit of the currency that you charge in. For example, you can set unit_
in USD to represent 105.5 cents, or 1.055 USD. unit_
accepts decimals up to 12 decimal places.
If you plan to use tiers, you can specify unit_
instead of unit_
. You can also create invoice items with unit_
instead of unit_
.
In API responses, the integer unit_
field isn’t populated if the object is created with a decimal value. For example, if you create a price with unit_
, the response contains unit_
and unit_
. You can still pass integer values into unit_
, in which case unit_
is populated in the response. For instance, if you create a price with unit_
, the response contains unit_
and unit_
.
Note
If your integration has event handling that uses unit_
values and you begin using decimal amounts, you need to use unit_
instead. This is important because unit_
will be returned as null
if the decimal amounts can’t be converted into integers, which could cause errors in your integration.