メインコンテンツへスキップ
Discount codes overview cover
割引コードを使用すると、ターゲットを絞ったプロモーションやインセンティブを実施できます。パーセンテージまたは固定金額の割引を作成し、制限や有効期限を設定し、製品に制限をかけ、チェックアウト時にシームレスに適用できます。

Checkout Sessions

ホストされたチェックアウト中に、discount_codesとUIコントロールを使用して、1つ以上のスタックコードを適用します。

Validate Discount

割引がその ID で有効かどうかを確認します。

Get Discount by Code

コード名(例: “SAVE20”)を使用して割引を検索し、検証します。

Create Discount (API)

プログラムで新しい割引コードを作成します。

List & Update Discounts

既存の割引を閲覧および管理し、必要に応じて更新または削除します。

Plan Change Discounts

サブスクリプションプランをアップグレードまたはダウングレードする際に、割引コードを適用します。

割引コードとは?

割引コードは、チェックアウト時に注文合計を減少させるプロモーショントークンです。次のような場面で理想的です:
  • 季節キャンペーン: ブラックフライデー、製品発売、または周年記念
  • 獲得オファー: 初回購入インセンティブや紹介報酬
  • 保持: 既存顧客に対する再獲得またはロイヤルティ報酬
  • B2Bディール: プライベートコードを通じた契約または交渉による価格設定

