> ## 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.

# v1.97.6 (2026年5月7日)

> 5つの新しいフルフィルメント統合（Discord、GitHub、Telegram、Framer、Notion）を備えたEntitlementsの発売、カスタマーポータルでのサブスクリプションキャンセル理由表示、設定可能なINR電子委任状の最低金額、適応通貨手数料包括設定、macOS/Windows/Linux用Dodo Payments Desktopアプリ、ステーブルコイン（USDC/USDP/USDG）支払い、既存ライセンスキーのインポート、チェックアウトセッションでのrequire_phone_number、バグ修正

## 新機能

### 1. **Entitlements**

Dodo Paymentsは、すべてのフルフィルメント統合を自動で提供する単一レイヤーの統合**Entitlements**を提供します。単一の製品で、成功した購入やアクティブなサブスクリプションごとに複数の特典を提供できます。

![特典ダッシュボード、左には特典リスト、右には付与アクティビティが表示](https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/list.png?fit=max\&auto=format\&n=do-W-dMDGVB_xzr_\&q=85\&s=12a326205f64d1e71485bce46114d296)

**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`を確認 |

> [!TIP]
>
> 新しい統合の場合、`payment.succeeded`ではなく`entitlement_grant.delivered`をリッスンしてください。支払い成功が必ずしも配信完了を意味するわけではありません、特にOAuthベースの統合では。

詳細はこちら: [Entitlements](/features/entitlements/introduction.md) | [Entitlement Grant Webhooks](/developer-resources/webhooks/intents/entitlement-grant.md)

### 2. **カスタマーポータルでのサブスクリプションキャンセル理由**

顧客がカスタマーポータルからサブスクリプションをキャンセルする際、**キャンセル理由**を共有するよう促されます。取得された理由はサブスクリプションに`cancellation_feedback`として保存され、APIとウェブフックのペイロードに表示され、ダッシュボードで簡単にチャーンパターンを可視化できます。

![カスタマーポータルのキャンセルモーダル。キャンセル理由として「高価すぎる」「機能不足」「その他」などが選択可能なドロップダウンを表示](https://mintcdn.com/dodopayments/RlXcM7JO-E_w40Np/images/customer-portal/cancellation-reasons.png?fit=max\&auto=format\&n=RlXcM7JO-E_w40Np\&q=85\&s=979394da2a9aa3907cbf9f4e225f9a4b)

**理由オプション**

| 値 | 顧客向けラベル |
| - | - |
| `too_expensive` | 高価すぎる |
| `missing_features` | 機能不足 |
| `switched_service` | 別のサービスに切り替えた |
| `unused` | 使用頻度が低い |
| `customer_service` | 顧客サービスが悪い |
| `low_quality` | 品質が低い |
| `too_complex` | 複雑すぎる |
| `other` | その他 |

**表示場所**

* **Subscription object**: 新しい `cancellation_feedback` フィールド（上記の値のいずれか）と `cancellation_comment`（任意の自由記述）が追加され、顧客がキャンセルした際に設定されます
* **`subscription.cancelled` webhook**: 両方のフィールドがペイロードに含まれます
* **API**: プログラムからキャンセルをスケジュールまたは実行する際に、`cancellation_feedback` と `cancellation_comment` を `PATCH /subscriptions/{subscription_id}` に渡します

```typescript theme={null}
// 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"
```

> [!TIP]
>
> `cancellation_feedback`と[サブスクリプションDunning](/features/recovery/subscription-dunning.md)を組み合わせて、カスタムされたウィンバックメールを送信します。例: `too_expensive`キャンセラーに割引コードを送信し、`missing_features`キャンセラーに「不足している点は何ですか？」のアンケートを送信。

詳細はこちら: [カスタマーポータル](/features/customer-portal.md#cancelling-a-subscription) | [サブスクリプションWebhook](/developer-resources/webhooks/intents/subscription.md)

### 3. **設定可能なINR電子委任状の最低金額**

インドカードの繰り返しサブスクリプションでのINR電子委任状の**最低額**を設定できるようになりました。以前は、15,000ルピー未満のインドカードサブスクリプションは固定の15,000ルピーオンデマンド委任状を使用していましたが、今ではこの最低額をマーチャントレベルでまたは必要に応じてチェックアウトセッションまたはサブスクリプションごとに上書きできます。

顧客の銀行に登録された委任金額は`max(mandate_min_amount_inr_paise, billing_amount)`で、請求額が最低額を下回る場合には顧客向けの**オーソリゼーション上限**として機能します。

```typescript theme={null}
// Per-subscription override
const subscription = await client.subscriptions.create({
  product_id: 'pdt_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: 'pdt_inr_monthly', quantity: 1 }],
  mandate_min_amount_inr_paise: 2_000_000,
  return_url: 'https://yoursite.com/return'
});
```

**解決優先順位**

1. リクエストごとの上書き（チェックアウトセッション、支払い、またはサブスクリプションにおける`mandate_min_amount_inr_paise`）
2. ビジネス設定におけるマーチャントレベルの設定
3. **15,000ルピー**（1,500,000 paise）のシステムデフォルト

| フィールド | タイプ | 範囲 | 適用対象 |
| - | - | - | - |
| `mandate_min_amount_inr_paise` | `integer` (INR paise) | `>= 1` | 非AirwallexコネクタのインドカードINRサブスクリプション |

> [!NOTE]
>
> この設定は、INRサブスクリプションにおけるインド発行カード（Visa、Mastercard、RuPay）の電子委任状にのみ影響します。UPIサブスクリプションは独自のAutoPayフローに従い影響を受けません。

詳細はこちら: [インドの支払い方法](/features/payment-methods/india.md#mandate-types) | [RBI委任状付きサブスクリプション](/features/subscription.md#subscriptions-with-rbi-compliant-mandates)

### 4. **適応通貨手数料包括ビジネス設定**

適応通貨は、顧客の現地通貨で課金できる機能です。デフォルトでは、**2–4%の適応通貨手数料**は顧客負担で、表示される価格に上乗せされます。新しい**手数料の包括**設定を使用すると、これを反転させることができます。すなわち、顧客向けの表示価格を変更せずに手数料を自分で吸収することができます。

**設定場所**

**設定 → ビジネス** に移動し、**適応価格設定** が有効であることを確認し、適応通貨セクションで**手数料の包括** をトグルします。

**リクエストごとの上書き**

また、`adaptive_currency_fees_inclusive` booleanを使用して、個別の支払い、オンデマンドのサブスクリプション請求、およびプラン変更に対するmerchantのデフォルト設定を上書きすることもできます。

```typescript theme={null}
const payment = await client.payments.create({
  product_cart: [{ product_id: 'pdt_abc', quantity: 1 }],
  customer: { customer_id: 'cus_123' },
  billing: { country: 'US' },
  adaptive_currency_fees_inclusive: true, // override business default
  return_url: 'https://yoursite.com/return'
});
```

| モード | 顧客が見る価格 | マーチャントが受け取る価格 |
| - | - | - |
| 排他的（デフォルト） | 現地価格 + 2–4%手数料上乗せ | 基本価格全額 |
| 包括的 | 現地価格（変更なし） | 基本価格から2–4%手数料差引 |

> [!NOTE]
>
> INR → INRの取引は、ビジネス設定またはリクエストごとのオーバーライドに関係なく、常に包括的として扱われます。

詳細はこちら: [適応通貨](/features/adaptive-currency.md)

### 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` 開発者モード）
* **ディープリンクサポート** — マジックリンク認証リンクが直接アプリで開く
* **マルチウィンドウ** — 複数のダッシュボードを並べて開く

