メインコンテンツへスキップ

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は購入やサブスクリプションシートごとに自動的にキーを生成し配布します。

ライセンスキーとは?

ライセンスキーは、製品へのアクセスを認可するユニークなトークンです。以下の用途に最適です:
  • ソフトウェアライセンス: デスクトップアプリ、プラグイン、CLI
  • ユーザーごとの制御: ユーザーまたはデバイスごとのアクティベーションを制限
  • デジタル商品: ダウンロード、アップデート、またはプレミアム機能へのゲート
Dodo Payments内では、ライセンスキーはエンタイトルメントシステムを通じて管理されており、各キーのライフサイクル(作成、期限、取り消し、再付与)は他の配布物と同じ支払いおよびサブスクリプションイベントによって駆動されます。

ライセンスキー エンタイトルメントを作成する

Dodo Paymentsのダッシュボードでエンタイトルメントに移動し、+ をクリックして新しいエンタイトルメントを作成します。 インテグレーションとしてライセンスキーを選択します。発行された各キーの動作を構成します:
  • アクティベーション制限: 各キーの同時アクティベーションの最大数(例:インライン コード プレースホルダー_34017f417f799e97_ENDはシングルユーザー用、インライン コード プレースホルダー_d076e478fa8eeef5_ENDはチームライセンス用、無制限の場合は空白のままにします)。
  • 有効期間: 発行後のキーの有効期間(例:30日間、1年間)。サブスクリプション発行のキーに対しては空白のままにします。サブスクリプションがアクティブな限りキーは有効です。
  • アクティベーション指示: キーと共にメールで送信される顧客向け指示。例:インライン コード プレースホルダー_048b2931a6c30548_END または インライン コード プレースホルダー_2e1db75dd5d7aead_END。
ライセンスキー エンタイトルメント フォーム:アクティベーション制限、有効期間、指示 保存します。エンタイトルメントは現在、任意の商品に添付可能です。

商品に添付する

製品を開き、高度な設定 → エンタイトルメント & クレジット を展開し、ライセンスキーのエンタイトルメントを選択します。1つの製品が、同じ購入で他のエンタイトルメント(Discordアクセス、ファイルダウンロード、GitHubレポアクセスなど)と共にライセンスキーを提供できます。 製品エンタイトルメント パネル:ライセンスキー選択

キーの発行方法

キーの発行は標準の付与ライフサイクルに従います:
イベント動作
インライン コード プレースホルダー_bfeed7a4ab5393d3_END (一回限り)購入されたインライン コード プレースホルダー_117919f14afd30c6_ENDごとに1つのキーを生成します。キーの有効期限はエンタイトルメントの期間に従います。
インライン コード プレースホルダー_c4613b9706b26e9b_ENDサブスクリプションのインライン コード プレースホルダー_117919f14afd30c6_END(シート)ごとに1つのキーを生成します。キーに有効期限はなく、サブスクリプションのステータスに結びつけられています。
インライン コード プレースホルダー_6fe784e49d95469c_END何もしない。既存のキーは存続します。
インライン コード プレースホルダー_5e9a0875003c752d_ENDキーを無効にします。サブスクリプションが停止状態を解除されると再アクティブ化されます。
インライン コード プレースホルダー_983928b415d28cfb_END / インライン コード プレースホルダー_4179270b2decd1a5_ENDキーを永久に無効にします。
インライン コード プレースホルダー_0c0e8ba2000e0a72_END古いキーを無効化し、新しいプラン用のキーを発行します。
インライン コード プレースホルダー_a44f9d4faff31c41_END (一回限り)キーを無効にします。
API/ダッシュボード経由の手動取り消しインライン コード プレースホルダー_bcd39c27c12e28ba_ENDでキーを無効にします。これらはサブスクリプション更新時に自動再付与されません。
キーが直接無効化された場合インライン コード プレースホルダー_101b74985ba66eb4_ENDで付与を取り消します。キーを再有効化すると付与が自動的に再アクティブ化されます。

数量の動作

  • サブスクリプション製品は、シートごとに1つのキーを発行します(インライン コード プレースホルダー_5dfde1e8c9098256_END)。
  • 一回限りの製品は、カートのラインアイテムごとに1つのキーを発行します(インライン コード プレースホルダー_8efb560aef2090a3_END)。
  • 手動API付与は正確に1つのキーを発行します。

アクティベーション、検証、非アクティブ化

アクティベーション/検証/非アクティブ化APIエンドポイントは公開されており、APIキーは不要です。デスクトップソフトウェア、CLI、またはブラウザベースのクライアントから、実行時にキーを検証するために直接使用してください。 公開エンドポイント: ライセンスのアクティベート、非アクティブ化、および検証エンドポイントは公開されており、APIキーは不要です。クライアントアプリケーションからAPI資格情報を公開せずに直接呼び出します。

