跳转到主要内容
Seat-based billing lets you charge customers based on the number of users, team members, or licenses they need. It’s the standard pricing model for team collaboration tools, enterprise software, and B2B SaaS products.

Implementation Tutorial

Step-by-step guide with code examples.

Add-ons Documentation

Learn about the add-on system that powers seat-based billing.

Subscription Management

Manage seat-based subscriptions and plan changes.

Webhooks

Track seat changes with subscription webhooks.

What is Seat-Based Billing?

Seat-based billing (also called per-user or per-seat pricing) charges customers based on the number of users who access your product. Instead of a flat fee, the price scales with team size.

Common Use Cases

Benefits of Seat-Based Pricing

For Your Business:
  • Revenue scales naturally as customers grow
  • Predictable pricing customers can budget for
  • Clear upgrade path from individual to team to enterprise
  • Higher lifetime value as teams expand
For Your Customers:
  • Pay only for what they use
  • Easy to understand and forecast costs
  • Flexibility to add/remove users as needed
  • Fair pricing that matches team size

How Seat-Based Billing Works in Dodo Payments

Dodo Payments implements seat-based billing using the Add-ons system. Here’s how it works:

Architecture Overview

A Team Pro subscription costs 99/monthandincludes5seats.Ifyouhavemorethan5users,youpayanadditional99/month and includes 5 seats. If you have more than 5 users, you pay an additional 15/month for each extra seat. For example, if your team needs 15 seats:
  • Base Plan: $99/month (includes 5 seats)
  • Add-ons: 10 extra seats × 15/month=15/month = 150/month
  • Total monthly cost: 99+99 + 150 = $249 for 15 seats

Key Components


Pricing Strategies

Choose the seat-based pricing strategy that fits your business:

Strategy 1: Base + Per-Seat Add-on

Include a set number of seats in the base plan, charge for additional seats. Example:
Best for: Products where small teams can function with the base offering.

Strategy 2: Pure Per-Seat Pricing

Charge a flat rate per seat with no base fee. Example:
Implementation: Set base plan price to $0, use only the seat add-on. Best for: Simple, transparent pricing; usage-based models.

Strategy 3: Tiered Seat Pricing

Different base plans with different per-seat rates. Example:
Implementation: Create separate products for each tier with different add-on prices. Best for: Encouraging upgrades to higher tiers; enterprise sales.

Strategy 4: Seat Bundles

Sell seats in packs rather than individually. Example:
Implementation: Create multiple add-ons for different pack sizes. Best for: Simplifying purchasing decisions; encouraging larger commitments.

Setting Up Seat-Based Billing

Step 1: Plan Your Pricing

Before implementation, define your pricing structure:
1

Define Base Plan

Decide what’s included in the base subscription:
  • Base price (can be $0 for pure per-seat)
  • Number of included seats
  • Features available at this tier
2

Set Seat Pricing

Determine the per-seat add-on cost:
  • Price per additional seat
  • Any volume discounts (via multiple add-ons)
  • Maximum seats allowed (if applicable)
3

Consider Billing Frequency

Align seat pricing with your billing cycle:
  • Monthly subscriptions → monthly seat charges
  • Annual subscriptions → annual seat charges (often discounted)

Step 2: Create the Seat Add-on

In your Dodo Payments dashboard:
  1. Navigate to ProductsAdd-Ons
  2. Click Create Add-On
  3. Configure the add-on:
Create descriptive add-on names that make sense on invoices. “Additional Team Seat” is clearer than “Seat Add-on” for customers reviewing their bills.

Step 3: Create the Base Subscription

Create your subscription product:
  1. Navigate to ProductsCreate Product
  2. Select Subscription
  3. Configure pricing and details
  4. In the Add-Ons section, attach your seat add-on

Step 4: Attach Add-on to Product

Link the seat add-on to your subscription:
  1. Edit your subscription product
  2. Scroll to Add-Ons section
  3. Click Add Add-Ons
  4. Select your seat add-on
  5. Save changes
Your subscription product now supports seat-based pricing. Customers can purchase any quantity of additional seats during checkout.

Managing Seats

Adding Seats to New Subscriptions

When creating a checkout session, specify the seat quantity:

Changing Seat Count on Existing Subscriptions

Use the Change Plan API to adjust seats:

Removing Seats

To reduce seat count, specify the lower quantity:

Removing All Additional Seats

