Documentation Index
Fetch the complete documentation index at: https://docs.dodopayments.com/llms.txt
Use this file to discover all available pages before exploring further.
许可证密钥是许可证密钥权限类型。创建一次许可证密钥权限,设置所需的激活限制、到期时间和说明,将其附加到任何产品,Dodo Payments会为每次购买或订阅自动生成和交付密钥。
什么是许可证密钥?
许可证密钥是授权访问您产品的唯一令牌。它们非常适合:- 软件许可:桌面应用程序、插件和命令行工具
- 每用户控制:限制每个用户或设备的激活次数
- 数字商品:限制下载、更新或高级功能
创建许可证密钥权限
Choose License Key
选择 License Key 作为集成。配置每个发放密钥的行为:
- 激活限制:每个密钥的最大并发激活数(例如,
1对于单用户,5对于团队许可证,留空为无限)。 - 持续时间:密钥发放后保持有效的时间长度(例如,30 天,1 年)。对于订阅发放的密钥,留空;只要订阅有效,密钥仍然有效。
- 激活说明:与密钥一起通过电子邮件发送给客户的说明。示例:
Paste the key in Settings → License或Run: mycli activate <key>。

附加到产品
打开一个产品,展开 高级设置 → 权限和积分,然后选择您的许可证密钥权限。单个产品可以在同一购买中,与其他权限(Discord 访问、文件下载、GitHub 代码库访问等)一起交付许可证密钥。
密钥如何发放
密钥的发放遵循标准的授权生命周期:| 事件 | 行为 |
|---|---|
payment.succeeded(一次性) | 为每个购买的 quantity 生成一个密钥。密钥到期时间遵循权限的持续时间。 |
subscription.active | 为每个订阅 quantity(席位)生成一个密钥。密钥没有到期时间;有效性与订阅状态相关。 |
subscription.renewed | 无操作。现有密钥继续有效。 |
subscription.on_hold | 禁用密钥。当订阅解除暂停时,它们会重新激活。 |
subscription.cancelled / expired | 永久禁用密钥。 |
subscription.plan_changed | 禁用旧密钥;为新计划发放新密钥。 |
refund.succeeded(一次性) | 禁用密钥。 |
| 通过 API/仪表盘手动撤销 | 使用 revocation_reason: manual 禁用密钥。订阅续订时不会自动重新授予这些密钥。 |
| 直接禁用许可证密钥 | 使用 revocation_reason: license_key_disabled 撤销权限。重新启用密钥会自动重新激活权限。 |
数量行为
- 订阅产品 每个席位发放一个密钥(
subscriptions.quantity)。 - 一次性产品 每个购物车商品行发放一个密钥(
product_cart.quantity)。 - 手动 API 授权 精确发放一个密钥。
激活、验证、停用
激活/验证/停用 API 端点是公共的,不需要 API 密钥。直接从桌面软件、CLI 或基于浏览器的客户端使用它们以在运行时验证密钥。公共端点:激活、停用和验证许可证的端点是公共的,不需要 API 密钥。在您的客户端应用程序中直接调用它们,而不暴露您的 API 凭据。
激活许可证
验证许可证
停用激活实例
管理密钥
从仪表盘打开许可证密钥权限,查看每个授权(每个客户密钥一行),包含交付日期、激活计数和撤销操作。每个授权详细信息显示底层许可证密钥、到期时间、已用激活和激活限制。 您还可以通过编程方式列出授权:通过 API 导入现有许可证密钥
已经在另一个系统中拥有许可证密钥?使用创建许可证密钥API 将其导入 Dodo Payments。这样可以迁移现有密钥而不打扰您的客户 — 他们可以继续使用相同的密钥串进行激活、验证和停用,而无需重新发放密钥。导入的密钥与自动生成的密钥有何不同
| 字段 | 自动生成的密钥 | 导入的密钥 |
|---|---|---|
source | "auto" | "import" |
payment_id | 设置为原始支付 | null(没有 Dodo Payments 交易) |
subscription_id | 如果密钥通过订阅发放则设置 | null 除非明确链接 |
| 客户电子邮件通知 | 在发放时发送 | 不发送 — 请单独处理 |
source 字段在 GET /license_keys 响应中区分迁移的库存与有机发放的密钥,以便在对账或审核时使用。
返回 URL 中的许可证密钥
当客户完成带有许可证密钥权限的产品的购买时,生成的密钥会自动作为查询参数附加到您的return_url 以显示在成功页面上,而无需额外的 API 调用。
subscription_id 而不是 payment_id:
API 管理
Lifecycle Operations (Public Endpoints)
Lifecycle Operations (Public Endpoints)
激活、停用和验证都是公共的;无需 API 密钥。
Activate License
创建或记录许可证密钥的激活实例。
Deactivate License
撤销先前的激活以释放容量。
Validate License
在授予访问权限之前检查真实性、状态和限制。
License Key Management
License Key Management
创建、列出、检索和更新单个许可证密钥记录。使用这些来导入现有密钥或获取使用详情。
Create License Key
创建一个新的许可证密钥或导入现有密钥。
List License Keys
浏览所有密钥及其状态和使用详情。
Get License Key
检索特定密钥及其元数据。
Update License Key
修改到期时间、激活限制或启用/禁用密钥。
Entitlement Management
Entitlement Management
管理许可证密钥权限本身:其激活限制、持续时间和说明。
Create Entitlement
创建许可证密钥权限。
Update Entitlement
更新权限配置。
List Grants
列出为权限发放的密钥。
Revoke Grant
手动撤销客户的密钥。
Webhooks
许可证密钥的交付和撤销会触发四个entitlement_grant.* webhook 事件。授权负载包含一个填充的 license_key 对象,其中包含密钥、到期时间、已用激活和限制。
遗留的 license_key.* 事件(license_key.created)继续针对底层许可证密钥记录生命周期触发;参见许可证密钥 webhook 负载页面。
传统许可证密钥
使用早期
license_key_enabled 标志创建的产品已自动迁移到许可证密钥权限。迁移是透明的:现有客户的密钥继续正常工作,公共 /licenses/activate、/licenses/validate、/licenses/deactivate 端点继续运行,/license_keys/* API 端点继续读取和写入相同的密钥存储。独立的许可证密钥仪表盘部分仍可用,显示所有已发放的密钥,适用于审核和搜索。新的配置(更改激活限制、持续时间或说明)应通过在权限下编辑迁移后的许可证密钥权限来完成。最佳实践
- 保持激活限制明确:选择合理的默认值(单用户应用程序为 1,团队许可证为 3-5),并记录它们。
- 提供精确的激活说明:客户从电子邮件中粘贴这些说明,精确的路径和命令可减少支持请求。
- 服务器端验证密钥:对于联网产品,通过
/licenses/validate验证,而不是本地缓存激活。 - 使用 webhooks 进行撤销:监听
entitlement_grant.revoked,以便在客户取消或退款时立即禁用应用程序内功能。 - 测试订阅和一次性购买:许可证密钥的行为在两者之间略有不同,因此在上线前测试两种情况。