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.
新機能
1. Entitlements
Dodo Paymentsは、すべてのフルフィルメント統合を自動で提供する単一レイヤーの統合Entitlementsを提供します。単一の製品で、成功した購入やアクティブなサブスクリプションごとに複数の特典を提供できます。
5つの新しいプラットフォーム統合
これまで、Dodo Paymentsは購入時にライセンスキーとデジタルファイルを自動的に提供していました。Entitlementsはその範囲をさらに5つのプラットフォームに拡大します。支払いが成功すると、手動のフルフィルメントなしでコミュニティ、コード、またはコンテンツへのアクセスが顧客に付与されます:
| 統合 | 提供内容 | 取り消しの動作 |
|---|
| Discord | 顧客がOAuthを完了した後、Discordサーバーで選択されたロールを割り当てます | キャンセル/返金時にロール削除 |
| GitHub | 顧客を選択した権限レベルでプライベートリポジトリのコラボレーターとして追加 | キャンセル/返金時にコラボレーター削除 |
| Telegram | あなたのTelegramボットを通じてプライベートチャットまたはチャネルへの一度きりの参加要求招待リンクを発行 | キャンセル/返金時にチャットから顧客を排除 |
| Framer | アクセスコードでゲートされたFramerテンプレートのリミックスリンクを解除 | キャンセル/返金時にアクセスコードを無効化 |
| Notion | OAuth経由で顧客のワークスペースにNotionテンプレートページを複製 | キャンセル/返金時に提供されたページをアーカイブ |
これには既存のライセンスキー(アクティベーション制限および有効期限付きのユニークキー)、およびデジタルファイル(e-ブック、テンプレート、メディアの署名ダウンロードURL)統合が含まれ、同じ付与ライフサイクルで管理されます。
標準で提供される内容
| 機能 | 説明 |
|---|
| 再利用可能なテンプレート | 一度特典を定義し(アクティベーション制限、ファイルバンドル、Discordロール、リポジトリ権限など)、任意の製品に付与可能 |
| 自動付与 | payment.succeededおよびsubscription.active時に発行され、更新および再アクティベーションで冪等 |
| ライフサイクル対応の取り消し | subscription.cancelled、subscription.on_hold、subscription.expired、refund.succeeded、subscription.plan_changed、または手動のAPI/ダッシュボード取り消しで取り消し - revocation_reasonで完了状態 |
| OAuth + プラットフォーム直接フロー | Discord、GitHub、およびNotionの購読者同意用OAuth; Telegram、Framer、デジタルファイルの直接プラットフォーム呼び出し |
| ドリフト検出 | Discordロール、GitHubコラボレーター、またはNotionページがプラットフォームレベルで同期から外れた場合に検出し、revocation_reason: platform_externalで取り消し |
| 保存時の暗号化 | すべてのプラットフォームトークン(OAuth、ボット、アプリインストール)はAES-256-GCMで保存 |
ウェブフック
すべての付与に対して4つの新しいライフサイクルイベントが発生します:
| イベント | 発生条件 |
|---|
entitlement_grant.created | 顧客のために新しい付与が作成された時 |
entitlement_grant.delivered | 顧客のアクセスが提供された時 |
entitlement_grant.failed | 配信が完了できなかった時; error_codeおよびerror_messageを確認 |
entitlement_grant.revoked | アクセスが取り消された時; revocation_reasonを確認 |
新しい統合の場合、payment.succeededではなくentitlement_grant.deliveredをリッスンしてください。支払い成功が必ずしも配信完了を意味するわけではありません、特にOAuthベースの統合では。
詳細はこちら: Entitlements | Entitlement Grant Webhooks
2. カスタマーポータルでのサブスクリプションキャンセル理由
顧客がカスタマーポータルからサブスクリプションをキャンセルする際、キャンセル理由を共有するよう促されます。取得された理由はサブスクリプションにcancellation_feedbackとして保存され、APIとウェブフックのペイロードに表示され、ダッシュボードで簡単にチャーンパターンを可視化できます。
理由オプション
| 値 | 顧客向けラベル |
|---|
too_expensive | 高価すぎる |
missing_features | 機能不足 |
switched_service | 別のサービスに切り替えた |
unused | 使用頻度が低い |
customer_service | 顧客サービスが悪い |
low_quality | 品質が低い |
too_complex | 複雑すぎる |
other | その他 |
表示場所
- サブスクリプションオブジェクト: 新しいフィールド
cancellation_feedback(上記のいずれかの値)およびcancellation_comment(任意の自由テキスト)が顧客がキャンセルした時に入力されます。
subscription.cancelledウェブフック: 両フィールドがペイロードに含まれます。
- API: プログラムでキャンセルをスケジュールまたは実行する際に
cancellation_feedbackとcancellation_commentをPATCH /subscriptions/{id}に渡します。
// Reading the captured feedback
const subscription = await client.subscriptions.retrieve('sub_123');
console.log(subscription.cancellation_feedback); // e.g., "too_expensive"
console.log(subscription.cancellation_comment); // e.g., "Switching to a competitor"
cancellation_feedbackとサブスクリプションDunningを組み合わせて、カスタムされたウィンバックメールを送信します。例: too_expensiveキャンセラーに割引コードを送信し、missing_featuresキャンセラーに「不足している点は何ですか?」のアンケートを送信。
詳細はこちら: カスタマーポータル | サブスクリプションWebhook
3. 設定可能なINR電子委任状の最低金額
インドカードの繰り返しサブスクリプションでのINR電子委任状の最低額を設定できるようになりました。以前は、15,000ルピー未満のインドカードサブスクリプションは固定の15,000ルピーオンデマンド委任状を使用していましたが、今ではこの最低額をマーチャントレベルでまたは必要に応じてチェックアウトセッションまたはサブスクリプションごとに上書きできます。
顧客の銀行に登録された委任金額はmax(mandate_min_amount_inr_paise, billing_amount)で、請求額が最低額を下回る場合には顧客向けのオーソリゼーション上限として機能します。
// Per-subscription override
const subscription = await client.subscriptions.create({
product_id: 'prod_inr_monthly',
customer: { email: 'customer@example.in' },
billing: { country: 'IN' /* ... */ },
mandate_min_amount_inr_paise: 2_000_000 // ₹20,000 ceiling for this subscription
});
// Or via a checkout session
const session = await client.checkoutSessions.create({
product_cart: [{ product_id: 'prod_inr_monthly', quantity: 1 }],
mandate_min_amount_inr_paise: 2_000_000,
return_url: 'https://yoursite.com/return'
});
解決優先順位
- リクエストごとの上書き(チェックアウトセッション、支払い、またはサブスクリプションにおける
mandate_min_amount_inr_paise)
- ビジネス設定におけるマーチャントレベルの設定
- 15,000ルピー(1,500,000 paise)のシステムデフォルト
| フィールド | タイプ | 範囲 | 適用対象 |
|---|
mandate_min_amount_inr_paise | integer (INR paise) | >= 1 | 非AirwallexコネクタのインドカードINRサブスクリプション |
この設定は、INRサブスクリプションにおけるインド発行カード(Visa、Mastercard、RuPay)の電子委任状にのみ影響します。UPIサブスクリプションは独自のAutoPayフローに従い影響を受けません。
詳細はこちら: インドの支払い方法 | RBI委任状付きサブスクリプション
4. 適応通貨手数料包括ビジネス設定
適応通貨は、顧客の現地通貨で課金できる機能です。デフォルトでは、2–4%の適応通貨手数料は顧客負担で、表示される価格に上乗せされます。新しい手数料の包括設定を使用すると、これを反転させることができます。すなわち、顧客向けの表示価格を変更せずに手数料を自分で吸収することができます。
設定場所
設定 → ビジネス に移動し、適応価格設定 が有効であることを確認し、適応通貨セクションで手数料の包括 をトグルします。
リクエストごとの上書き
マーチャントデフォルトを個別のチェックアウト、支払い、オンデマンドサブスクリプション用にadaptive_currency_fees_inclusiveブール値でオーバーライドできます:
const session = await client.checkoutSessions.create({
product_cart: [{ product_id: 'prod_abc', quantity: 1 }],
adaptive_currency_fees_inclusive: true, // override business default
return_url: 'https://yoursite.com/return'
});
| モード | 顧客が見る価格 | マーチャントが受け取る価格 |
|---|
| 排他的(デフォルト) | 現地価格 + 2–4%手数料上乗せ | 基本価格全額 |
| 包括的 | 現地価格(変更なし) | 基本価格から2–4%手数料差引 |
INR → INRの取引は、ビジネス設定またはリクエストごとのオーバーライドに関係なく、常に包括的として扱われます。
詳細はこちら: 適応通貨
5. Dodo Payments デスクトップアプリ
公式のDodo Payments デスクトップアプリは、macOS、Windows、Linuxで一般向けに提供されています。ブラウザタブ不要の高速なネイティブアプリとして支払いダッシュボードを実行します。
| プラットフォーム | ダウンロード |
|---|
| macOS (Apple Silicon) | Dodo.Payments_<version>_aarch64.dmg |
| macOS (Intel) | Dodo.Payments_<version>_x64.dmg |
| Windows | Dodo.Payments_<version>_x64-setup.exe (または.msi) |
| Linux (Debian/Ubuntu) | Dodo.Payments_<version>_amd64.deb |
| Linux (Fedora/RHEL) | Dodo.Payments-<version>-1.x86_64.rpm |
| Linux (AppImage、自動更新) | Dodo.Payments_<version>_amd64.AppImage |
中身
- 小さなネイティブバイナリー — Tauriで構築、システムのネイティブWebビューを使用し、~5 MBの合計(Chromiumは含まれない)
- 署名および公証済み — macOSビルドはApple Developer IDで署名され、公証されているため、Gatekeeper警告はありません
- 自動更新 — 4時間ごとにチェックされ、GitHubのリリースから署名付きアップデートが自動で適用されます(macOS、Windows、およびLinux AppImageで動作)
- システムトレイ + メニューバー — macOSでトレイに隠す、キーボードショートカット付きの完全なファイル/編集/表示/ヘルプメニュー(
⌘⇧H ダッシュボードに移動、⌘L 現在のURLをコピー、⌘⌥I 開発者モード)
- ディープリンクサポート — マジックリンク認証リンクが直接アプリで開く
- マルチウィンドウ — 複数のダッシュボードを並べて開く
6. ステーブルコイン決済(USDC、USDP、USDG)
USD決済でステーブルコイン決済をグローバルに受け入れます。顧客は選択したネットワークのウォレットから支払いを行い、あなたはフィアットUSDを受け取ります。仮想通貨のボラティリティへの露出、チャージバック、そして顧客側の銀行インフラは不要です。
対応通貨とネットワーク
| ステーブルコイン | ネットワーク |
|---|
| USDC | Ethereum、Solana、Polygon、Base |
| USDP | Ethereum、Solana |
| USDG | Ethereum |
カバレッジ
| 詳細 | 値 |
|---|
| 請求通貨 | USD |
| 対応国 | グローバル(インドを除く) |
| サブスクリプション | 非対応(単回払いのみ) |
| 最低額 | $0.50 |
| 決済 | USD |
設定
チェックアウトセッションを作成する際にcryptoをallowed_payment_method_typesで指定します:
const session = await client.checkoutSessions.create({
product_cart: [{ product_id: 'prod_123', quantity: 1 }],
allowed_payment_method_types: ['crypto', 'credit', 'debit'],
return_url: 'https://example.com/success'
});
顧客にはウォレットアドレスとQRコードが表示され、リアルタイムの為替レートで計算されたステーブルコイン金額が示されます。ブロックチェーンがトランザクションを確認すると、あなたのpayment.succeededウェブフックが発生し、顧客はあなたの成功ページにリダイレクトされます。
ステーブルコイン決済は設計上不可逆です — チャージバックはありません。ステーブルコインウォレットを持っていない顧客向けに常にcreditとdebitをフォールバックメソッドとして提供することをお勧めします。
詳細はこちら: ステーブルコイン決済
7. 既存ライセンスキーのインポート
Create License Key APIを使用して他のシステムからライセンスキーをDodo Paymentsにインポートできます。これにより、外部のライセンスキー提供者からの移行がゼロダウンタイムで可能になり、既存の顧客がキーをDodo Paymentsで再発行なしでアクティブ化、検証、非アクティベートすることが可能です。
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',
});
インポートされたキーはsource: "import"でタグ付けされます(支払い時に自動的に生成されたキーはsource: "auto")。あなたがGET /license_keysをクエリするとき、移行された在庫と自然発生したキーを区別できます。インポートされたキーのpayment_idはnullです。それらはDodo Paymentsのトランザクションに結び付けられていないからです。
APIを通じて作成または更新されたライセンスキーは、顧客へのメール通知をトリガーしません。インポートされたキーに関して顧客に通知する必要がある場合は、アプリケーションで個別に対応してください。
Polar.shまたはLemon Squeezyから移行していますか? dodo-migrate CLIを使用すると、プロダクト、顧客、割引、およびライセンスキーを一括でインポートできます。
詳細はこちら: ライセンスキー | Create License Key API
8. チェックアウトセッションのrequire_phone_number
チェックアウトセッションを作成する際、顧客に電話番号を提供させるためにfeature_flags.require_phone_number: trueを設定します。電話番号はチェックアウトフォームで必須フィールドになり、顧客が空白のままにすると「電話番号が必要です」というフォームバリデーションが表示されます。
const session = await client.checkoutSessions.create({
product_cart: [{ product_id: 'prod_abc', quantity: 1 }],
feature_flags: {
allow_phone_number_collection: true,
require_phone_number: true
},
return_url: 'https://yoursite.com/return'
});
| フラグ | デフォルト | 挙動 |
|---|
allow_phone_number_collection | true | チェックアウトに電話番号フィールドが表示 |
require_phone_number | false | 電話番号フィールドが必須 |
require_phone_number: trueはallow_phone_number_collection: trueが必要です。APIは、電話番号収集が無効な状態でrequire_phone_numberがtrueの場合、セッションを拒否します。
B2B SaaS、規制された業界、またはサポート、詐欺審査、またはコンプライアンスのために検証済みの連絡先チャネルが必要なフローには便利です。
詳細はこちら: チェックアウトの機能 | Create Checkout Session API
バグ修正と改善
- プラットフォーム全体での細かなバグ修正と安定性の向上