Pricing Models
Overview
FastAPI Payments supports various pricing models through its pricing strategies. Each strategy handles price calculations, prorations, billing items, and plan change validations.
The Pricing Strategy Interface
All pricing strategies implement this common interface:
calculate_price: Calculate the price based on model-specific parameterscalculate_proration: Calculate prorated amounts for plan changesget_billing_items: Generate line items for bills/invoicesvalidate_plan_change: Validate if a plan change is allowed
Supported Pricing Models
Subscription Pricing
Fixed recurring payments with these features:
Different billing intervals (monthly, yearly, etc.)
Quantity-based pricing (e.g., number of licenses)
Discounts and proration
Tax calculation
Example:
# Calculate subscription price
price = await subscription_pricing.calculate_price(
base_amount=10.0,
quantity=5,
discount_percentage=0.1
)
# 10.0 * 5 = 50.0
# 50.0 * (1-0.1) = 45.0
# With 20% tax: 45.0 * 1.2 = 54.0
Usage-Based Pricing
Pay-as-you-go model with these features:
Per-unit pricing
Minimum and maximum charges
Volume-based discounts
Usage tracking and aggregation
Example:
# Calculate usage-based price
price = await usage_based_pricing.calculate_price(
unit_price=0.05,
usage_quantity=1000,
minimum_charge=10.0
)
# 0.05 * 1000 = 50.0
# min(10.0, 50.0) = 50.0
# With 20% tax: 50.0 * 1.2 = 60.0
Tiered Pricing
Pricing that changes based on usage tiers:
Multiple pricing tiers
Different rates per tier
Flat fees per tier
Graduated or volume pricing
Example:
# Define tiers
tiers = [
{"lower_bound": 0, "upper_bound": 1000, "price_per_unit": 0.05, "flat_fee": 10},
{"lower_bound": 1000, "upper_bound": 10000, "price_per_unit": 0.03, "flat_fee": 0},
{"lower_bound": 10000, "upper_bound": None, "price_per_unit": 0.01, "flat_fee": 0}
]
# Calculate tiered price for 1500 units
price = await tiered_pricing.calculate_price(tiers=tiers, quantity=1500)
# Tier 1: 10 + (0.05 * 1000) = 60.0
# Tier 2: 0 + (0.03 * 500) = 15.0
# Total: 60.0 + 15.0 = 75.0
# With 20% tax: 75.0 * 1.2 = 90.0
Per-User Pricing
Seat-based pricing for multi-user systems:
Per-seat pricing
Volume discounts based on user count
Minimum seat requirements
User-based tiers
Example:
# Calculate per-user price
price = await per_user_pricing.calculate_price(
base_amount=10.0,
num_users=20,
discount_tiers=[
{"min_users": 20, "discount_percentage": 0.2},
{"min_users": 10, "discount_percentage": 0.1},
{"min_users": 5, "discount_percentage": 0.05}
]
)
# 10.0 * 20 = 200.0
# 200.0 * (1-0.2) = 160.0
# With 20% tax: 160.0 * 1.2 = 192.0
Freemium Pricing
Free tier with premium upgrades:
Free usage within limits
Paid tier when limits are exceeded
Clear upgrade/downgrade paths
Usage tracking against free limits
Example:
# Calculate freemium price
price = await freemium_pricing.calculate_price(
base_amount=20.0,
usage_metrics={"api_calls": 1200, "storage_gb": 0.5},
free_tier_limits={"api_calls": 1000, "storage_gb": 1}
)
# User exceeds API calls limit, so they pay full price
# 20.0 with 20% tax: 24.0
Dynamic Pricing
Price adjusts based on factors like demand:
Variable pricing based on conditions
Time-based pricing fluctuations
Demand-based multipliers
Market-based adjustments
Hybrid Pricing
Combines multiple pricing models:
Base subscription + usage charges
Tiered pricing with per-user components
Complex pricing rules
Multiple revenue streams in one plan
Pricing Configuration
Configure pricing behavior with these settings:
{
"pricing": {
"default_currency": "USD",
"default_pricing_model": "subscription",
"round_to_decimal_places": 2,
"allow_custom_pricing": true,
"tax": {
"default_rate": 0.2,
"included_in_price": false,
"use_tax_service": false
}
}
}