ライセンスをアクティベートする

TypeScript
import DodoPayments from 'dodopayments';

// No API key needed for public license endpoints
const client = new DodoPayments();

const response = await client.licenses.activate({
  license_key: 'PRO-AAAA-BBBB-CCCC-DDDD',
  name: 'Device Name',
});

console.log(response.id);
Python
client.licenses.activate(
    license_key="PRO-AAAA-BBBB-CCCC-DDDD",
    name="Device Name",
)
cURL
curl -X POST https://test.dodopayments.com/licenses/activate \
  -H "Content-Type: application/json" \
  -d '{
    "license_key": "PRO-AAAA-BBBB-CCCC-DDDD",
    "name": "Device Name"
  }'

ライセンスを検証する

TypeScript
const response = await client.licenses.validate({
  license_key: 'PRO-AAAA-BBBB-CCCC-DDDD',
});

console.log(response.valid);
cURL
curl -X POST https://test.dodopayments.com/licenses/validate \
  -H "Content-Type: application/json" \
  -d '{ "license_key": "PRO-AAAA-BBBB-CCCC-DDDD" }'

アクティベーションインスタンスを非アクティブ化する

await client.licenses.deactivate({
  license_key: 'PRO-AAAA-BBBB-CCCC-DDDD',
  license_key_instance_id: 'instance_abc123',
});

キーを管理する

ダッシュボードからライセンスキーのエンタイトルメントを開き、配信日、アクティベーション数、取り消しアクションを含む各付与(顧客キーごとに1行)を見ます。各付与の詳細には、基礎となるライセンスキー、有効期限、使用されたアクティベーション、アクティベーション制限が表示されます。 また、プログラムで付与をリストできます:
const grants = await client.entitlements.grants.list('ent_license_key_id', {
  status: 'delivered',
});

for (const grant of grants.items) {
  console.log(grant.license_key.key, grant.license_key.activations_used);
}

既存のライセンスキーをAPI経由でインポートする

別のシステムにライセンスキーをすでにお持ちですか?Create License Key APIを使用して Dodo Payments へインポートできます。これにより、既存のキーを再発行することなく移行でき、顧客は同じキー文字列を使用してアクティベート、検証、非アクティブ化を続けることができます。 APIを通じて作成または更新されたライセンスキーは、顧客へのメール通知をトリガーしません。インポートされたキーについて顧客に通知する必要がある場合は、アプリケーション内で別途処理してください。
const licenseKey = await client.licenseKeys.create({
  customer_id: 'cus_abc123',
  product_id: 'prod_456',
  key: 'YOUR-EXISTING-LICENSE-KEY',
  activations_limit: 5,
  expires_at: '2026-12-31T23:59:59Z',
});

インポートされたキーと自動生成されたキーの違い

フィールド自動生成キーインポートされたキー
インライン コード プレースホルダー_736f2e72d74780c9_ENDインライン コード プレースホルダー_f6fef29405350c57_ENDインライン コード プレースホルダー_ac77318dd639bd8d_END
インライン コード プレースホルダー_6846e3bcf892587a_END元の支払いに設定インライン コード プレースホルダー_a5239729b0f6c6ca_END(Dodo Payments取引なし)
インライン コード プレースホルダー_da81ade15518f46e_ENDサブスクリプションを通じて発行されたキーの場合に設定明示的にリンクされない限りインライン コード プレースホルダー_a5239729b0f6c6ca_END
顧客メール通知発行時に送信送信されない - 別途処理
インライン コード プレースホルダー_736f2e72d74780c9_END フィールドをインライン コード プレースホルダー_474be887d55d38a5_END レスポンスで使用して、在庫調整や監査時に移行したインベントリを有機的に発行されたキーと区別します。 Polar.shまたはLemon Squeezyから移行しますか?dodo-migrate CLIは、製品、顧客、割引、およびライセンスキーの一括インポートをワンコマンドで自動化し、外部IDをDodo IDに自動的にマッピングします。

リターンURLでのライセンスキー

ライセンスキーのエンタイトルメントがある製品を購入する際に、生成されたキーが自動的にインライン コード プレースホルダー_dc93d1611d4b8b33_ENDにクエリパラメータとして追加されます。これにより、追加のAPIコールを行わずに成功ページですぐにキーを表示できます。
https://yoursite.com/return?payment_id=pay_xxx&status=succeeded&license_key=LK-001&email=customer%40example.com
購入が複数のキーを生成する場合(数量 > 1)、キーはカンマで区切られます:
https://yoursite.com/return?payment_id=pay_xxx&status=succeeded&license_key=LK-001,LK-002&email=customer%40example.com
サブスクリプションに対しては、インライン コード プレースホルダー_da81ade15518f46e_ENDがインライン コード プレースホルダー_6846e3bcf892587a_ENDの代わりに使用されます:
https://yoursite.com/return?subscription_id=sub_xxx&status=active&license_key=LK-001&email=customer%40example.com
インライン コード プレースホルダー_5b1129a496545a53_END パラメータをリターンページで解析し、キーをすぐに表示することで、購入後の体験を向上させます。

