> ## 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.99.0 (2026年5月25日)

> 割引コードのスタック（1回のチェックアウト、支払い、またはサブスクリプションにつき最大20個）、返金およびサブスクリプションのライフサイクルイベントに関する新規顧客向け通知メール7種類、成功率を2～3%向上させるチェックアウト支払いページの全面改修、ライブプレビューと自動保存を備えた商品フォームの刷新、Business Settingsのデザイン変更

## 新機能

### 1. **スタック割引コード**

チェックアウトセッション、支払い、サブスクリプション、およびプラン変更では、**1回のリクエストで最大20個の割引コード**を`discount_codes`配列を介して受け入れるようになりました。コードは**配列の順序で**適用されます。最初の適用可能なコードは基本価格を引き下げ、2番目のコードはすでに割引された価格を引き下げます。このようにして、特別な組み合わせコードを作成せずにキャンペーンを積み重ねることができます。

<Frame>
  <img src="https://mintcdn.com/dodopayments/Ehnri26kKx69Tfxe/images/changelog/v1.99.0/stacked-discounts.png?fit=max&auto=format&n=Ehnri26kKx69Tfxe&q=85&s=7a2606d7027de6e662cf9be6b7df8213" alt="複数のスタック割引コードを持つプラン変更確認ダイアログ" style={{ maxHeight: '500px', width: 'auto' }} width="1132" height="1023" data-path="images/changelog/v1.99.0/stacked-discounts.png" />
