Pricing Models Fresh
Stripe Billing supports four recurring pricing models. Each is built using Products and Prices.
- Products — what you sell
- Prices — how much and how often to charge
Flat rate
Customers choose a service tier and pay a fixed recurring amount.
bash
# Create a flat-rate monthly price
curl https://api.stripe.com/v1/prices \
-u "sk_test_YOUR_KEY:" \
-d product=prod_123 \
-d unit_amount=2900 \
-d currency=usd \
-d "recurring[interval]=month"Flat rate works with Checkout, Payment Element, Payment Links, and mobile apps. Supports free trials, discounts, and billing cycle anchors.
Per-seat
Each unit represents one user or license. The customer pays for each seat used.
bash
curl https://api.stripe.com/v1/prices \
-u "sk_test_YOUR_KEY:" \
-d product=prod_123 \
-d unit_amount=1500 \
-d currency=usd \
-d "recurring[interval]=month"Set quantity to the number of seats when creating the subscription. Update quantity when seats are added or removed.
Tiered pricing
Unit cost changes based on quantity. Two modes:
- Volume-based: The tier that covers the final quantity applies to all units
- Graduated: Each unit is priced in the tier it falls into
bash
curl https://api.stripe.com/v1/prices \
-u "sk_test_YOUR_KEY:" \
-d product=prod_123 \
-d currency=usd \
-d billing_scheme=tiered \
-d tiers_mode=graduated \
-d "recurring[interval]=month" \
-d "tiers[0][up_to]=5" \
-d "tiers[0][unit_amount]=700" \
-d "tiers[1][up_to]=10" \
-d "tiers[1][unit_amount]=650" \
-d "tiers[2][up_to]=inf" \
-d "tiers[2][unit_amount]=600"Usage-based pricing
Charge customers based on what they actually consume. Three models:
| Model | How it works |
|---|---|
| Fixed fee + overage | Flat base charge with included units. Any usage above that billed at a rate |
| Pay as you go | Billed in arrears for all usage. No base charge |
| Credit burndown | Customer prepays credits. Usage deducts from balance |
Usage-based pricing requires a Meter to track events.
Create a meter
bash
curl https://api.stripe.com/v1/billing/meters \
-u "sk_test_YOUR_KEY:" \
-d display_name="API Requests" \
-d event_name=api_requests \
-d "default_aggregation[formula]=sum" \
-d "customer_mapping[event_payload_key]=stripe_customer_id" \
-d "customer_mapping[type]=by_id" \
-d "value_settings[event_payload_key]=value"Aggregation methods:
sum— total value of all eventscount— number of eventslast— last reported value
Create a metered price
bash
curl https://api.stripe.com/v1/prices \
-u "sk_test_YOUR_KEY:" \
-d currency=usd \
-d unit_amount=4 \
-d "transform_quantity[divide_by]=100" \
-d "transform_quantity[round]=up" \
-d "recurring[usage_type]=metered" \
-d "recurring[interval]=month" \
-d "recurring[meter]=mtr_123" \
-d "product_data[name]=API Calls"Report usage (meter events)
bash
curl https://api.stripe.com/v1/billing/meter_events \
-u "sk_test_YOUR_KEY:" \
-d event_name=api_requests \
-d "payload[stripe_customer_id]=cus_123" \
-d "payload[value]=100"Stripe processes meter events asynchronously. At end of billing period, Stripe calculates total usage and generates an invoice.
Preview upcoming invoice
bash
curl https://api.stripe.com/v1/invoices/create_preview \
-u "sk_test_YOUR_KEY:" \
-d subscription=sub_123