Skip to content

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:

ModelHow it works
Fixed fee + overageFlat base charge with included units. Any usage above that billed at a rate
Pay as you goBilled in arrears for all usage. No base charge
Credit burndownCustomer 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 events
  • count — number of events
  • last — 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

Stripe API Reference - Self-contained docs reference, refreshed 2026-05-18