</Frame>

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [{ product_id: 'pdt_abc', quantity: 1 }],
  discount_codes: ['WELCOME10', 'BLACKFRIDAY20'], // applied in this order
  customer: { email: 'user@example.com' },
  return_url: 'https://yoursite.com/return'
});
```

**適用される場所**

| サーフェス        | フィールド            | 最大コード数 |
| ------------ | ---------------- | ------ |
| チェックアウトセッション | `discount_codes` | 20     |
| 支払い          | `discount_codes` | 20     |
| サブスクリプション    | `discount_codes` | 20     |
| プラン変更        | `discount_codes` | 20     |

**プラン変更の動作**

| `discount_codes` 値          | 効果                                                      |
| --------------------------- | ------------------------------------------------------- |
| 提供されていない場合                  | 新製品に適用可能な場合、既存の割引が`preserve_on_plan_change=true`で保持されます |
| `[]` (空の配列)                 | すべての既存割引がサブスクリプションから削除されます                              |
| `['CODE_A', 'CODE_B', ...]` | 配列の順序で適用されるこのスタックセットに既存の割引を置き換えます                       |

**レスポンスの形状**

適用された割引の完全なセットは、支払いおよびサブスクリプションの`discounts`配列の下に返されます。各エントリには`discount_id`、`position`、および`cycles_remaining`（サブスクリプション用）が含まれています。レガシーの単一の`discount_id`フィールドは非推奨ですが、後方互換性のためにまだ存在しています。

<Info>
  単一の`discount_code`フィールドは**非推奨**ですが、完全にサポートされています。既存の統合は変更なしで動作を続けます。これと`discount_codes`を同じリクエストで組み合わせることはできません。スタッキングと豊富なレスポンス形状を活用するために、便利なときに`discount_codes`への移行をお勧めします。単一のコードであっても同様です。
</Info>

詳細はこちら：[割引コード](/features/discount-codes) | [チェックアウトセッション](/developer-resources/checkout-session) | [プラン変更](/developer-resources/subscription-upgrade-downgrade)

### 2. **7つの新しい顧客通知メール**

払い戻し確認、サブスクリプションライフサイクルマイルストーン、および支払い失敗をカバーする7つの新しいトランザクションメールが自動的にあなたの顧客に送信されます。各メールは**設定 → コミュニケーション**の**顧客メール**セクションで独立して切り替えることができます。

<Frame>
  <img src="https://mintcdn.com/dodopayments/Ehnri26kKx69Tfxe/images/changelog/v1.99.0/customer-notification-emails.png?fit=max&auto=format&n=Ehnri26kKx69Tfxe&q=85&s=44cad42723269d9728a9dae2a061613b" alt="各通知メールの切り替えが可能な顧客メール設定パネル" style={{ maxHeight: '500px', width: 'auto' }} width="1694" height="1020" data-path="images/changelog/v1.99.0/customer-notification-emails.png" />
</Frame>

**オプトイン（デフォルトで有効）**

| メール                         | 送信タイミング                         |
| --------------------------- | ------------------------------- |
| **払い戻し成功**                  | 払い戻しが成功し、顧客に資金が戻る途中であるとき        |
| **サブスクリプショントライアル終了**        | トライアルが終了し最初の請求が行われる約2日前         |
| **サブスクリプションが即時キャンセルされた**    | サブスクリプションが即時にキャンセルされたとき         |
| **次の請求日にキャンセルされるサブスクリプション** | 現在の請求期間終了時にキャンセルが予定されたサブスクリプション |

**オプトアウト（デフォルトで無効）**

| メール               | 送信タイミング                                                                           |
| ----------------- | --------------------------------------------------------------------------------- |
| **支払い失敗**         | 支払いの試行が失敗したとき — Dodo Paymentsが顧客に直接通知することを望む場合に有効にしてください、そうでない場合はあなた自身のシステムで処理します |
| **サブスクリプション更新失敗** | サブスクリプション更新の支払いが失敗した場合に特定、更新支払いの一般的な支払失敗メールの代わりに発生します（追加ではなく代わりに）                 |
| **次回更新の通知**       | サブスクリプションが更新される約2日前                                                               |

<Tip>
  顧客コミュニケーションをウェブフックで管理している場合、オプトアウトのメールを無効にして、同じイベントに対する重複した通知を顧客に送信しないようにします。
</Tip>

<Note>
  顧客メールは、あなたのチームに送信される通知メールとは別です。顧客メールを無効にしても、同じイベントに対するあなたのチームの通知には影響しません。
</Note>

詳細はこちら：[通信設定](/features/communication-preferences)

## 改善点

### 3. **チェックアウト支払いページの全面改修**

チェックアウトの支払いページをエンドツーエンドで大幅に刷新しました。レイアウトの最適化、体感読み込み速度の向上、より明確なバリデーション状態、カード入力UXの改善を実施しています。これらの変更により、全世界のトラフィックにおける**実測チェックアウト成功率が約2～3%向上**しました。

<div style={{ display: 'flex', gap: '16px', alignItems: 'flex-start', flexWrap: 'wrap' }}>
  <div style={{ flex: '1 1 280px', minWidth: '260px' }}>
    <Frame caption="Before">
      <img src="https://mintcdn.com/dodopayments/Ehnri26kKx69Tfxe/images/changelog/v1.99.0/checkout-payment-before.png?fit=max&auto=format&n=Ehnri26kKx69Tfxe&q=85&s=cd86eb287a4688e14bb01e836382744f" alt="以前のチェックアウト支払いページ" width="509" height="695" data-path="images/changelog/v1.99.0/checkout-payment-before.png" />
    </Frame>
  </div>

  <div style={{ flex: '1 1 280px', minWidth: '260px' }}>
    <Frame caption="After">
      <img src="https://mintcdn.com/dodopayments/Ehnri26kKx69Tfxe/images/changelog/v1.99.0/checkout-payment-after.png?fit=max&auto=format&n=Ehnri26kKx69Tfxe&q=85&s=4eb10926ab5a1a1c97ab4cbf16e78fb2" alt="再設計されたチェックアウト支払いページ" width="1114" height="1612" data-path="images/changelog/v1.99.0/checkout-payment-after.png" />
    </Frame>
  </div>
</div>

変更点：

* **フィールド操作のスムーズ化** — カードフォームでのオートフォーカス、よりスマートなタブ順序、キーボードナビゲーションの改善
* **エラーおよび読み込み状態の明確化** — 従来のフォーム全体に表示するエラーバナーに代わり、顧客が対応すべき場所にインラインバリデーションを正確に表示
* **描画の高速化** — スケルトンと段階的なハイドレーションにより、低速なネットワークで一時的に画面が空白になるちらつきを解消
* **モバイル向けの改善** — トラフィックの大半を占めるようになったモバイルチェックアウトに合わせ、タップ対象、スクロール動作、キーボード処理を最適化

<Tip>
  統合側での変更は必要ありません。既存のチェックアウトセッションには、新しい支払いページが自動的に適用されます。
</Tip>

### 4. **商品フォームの刷新**

商品の**作成**、**編集**、**複製**フローを、統一された一貫性のあるフォーム体験を中心にゼロから再構築しました。

<Frame>
  <img src="https://mintcdn.com/dodopayments/Ehnri26kKx69Tfxe/images/changelog/v1.99.0/product-form.png?fit=max&auto=format&n=Ehnri26kKx69Tfxe&q=85&s=12693e04457400a4aa33063ef0d73221" alt="Basic Details、Media & Description、Pricing、ライブチェックアウトプレビューを横並びにした統合商品フォーム" style={{ maxHeight: '500px', width: 'auto' }} width="1143" height="959" data-path="images/changelog/v1.99.0/product-form.png" />
</Frame>

主なポイント：

* **ライブプレビュー** — 編集中の商品がチェックアウトとCustomer Portalにどのように表示されるかを、フォームの横で確認可能
* **自動保存** — 下書きが自動的に保存されるため、ページを離れたりタブを失ったりしても作業内容が失われることはありません
* **Markdownエディター** — 商品説明で、ライブレンダリング、リンクプレビュー、インライン書式設定コントロールを備えた完全なMarkdownエディターを利用可能
* **複製フローの統一** — 商品を複製すると、簡略化されたダイアログではなく、同じ統合フォームが入力済みの状態で開きます。保存前にすべてのフィールドを調整できます

<Tip>
  **Duplicate**を使用すると、説明、メタデータ、フルフィルメント設定を再入力せずに、既存商品の地域別または価格帯別のバリエーションを作成できます。
</Tip>

### 5. **Business Settingsページのデザイン変更**

**Settings → Business**ページを再設計し、設定内容を確認しやすく、よりすばやく更新できるようにしました。設定はより明確なセクションに分類され、各トグルを切り替える前に、その影響を説明するテキストを確認できるようになっています。

既存の設定に**動作上の変更はありません**。改善されたのはレイアウト、グループ分け、および周辺の説明のみです。

<Frame>
  <img src="https://mintcdn.com/dodopayments/Ehnri26kKx69Tfxe/images/changelog/v1.99.0/business-settings.png?fit=max&auto=format&n=Ehnri26kKx69Tfxe&q=85&s=7603e02f67bb05a590681400f1e3f4b5" alt="Business Info、Brands、通貨、セキュリティ、トラッキングのセクションをグループ化した再設計済みのBusiness Settingsページ" style={{ maxHeight: '500px', width: 'auto' }} width="1195" height="893" data-path="images/changelog/v1.99.0/business-settings.png" />
</Frame>

## 改善点

* **`credits_amount` overrideがGET checkout sessionおよびpayment link routeに正しく伝播されるようになりました** — per-checkoutの`credit_entitlements` overrideを指定してcheckout sessionまたはpayment linkを作成した場合、GETでそのsessionまたはlinkを取得すると、上書き後の値ではなく商品レベルのデフォルト`credits_amount`が返されていました。この問題を修正しました。
* **全額返金済みの支払いでは返金アクションを無効化** — 支払いが全額返金されると、その支払いのRefundボタンが無効になり、理由を説明するツールチップが表示されます。以前はボタンが有効なままで、送信後にのみエラーが返されていました。
* プラットフォーム全体にわたる軽微なバグ修正と安定性の改善