API管理

アクティベーション、非アクティブ化、検証は公開されており、APIキーは不要です。 ライセンスキーのアクティベーションインスタンスを作成または記録します。 容量を解放するために以前のアクティベーションを取り消します。 アクセスを許可する前に、正当性、ステータス、および制約を確認します。 個々のライセンスキーの記録を作成、リスト、取得、更新します。これらを使用して既存のキーをインポートしたり、使用状況の詳細を取得したりできます。 新しいライセンスキーを作成または既存のものをインポートします。 ステータスや使用状況の詳細を含むすべてのキーをブラウズします。 特定のキーとそのメタデータを取得します。 有効期限、アクティベーション制限、またはキーの有効/無効化を変更します。 ライセンスキーのエンタイトルメント自体を管理します:アクティベーション制限、期間、指示。 ライセンスキー エンタイトルメントを作成します。 エンタイトルメントの設定を更新します。 エンタイトルメントのために発行されたキーをリストします。 顧客のキーを手動で取り消します。

ウェブフック

ライセンスキーの配信および取り消しは4つのentitlement_grant.*ウェブフックイベントをトリガーします。付与ペイロードには、キー、有効期限、使用済みアクティベーション、制限が含まれるインライン コード プレースホルダー_5b1129a496545a53_END オブジェクトが記載されています。 レガシーのインライン コード プレースホルダー_3550d66ddec4c0ee_END イベント(インライン コード プレースホルダー_e162c4e1108e199f_END)は、基礎となるライセンスキー記録のライフサイクルに対して引き続きトリガーされます。ライセンスキーウェブフックペイロードページをご覧ください。 新しい統合のために、インライン コード プレースホルダー_10abd72584d662ac_ENDをインライン コード プレースホルダー_e162c4e1108e199f_ENDではなくリッスンします。エンタイトルメントイベントは、製品上のすべての統合に対して配信が完了したことを示し、ライセンスキーだけではありません。

レガシーライセンスキー

古いインライン コード プレースホルダー_6247e3170cdd6f45_END フラグで作成された製品は、自動的にライセンスキー エンタイトルメントに移行されました。移行は透過的であり、既存の顧客のキーは変更なく機能し続けます。公開されたインライン コード プレースホルダー_95eac4538426caa4_END、インライン コード プレースホルダー_973c5559763fa09a_END、インライン コード プレースホルダー_6c69aad7d32f502e_END エンドポイントは引き続き機能し、インライン コード プレースホルダー_d2e189eb784e7086_END APIエンドポイントは同じキー ストアを読み書きします。 スタンドアロンのライセンスキーダッシュボードセクションは発行されたすべてのキーのフラットリストとして利用可能で、監査および検索に便利です。新しい構成(アクティベーション制限、有効期間、指示の変更)は、エンタイトルメントの下で移行されたライセンスキー エンタイトルメントを編集することによって行うべきです。

ベストプラクティス

  • アクティベーション制限を明確に保つ: 合理的なデフォルトを選択(シングルユーザーアプリの場合は1、チームライセンスの場合は3~5)し、文書化します。
  • 正確なアクティベーション指示を提供する: 顧客はこれをメールから貼り付けるため、正確なパスとコマンドがサポートチケットを節約します。
  • サーバー側でキーを検証する: ネットワーク接続された製品に対しては、ローカルにアクティベーションをキャッシュするのではなく、インライン コード プレースホルダー_973c5559763fa09a_END を使用して検証します。
  • ウェブフックを無効化に使用する: インライン コード プレースホルダー_87ada0578aa4a993_ENDをリッスンし、顧客がキャンセルまたは返金されるときにアプリ内機能を即座に無効化します。
  • サブスクリプションと一回限りの試験を行う: ライセンスキーの動作は両者で微妙に異なるため、本稼働前に両方を試験します。
  • Keep activation limits clear: Choose sensible defaults (1 for single-user apps, 3–5 for team licenses) and document them.
  • Provide precise activation instructions: Customers paste these from their email, so exact paths and commands save support tickets.
  • Validate keys server-side: For network-connected products, validate via /licenses/validate rather than caching activation locally.
  • Use webhooks for revocation: Listen to entitlement_grant.revoked to disable in-app features immediately when a customer cancels or refunds.
  • Test with subscriptions and one-times: License key behavior differs subtly between the two, so test both before going live.
Last modified on May 14, 2026