One-Time
Subscriptions
Usage-Based
创建产品
您可以从控制面板或通过 API 创建产品。请预先选择定价模式——One-Time、Subscription 或 Usage-Based——然后配置详细信息。定价模式不可变;如果需要使用其他模式,请创建新产品。1
Name and Description
提供清晰的标题和简洁、突出价值的描述。描述支持 Markdown。

2
Pricing Model and Price
选择定价模式:
- One-Time:一次性支付固定价格。
- Subscription:按周期重复收费,可设置间隔和可选试用期。
- Usage-Based:根据计量事件得出的价格。
- 价格:基础金额和货币。你可以使用 Dodo Payments 支持的任何货币设置基础价格,但 Pay What You Want 产品除外,其基础货币必须为 USD、GBP 或 EUR。USD、GBP、EUR 和 INR 固定显示在货币选择器顶部,方便快速访问。
- 适用折扣 (%):在结账页面和发票中显示的可选百分比折扣。你最多可以输入两位小数,例如
10.5。在 API 中,使用基点设置折扣,字段为discount_bps,因此1050表示 10.5%。旧版discount字段已弃用,并会四舍五入为整数百分比。 - 对于订阅,请设置 重复周期(例如 1 个月或 1 年)、试用天数,以及可选的 付费试用 试用金额。非零订阅价格必须满足客户付款所用货币的订阅最低金额:USD 为 \1.00。同时也支持金额恰好为 \0 订阅;请参阅零价格时可选银行卡。不支持负金额。
启用 Adaptive Currency 后,基础货币以外地区的客户会以当地货币付款,因此您可以使用最适合目标市场的货币编写价格。停用后,客户将使用您的基础货币付款。
3
Product Media
上传图片,在结账页面和发票中展示产品。支持的格式:PNG、JPG、WebP,大小不超过 3 MB。您可以随时重新排序或替换图片。
4
Automated Entitlements
在 Entitlements 部分,附加付款后自动激活的履约方式:
- License Keys:签发和验证唯一密钥。
- Digital Files:授予安全的文件访问权限。
- Feature Flags:解锁应用检查的功能。
- Platform Access:授予在 Discord、GitHub、Telegram、Figma、Framer 或 Notion 上的访问权限。
变体和定价选项
不要在一个产品下创建变体,而是为每个定价选项创建单独的产品(例如 Monthly 和 Yearly)。然后将它们归入 Product Collection,在一个结账页面中展示所有选项,并在 Customer Portal 中启用计划切换。
为什么采用这种方式?
- 清晰的定价模式:每个产品都有单一且定义明确的定价模式(一次性、订阅或按用量计费)。
- 可预测的 API:无需处理嵌套的变体逻辑,集成更加简单。
- 更轻松的报告:无需汇总变体,即可按产品跟踪收入和指标。
- 灵活的结账流程:并排展示多个产品,让客户进行比较和选择。
Product Collection 的工作方式
- 创建产品:为每个计划设置单独的产品(例如 Starter Monthly、Starter Annual、Pro Monthly、Pro Annual)。
- 归入集合:将相关产品添加到 Product Collection。
- 统一结账:客户可以在一个结账页面中看到所有选项,并选择首选计划。
- 计划切换:客户可以通过 Customer Portal 在同一集合中的产品之间升级或降级。
Product Collections
管理产品
您可以通过控制面板管理产品,也可以通过 API 以编程方式管理。API 提供对产品创建、更新、检索、图片上传和归档的完整控制。控制面板管理
- Update:随时编辑名称、描述、图片、价格、字段和权益(定价模式不可变)。
- Archive:将产品从新购买中隐藏,同时不影响现有客户。之后可以取消归档。
- Drafts:进行中的产品会保存为草稿,方便您稍后继续编辑。测试模式和实时模式分别保存草稿,因此一个模式中的未完成产品不会影响另一个模式。使用 Clear Draft 可丢弃草稿并重新开始。
API 管理
以下说明介绍如何创建、更新、管理和检索产品,包括上传图片。Creating a Product
Creating a Product
向
/products endpoint 发送 POST request,并提供名称、描述、价格、货币以及产品是否为 recurring product 等详细信息。对于 recurring products,请将 price object 设置为 recurring price(type: recurring_price),并指定 payment_frequency_interval 和 subscription_period_interval(Day、Week、Month 或 Year)及其对应的次数。Create Product API
Updating a Product
Updating a Product
向
/products/{product_id} endpoint 发送 PATCH request。您可以更新名称、价格和描述等属性,同时保留其他详细信息不变。请确保 endpoint 中的 product_id 与现有产品匹配。Update Product API
Retrieving Products
Retrieving Products
使用
GET request 向 /products endpoint 获取账户中存储的产品列表。这样可以获取包括有效产品和已归档产品在内的产品详细信息。Retrieve Products API
Uploading Product Images
Uploading Product Images
通过使用 API 提供的预签名 URL 将图片上传到 AWS S3,即可将图片关联到产品。首先从
/products/{product_id}/images endpoint 请求图片上传 URL,然后使用提供的 URL 在 60 秒内上传图片。从 API 收到预签名 URL 后,使用 PUT method 上传图片。这可以确保以安全且临时的方式访问 AWS S3 以完成图片上传。支持用于上传到 S3 的库:- Node.js:
axios、node-fetch - Python:
requests、boto3 - Go:
net/http - PHP:
GuzzleHttp - Ruby:
rest-client
200 OK status,表示图片已成功存储。Upload Product Image API
Archiving a Product
Archiving a Product
使用向
/products/{id} endpoint 发送的 DELETE request,将产品从新购买中隐藏,同时不永久删除该产品。Archive Product API
Unarchiving a Product
Unarchiving a Product
向
/products/{product_id}/unarchive endpoint 发送 POST request,即可恢复已归档的产品。这会重新激活产品,使其再次可用。Unarchive Product API
Checkout and Fulfillment
Checkout and Fulfillment
从产品创建支付或订阅流程,并通过权益和 webhooks 自动完成履约。
Checkout Sessions
Payment Webhooks
Subscription Webhooks
最佳实践
- 从清晰度入手:为每个定价选项分别创建产品(Monthly 和 Yearly)。
- 合理使用试用期:将试用期与引导流程结合,促进用户激活。
- 自动化履约:使用权益和 webhooks 即时交付。
- 使用 metadata 添加标签:存储您的系统 ID,以便对账。