Pass an empty addons array to remove all add-ons:

Proration for Seat Changes

When customers add or remove seats mid-cycle, proration determines how they’re billed.

Proration Modes

prorated_immediatelydifference_immediatelyfull_immediately 都会将计费周期重置为更改日期——下次续订将重新锚定到座位更改应用的日期。只有 do_not_bill 保持原始续订日期(新座位数量将在下次续订时全额计费,变更时不收费)。

按比例收费示例

场景:剩余15天计费周期,添加5个座位,每个座位10美元
客户现在支付按比例费用,计费周期重新锚定到更改日期——下次续订(新增座位每月50美元)将从今天起的一周期后收取,而不是从原续订日期起。
场景:周期中期删除3个座位,立即按比例收费
选择座位更改的按比例收费模式:当团队经常调整座位时,使用 prorated_immediately 实现按天收费的公平性。使用 difference_immediately 进行更简单的数学运算,收取或抵扣座位全价。如果需要保持现有续订日期不变,请使用 do_not_bill——唯一不重置计费周期的模式(新座位数量将在下次续订时收费)。请参见 Proration Guide 以获取详细比较。

更改前的预览

更改前始终预览按比例收费:

使用 Webhooks 跟踪座位

通过监听订阅 Webhooks 来监控座位更改:

相关事件

Webhook 处理程序示例


强制执行座位限制

您的应用程序必须强制执行座位限制。Dodo Payments 负责计费,但您控制访问权限。

执行策略

严格阻止添加超过座位数的用户。

高级模式

不同类型的座位

提供不同定价的座位类型:
实现: 为每种座位类型创建单独的附加组件。

年度座位折扣

提供年度座位定价折扣:
实现: 为月度和年度计划创建不同附加价格的单独产品。

最低座位要求

对某些计划要求最低座位数:

最佳实践

定价最佳实践

  • 清晰沟通:在定价页面上突出显示每个座位的定价
  • 包含座位:考虑在基本价格中包含一些座位以减少摩擦
  • 数量折扣:为较大的团队提供较低的每座位费率以赢得企业交易
  • 年度激励:年费计划折扣以改善现金流和保留率

技术最佳实践

  • 缓存座位数:在本地缓存订阅座位数以避免每次请求时进行 API 调用
  • 定期同步:通过 API 定期将本地座位数与 Dodo Payments 同步
  • 处理失败:如果座位更改失败,显示清晰的错误信息和重试选项
  • 审计追踪:记录所有座位更改以解决计费争议和合规性

用户体验最佳实践

  • 实时反馈:在调整座位时立即显示成本影响
  • 确认步骤:在计费变更前要求确认
  • 按比例收费透明:在应用收费前清楚解释按比例收费
  • 轻松降级:不要使减少座位变得困难(这会建立信任)

故障排除

症状:您的应用程序显示的座位数与订阅不同。原因
  • 未接收或处理 Webhook
  • 座位更改期间的竞争条件
  • 缓存数据未更新
解决方案
  1. subscription.plan_changed 实现 Webhook 处理程序
  2. 添加“与计费同步”按钮以获取当前订阅
  3. 设置缓存 TTL 以确保定期刷新
症状:客户对周期中期费用金额感到困惑。原因
  • 未清晰传达按比例收费模式
  • 客户未看到确认前的预览
解决方案
  1. 更改前始终使用 previewChangePlan
  2. 清晰地展示细分:“添加 X 个座位 = 今天 $Y(按 Z 天按比例收费)”
  3. 在帮助中心记录您的按比例收费政策
症状:结账时座位附加组件不可用。原因
  • 附加组件未附加到产品
  • 附加组件已存档或删除
  • 产品和附加组件之间的货币不匹配
解决方案
  1. 在产品设置中验证附加组件是否附加
  2. 在“附加组件”仪表板中检查附加组件状态
  3. 确保货币完全匹配
症状:客户希望减少座位数量,但已分配用户。解决方案
  1. 显示必须在减少座位数前移除哪些用户
  2. 实现工作流程:移除用户 → 减少座位
  3. 考虑在实施座位减少前设置宽限期

相关文档

Seat-Based Pricing Tutorial

完整实现指南,含代码。

Add-ons

深入了解附加系统。

Plan Changes & Proration

处理订阅修改。

Subscription Webhooks

跟踪订阅事件。
最后修改于 2026年7月9日