主な利点

  • 柔軟なディスカウント: パーセンテージまたは固定金額の割引
  • スタック可能なコード: チェックアウト、支払い、またはサブスクリプションごとに最大20コードを適用 — 特別なコードを作成せずにキャンペーンを組み合わせる(例:WELCOME10 + BLACKFRIDAY20
  • ターゲットされたコントロール: 製品とサブスクリプションサイクルによる制限
  • キャンペーン管理: 有効期限と使用制限
  • シームレスなチェックアウト: チェックアウトセッションを通じたUIフィールドとAPIサポート

割引コードの作成

Dodo Paymentsダッシュボードで割引コードを作成し、ホストされたチェックアウトまたはAPI経由で適用します。

ダッシュボード設定

  • 割引名(必須):内部およびダッシュボードに表示される名前
  • コード(必須):顧客がチェックアウト時に入力する文字列
  • タイプと金額(必須):パーセンテージまたは固定金額を設定するか、提供されたボタンでランダムコードを生成
  • 有効期限(オプション):コードが無効になる日付
  • 使用制限(オプション):全顧客にわたる最大引換回数
  • 製品制限(オプション):選択された製品に適用範囲を限定
  • サブスクリプションサイクル制限(オプション):割引が適用される請求サイクル数
  • メタデータ(オプション):内部追跡や統合のためのカスタムキー–値ペアを添付
サブスクリプションのイントロダクトリ価格にサイクル制限を使用します(例、“3か月で50%オフ”)。

チェックアウトの体験

  1. 購入者がチェックアウトフィールドにコードを入力します。
  2. 適用可能な割引が適用され、合計金額が即座に更新されます。
Checkout Sessionsで、1つ以上のコードを事前適用するためにdiscount_codes(配列)を渡し、入力フィールドを表示するためにfeature_flags.allow_discount_codeを設定します。コードは配列の順序で適用され、最大20までです。

ディスカウントコードのスタッキング

チェックアウトセッション、支払い、サブスクリプションは、配列discount_codes(最大20エントリー)を通じて最大20のスタックコードを受け入れます。コードは配列順に適用され、最初の適格なコードが基準価格を最初に減らし、次のコードがすでに割引された価格を減らします。この割引の全セットは、レスポンスでdiscount_ids(支払い/サブスクリプション上)およびdiscounts(位置および残りのサブスクリプションサイクルを含む、個別の割引詳細)に返されます。
const session = await client.checkoutSessions.create({
  product_cart: [{ product_id: 'prod_abc', quantity: 1 }],
  discount_codes: ['WELCOME10', 'BLACKFRIDAY20'], // applied in this order
  customer: { email: 'user@example.com' },
  return_url: 'https://yoursite.com/return'
});
単一のdiscount_codeフィールドは非推奨ですが、後方互換性のために完全にサポートされています。既存の統合は変更なしで動作し続けます。同じリクエストでdiscount_codesと組み合わせることはできません。スタッキングとより豊かなレスポンス形状を活用するために、単一コードの場合でも、便利なときにdiscount_codes(配列形式)への移行をお勧めします。

API管理

タイプと量でディスカウントコードをプログラム的に作成します。

API Reference

ディスカウント作成APIを表示します。
すべてのディスカウントをリストし、管理と監査のために詳細を取得します。

API Reference

リストと取得APIを閲覧します。
内部IDの代わりに、人間が読めるコード(例:「SAVE20」)を使用してディスカウントを検索します。

API Reference

コード名でディスカウントを取得します。
量、有効期限、制限などのディスカウント設定を変更します。

API Reference

ディスカウント詳細を更新する方法を学びます。
適用する前にディスカウントが有効で適用可能かどうかを確認します。

API Reference

ディスカウント使用の妥当性を確認します。
不要になったディスカウントを無効にするか削除します。

API Reference

ディスカウントを削除します。

よくあるユースケース

  • イントロオファー: 新製品のための期間限定のローンチプロモーション
  • 大量またはB2B: 特定の製品セットの契約ディスカウント
  • リテンション施策: 離脱防止ワークフローの再獲得コード
  • 季節キャンペーン: 休日またはイベントベースのプロモーション

インテグレーション例

メタデータ付きでディスカウントを作成する

内部トラッキングのためにカスタムのキー–バリューペアを添付します。
const discount = await client.discounts.create({
  type: 'percentage',
  amount: 1500, // 15%
  code: 'SUMMER2025',
  metadata: {
    campaign: 'summer_promo',
    source: 'email_blast'
  }
});
メタデータを使用してキャンペーン、ソース、または内部参照IDでディスカウントにタグを付け、後で使用を調整し、ROIを測定できます。

チェックアウトセッションでディスカウントを適用する

事前適用されたスタックディスカウントを1つ以上適用し、コード入力UIを表示します。
const session = await client.checkoutSessions.create({
  product_cart: [
    { product_id: 'prod_abc', quantity: 1 }
  ],
  discount_codes: ['BLACKFRIDAY2024', 'NEWUSER5'], // stacked in array order
  customer: { email: 'user@example.com', name: 'Jane Doe' },
  return_url: 'https://yoursite.com/return'
});

プラン変更時のディスカウント適用

顧客がサブスクリプションをアップグレードまたはダウングレードするときにプロモーション価格を提供します。
await client.subscriptions.changePlan('sub_123', {
  product_id: 'prod_pro',
  quantity: 1,
  proration_billing_mode: 'prorated_immediately',
  discount_codes: ['UPGRADE20']
});
discount_codesプラン変更時の挙動
undefined / null(提供されていない)新しい製品に適用できる場合、preserve_on_plan_change=trueと共に既存のディスカウントが保持されます。
[](空の配列)すべての既存のディスカウントがサブスクリプションから削除されます。
['CODE_A', 'CODE_B', ...]このスタックセットで既存のディスカウントを入れ替え、配列順に適用します。
サブスクリプションのレスポンスで新しいdiscounts配列を介して適用されたすべてのディスカウントを読み取ります。各エントリーにはdiscount_idpositioncycles_remaining(サブスクリプション用)、および元のコードが含まれます。

事前適用せずにディスカウントエントリーを有効にする

顧客にコードを事前に渡さずにチェックアウトで入力させます。
const session = await client.checkoutSessions.create({
  product_cart: [
    { product_id: 'prod_abc', quantity: 1 }
  ],
  feature_flags: {
    allow_discount_code: true
  },
  return_url: 'https://yoursite.com/return'
});

ベストプラクティス

  • 明確に名前をつける: キャンペーン名に合った認識しやすいコードを使用
  • 時間を制限する: 緊急性を促し、不正使用を防ぐために有効期限を追加
  • 賢く範囲を設定する: 特定の製品に限定し、利益率の漏れを防ぐ
  • 早期に検証する: チェックアウトを確定する前にコードの適用可能性を確認
  • 影響を監視する: キャンペーンごとの使用状況とコンバージョンを追跡
ディスカウントコードは取得と保持のための強力なレバーです。単純で分かりやすいオファーから始め、徹底的に検証し、パフォーマンスに基づいてイテレーションを行います。
Last modified on May 22, 2026