> [!TIP]
>
> [Desktop App Releasesページ](https://github.com/dodopayments/dodo-desktop/releases/latest)からお使いのプラットフォームに最新のインストーラーを入手してください。リポジトリは完全にオープンソースです。

### 6. **ステーブルコイン決済（USDC、USDP、USDG）**

USD決済で**ステーブルコイン決済をグローバルに**受け入れます。顧客は選択したネットワークのウォレットから支払いを行い、あなたはフィアットUSDを受け取ります。仮想通貨のボラティリティへの露出、チャージバック、そして顧客側の銀行インフラは不要です。

**対応通貨とネットワーク**

| ステーブルコイン | ネットワーク |
| - | - |
| **USDC** | Ethereum、Solana、Polygon、Base |
| **USDP** | Ethereum、Solana |
| **USDG** | Ethereum |

**カバレッジ**

| 詳細 | 値 |
| - | - |
| 請求通貨 | USD |
| 対応国 | グローバル（インドを除く） |
| サブスクリプション | 非対応（ワンタイム決済のみ） |
| 最低金額 | \$0.50 |
| 決済通貨 | USD |

**設定**

チェックアウトセッションを作成する際に、`crypto_currency` を `allowed_payment_method_types` に渡します。

```javascript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [{ product_id: 'pdt_123', quantity: 1 }],
  allowed_payment_method_types: ['crypto_currency', 'credit', 'debit'],
  return_url: 'https://example.com/success'
});
```

顧客にはウォレットアドレスとQRコードが表示され、リアルタイムの為替レートで計算されたステーブルコイン金額が示されます。ブロックチェーンがトランザクションを確認すると、あなたの`payment.succeeded`ウェブフックが発生し、顧客はあなたの成功ページにリダイレクトされます。

> [!NOTE]
>
> ステーブルコイン決済は設計上不可逆です — チャージバックはありません。ステーブルコインウォレットを持っていない顧客向けに常に`credit`と`debit`をフォールバックメソッドとして提供することをお勧めします。

詳細はこちら: [ステーブルコイン決済](/features/payment-methods/stablecoins.md)

### 7. **既存ライセンスキーのインポート**

[Create License Key API](/api-reference/licenses/create-license-key.md)を使用して**他のシステムからライセンスキーをDodo Paymentsにインポート**できます。これにより、外部のライセンスキー提供者からの移行がゼロダウンタイムで可能になり、既存の顧客がキーをDodo Paymentsで再発行なしでアクティブ化、検証、非アクティベートすることが可能です。

```typescript theme={null}
const licenseKey = await client.licenseKeys.create({
  customer_id: 'cus_abc123',
  product_id: 'pdt_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のトランザクションに結び付けられていないからです。

> [!WARNING]
>
> APIを通じて作成または更新されたライセンスキーは、顧客へのメール通知をトリガーしません。インポートされたキーに関して顧客に通知する必要がある場合は、アプリケーションで個別に対応してください。

> [!TIP]
>
> Polar.shまたはLemon Squeezyから移行していますか？ [`dodo-migrate` CLI](/migrate-to-dodo)を使用すると、プロダクト、顧客、割引、およびライセンスキーを一括でインポートできます。

詳細はこちら: [ライセンスキー](/features/license-keys.md#import-existing-license-keys-via-api) | [Create License Key API](/api-reference/licenses/create-license-key.md)

### 8. **チェックアウトセッションの`require_phone_number`**

チェックアウトセッションを作成する際、顧客に電話番号を提供させるために`feature_flags.require_phone_number: true`を設定します。電話番号はチェックアウトフォームで必須フィールドになり、顧客が空白のままにすると「電話番号が必要です」というフォームバリデーションが表示されます。

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [{ product_id: 'pdt_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` | 電話番号フィールドが必須 |

> [!WARNING]
>
> `require_phone_number: true`は`allow_phone_number_collection: true`が必要です。APIは、電話番号収集が無効な状態で`require_phone_number`がtrueの場合、セッションを拒否します。

> [!TIP]
>
> B2B SaaS、規制された業界、またはサポート、詐欺審査、またはコンプライアンスのために検証済みの連絡先チャネルが必要なフローには便利です。

詳細はこちら: [チェックアウトの機能](/features/checkout.md) | [Create Checkout Session API](/api-reference/checkout-sessions/create.md)

## バグ修正と改善

* プラットフォーム全体での細かなバグ修正と安定性の向上


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.