# クーポンとプロモーションコード

クーポンとプロモーションコードを使用して、サブスクリプションとサブスクリプションアイテムに割引を追加します。

ダッシュボードまたは Stripe API を使用して、クーポンとプロモーションコードを作成、管理し、顧客のサブスク、サブスク項目、または請求書に割引を適用できます。クーポンを使用して次のことを行えます。

- サブスク、サブスク項目、または請求書に[割引](https://docs.stripe.com/api/discounts.md)を適用する
- クーポンを 1 回のみ、指定した月数、または無期限で適用するように設定する
- 請求書金額を率または定額で減額する

## クーポンとプロモーションコードの違い

クーポンとプロモーションコードの違いは以下のとおりです。

- [クーポン](https://docs.stripe.com/billing/subscriptions/coupons.md#coupons): 顧客がいつ割引を受けるかを指定します。これはバックエンド主導の割引です (どの顧客が割引を受けるかはシステムが決定します)。
- [プロモーションコード](https://docs.stripe.com/billing/subscriptions/coupons.md#promotion-codes): 顧客がいつ割引を適用するかを決定します。これはクーポンに紐づく顧客向けコードで、クーポンに配布と制御のレイヤーを追加します。複数のプロモーションコードで 1 つのクーポンを参照できます。プロモーションコードは親クーポンの商品制限を継承します。たとえば、クーポンが特定の商品にのみ適用される場合、そこから作成されたプロモーションコードにも同じ制限が適用されます。

このページでは、「discount (割引)」には 2 つの意味があります。一般的な意味として、割引は価格の引き下げを指します。Stripe API における [Discount](https://docs.stripe.com/api/discounts/object.md) は、顧客、サブスク、または請求書へのクーポンの適用を表す特定のオブジェクトです。顧客がクーポンを引き換えると、Stripe はその引き換えを追跡するために `Discount` オブジェクトを作成します。

サブスク、サブスク項目、または請求書には、最大 20 件の割引を適用できます。この制限はクーポンとプロモーションコードで共有されます。

|  | **クーポン** | **プロモーションコード** |
| --- | --- | --- |
| 定義 | 割引ロジックを定義する API オブジェクトです。ダッシュボードまたは API を使用して、顧客のサブスクに直接適用します。 | クーポンに対応付けられる顧客向けコードです。顧客が決済時に入力する文字列です。たとえば、`FALLPROMO` と `SPRINGPROMO` はどちらも、25% 割引の 1 つのクーポンに対応付けることができます。 |
| ユースケース | 営業チームが顧客と交渉し、年額サブスクを 20% オフで契約したとします。バックエンドで割引を直接適用するため、顧客が何かを入力することはありません。 | マーケティングチームがソーシャルメディアキャンペーンを開始し、新規登録者に 3 カ月間 25% オフを提供するコード `EXAMPLE2026` をクリエイターに共有してもらいたいとします。このコードは、最低利用金額が 50 USD の初めて利用する顧客にのみ有効です。また、引き換え回数を 500 回に制限したいとします。 |
| 特定の顧客に限定 | ❌ サポート対象外 | ✓ サポート対象 |
| 初回購入にのみ適用 | ❌ サポート対象外 | ✓ サポート対象 |
| 引き換えるための最低利用金額 | ❌ サポート対象外 | ✓ サポート対象 |
| 削除せずに無効化 | クーポンは無効化できず、削除のみ可能です。削除しても既存の割引は削除されませんが、新たな適用はできなくなります。クーポンを削除すると、関連付けられたプロモーションコードはアーカイブされます。 | `active` フラグを切り替えると、プロモーションコードをアーカイブできます |

1 回限りの決済に割引を適用するには、代わりに [1 回限りの決済に割引を追加する](https://docs.stripe.com/payments/checkout/discounts.md)を参照してください。

サービス期間クーポンを使用すると、請求書の発行時ではなく、サービスの提供時期に基づいて割引を適用できます。たとえば、1 月のサービスに対する割引は、請求書が 2 月に作成されるかどうかにかかわらず、1 月に適用されます。プライベートプレビューへの参加登録はこちらから。

### サービス期間に基づいた割引の適用に関心がありますか？

Enter your email to request access.

```bash
curl https://docs.stripe.com/preview/register \
  -X POST \
  -H "Content-Type: application/json" \
  -H "Referer: https://docs.stripe.com/billing/subscriptions/coupons" \
  -d '{"email": "EMAIL", "preview": "service_period_coupons_preview"}'
```

## クーポン

顧客の請求額を減らすには、クーポンを引き換えて、サブスクまたは顧客に [Discount](https://docs.stripe.com/api/discounts/object.md) オブジェクトを作成します。クーポンの作成と管理の方法については、以下のセクションをご覧ください。

### クーポンを作成する

クーポンは、ダッシュボードまたは [API](https://docs.stripe.com/api/coupons/create.md) で作成します。

#### ダッシュボード

1. ダッシュボードで、[商品](https://dashboard.stripe.com/test/products?active=true)ページを開きます。
2. **クーポン**をクリックします。
3. **+新規**をクリックします。
4. **クーポンを作成**ダイアログで、クーポンのパラメーターを入力します。
5. **クーポンを作成**をクリックします。

クーポンの設定方法は以下の通りです。クーポンの作成後に編集できるのは名前だけです。

| 設定 | 詳細 |
| --- | --- |
| **名前** | 領収書や請求書に表示されるクーポン名。 |
| **ID** (オプション) | API でのクーポンの一意の ID。このフィールドを空白にすると、Stripe によって ID が生成されます。 |
| **タイプ** | クーポンがサブスクリプションを、一定額またはパーセントのいずれで割り引くのかを決定します。 |
| **割引率**または**割引額** | クーポンの実際の割引額を示します。

複数の通貨で販売している場合、1 つのクーポンで異なる通貨に異なる割引額を定義できます。多通貨のクーポンは、[多通貨の価格](https://docs.stripe.com/products-prices/how-products-and-prices-work.md#multiple-currencies)と同じルールに従います。 |
| **特定の商品に適用** (オプション) | クーポンを適用できるアイテムのタイプを制限します。 |
| **期間** | クーポンの有効期限を示します。 |
| **引き換え回数制限** (オプション) | 顧客がクーポンを引き換えできる期間と回数を制限できます。 |
| **コード** (オプション) | クーポンの[プロモーションコード](https://docs.stripe.com/billing/subscriptions/coupons.md#promotion-codes--promotion-codes)を作成できます。 |

#### API

```curl
curl https://api.stripe.com/v1/coupons \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d duration=once \
  -d id=free-period \
  -d percent_off=100
```

次の表には、クーポンのパラメーターが含まれています。

| 設定 | 詳細 |
| --- | --- |
| `id` | クーポンの一意の ID。 |
| `percent_off` または `amount_off` | クーポンの期間中に小計から割り引かれる金額。 |
| `currency` (`amount_off` が設定されている場合) | 差し引かれる金額の通貨の 3 文字の ISO コード。 |
| `currency_options` (`amount_off` が設定されている場合) (オプション) | 複数の通貨で販売している場合、異なる通貨の小計を差し引く金額。多通貨のクーポンは、[多通貨の価格](https://docs.stripe.com/products-prices/how-products-and-prices-work.md#multiple-currencies)と同じルールに従います。 |
| `duration` | クーポンの有効期間を示します。値には、**once**、**forever**、または **repeating** があります。 |
| `max_redemptions` (オプション) | 顧客全体での、クーポンの引き換えが可能な最大回数。 |
| `redeem_by` (オプション) | このクーポンを顧客に適用できる最終日。 |
| `applies_to` (オプション) | クーポンを適用できる請求書のアイテムを限定します。 |

### 対象の商品を設定する

#### ダッシュボード

割引対象の商品を設定するには、**特定の商品に適用**フィールドに対象の商品を追加します。そのクーポンに関連付けられたプロモーションコードも、この対象商品のリストに制限されます。

特定の商品に適用されるクーポンを設定し、サブスクリプションに該当する商品が含まれない場合には、そのサブスクリプションにクーポン追加しても割引は適用されません。

#### API

割引対象の商品を設定するには、クーポンの `applies_to` ハッシュに対象の商品 ID を追加します。対象商品のリストは、そのクーポンに関連付けられたプロモーションコードにも適用されます。

特定の商品に適用されるクーポンを設定し、サブスクリプションに該当する商品が含まれない場合には、そのサブスクリプションにクーポン追加しても割引は適用されません。

サブスクリプションに [変更を加えた](https://docs.stripe.com/billing/subscriptions/change.md) 場合、Stripe は日割額を計算し既存の割引がある場合はそれを適用します。作成された請求書上でこの日割項目にさらに割引を適用することはできません。

### サブスクリプションにクーポンを適用する

クーポンを作成したら、サブスクリプションにクーポンを適用して割引を作成します。サブスクリプションを作成する際、または[顧客の既存のサブスクリプションを更新](https://docs.stripe.com/api.md#update_subscription)する際にクーポンを適用できます。

#### ダッシュボード

1. ダッシュボードで、[サブスクリプション](https://dashboard.stripe.com/test/subscriptions?status=active) ページを開きます。
2. 該当するサブスクリプションをクリックします。
3. **アクション**をクリックします。
4. **サブスクリプションを更新**をクリックします。
5. **クーポンを追加**をクリックします。
6. ドロップダウンメニューから 1 つ以上のクーポンを選択し、**送信**をクリックします。

#### API

> #### Accounts v2 API を使用した顧客の表現
> 
> Accounts v2 API では、Connect ユーザーには一般提供され、その他の Stripe ユーザーには公開プレビューで提供されます。Accounts v2 プレビューの一部である場合は、コードで[プレビューバージョン](https://docs.stripe.com/api-v2-overview.md#sdk-and-api-versioning)を指定する必要があります。
> 
> Accounts v2 のプレビューに参加するには、ダッシュボードの [Account previews and features](https://dashboard.stripe.com/settings/previews) に移動して、**Global Payouts の再利用可能な決済手段**を有効にします。
> 
> ほとんどのユースケースでは、[Customer](https://docs.stripe.com/api/customers.md) オブジェクトを使用するのではなく、[顧客を顧客設定済みの Account オブジェクトとしてモデル化する](https://docs.stripe.com/accounts-v2/use-accounts-as-customers.md)ことをお勧めします。

#### Accounts v2

```curl
curl https://api.stripe.com/v1/subscriptions \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "customer_account={{CUSTOMERACCOUNT_ID}}" \
  -d "items[0][price]={{PRICE_ID}}" \
  -d "discounts[0][coupon]=free-period"
```

#### Customers v1

```curl
curl https://api.stripe.com/v1/subscriptions \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "customer={{CUSTOMER_ID}}" \
  -d "items[0][price]={{PRICE_ID}}" \
  -d "discounts[0][coupon]=free-period"
```

クーポンの適用後に [即時決済が不要](https://docs.stripe.com/billing/subscriptions/deferred-payment.md) であれば、顧客が支払い方法を保存していない場合でも引き続きサブスクリプションを作成できます。

### Checkout にクーポンを適用する

Checkout セッションでサブスクリプションにクーポンを適用する場合、[API](https://docs.stripe.com/api/checkout/sessions/create.md#create_checkout_session-discounts) の `discounts` パラメーターを設定します。適用された割引でセッションを作成するには、`discounts` 配列の `coupon` パラメーターにクーポン ID を渡します。

#### curl

```bash
curl https://api.stripe.com/v1/checkout/sessions \
  -u <<YOUR_SECRET_KEY>>: \
  -d "line_items[][price]"="{{PRICE_ID}}" \
  -d "line_items[][quantity]"=1 \
  -d mode=subscription \
  -d "discounts[][coupon]"="{{COUPON_ID}}" \
  -d success_url="https://example.com/success"
```

### クーポンを削除する

クーポンは、ダッシュボードまたは [API](https://docs.stripe.com/api/coupons/delete.md) で削除できます。

クーポンを削除すると、その後のサブスクリプションや請求書に適用できなくなりますが、そのクーポンがすでに設定されているサブスクリプションや請求書から割引が削除されることはありません。

#### ダッシュボード

1. ダッシュボードで、[商品](https://dashboard.stripe.com/test/products?active=true)ページを開きます。
2. **クーポン**をクリックします。
3. 該当するクーポンをクリックします。
4. オーバーフローメニュー (⋯) をクリックします。
5. **クーポンを削除**をクリックします。

#### API

```curl
curl -X DELETE https://api.stripe.com/v1/coupons/free-period \
  -u "<<YOUR_SECRET_KEY>>:"
```

### クーポンの期間

クーポンの期間は、引き換え済みの[割引](https://docs.stripe.com/api/.md#discounts)の有効期間を示します。たとえば、期間が 4 カ月間の 50% オフのクーポンは、クーポンが初めて適用された日から 4 カ月の期間、すべての請求書に適用されます。クーポンの有効期限の 4 カ月間内に顧客がこのクーポンを年次サブスクリプションに適用すると、50% の割引は年次サブスクリプション全体に適用されます。月次のサブスクリプションの場合には、クーポンは最初の 4 カ月に適用されます。週次のサブスクリプションでは、4 カ月のクーポンは最初の 4 カ月の各請求書に適用されます。

API でクーポンの期間を設定する場合には、`repeating` 値を使用する際に、クーポンを繰り返し適用できる月数として `duration_in_months` を指定する必要があります。期間を `once` に設定した場合は、そのクーポンは最初の請求書にのみ適用されます。期間を `forever` に設定した場合は、そのクーポンはすべての請求書に無期限に適用されます。

> サブスクリプションで `duration=once` のクーポンを使用する場合、クーポンは次の請求書にのみ適用され、請求書の確定後に使用されたものと見なされます。クーポンが適用されると、サブスクリプションの`割引`配列にその割引は含まれなくなります。具体的には、次のようになります。
> 
> - クーポンが請求書に適用される前は、サブスクリプションの`discounts` に割引オブジェクトが含まれます。
- クーポンを使用した請求書が確定または支払われると、サブスクリプションの `discounts` にはその割引が表示されなくなります。
- クーポンを使用した請求書には、請求書リソースと項目に適用された割引が引き続き表示されます。
> 
> この動作により、一般的に観察される 2 つの状態が発生する可能性があります。1 つは割引が表示されないサブスクリプション応答 (`duration=once` のクーポンがすでに消費されているため)、もう 1 つはクーポンが適用されていない場合にのみ `discounts` に割引が表示されるサブスクリプション応答です。

> [遡及サブスクリプション](https://docs.stripe.com/billing/subscriptions/backdating.md)にクーポンを適用する場合、クーポンの期間は、API コールの実行日ではなく、遡及開始日からカウントされます。クーポンを`繰り返す`場合、遡及期間はクーポンの期間の一部を使用します。遡及期間の後に請求書に割引を適用するには、クーポンの `duration_in_months` を遡及期間より長くする必要があります。詳細については、[遡及期間と割引](https://docs.stripe.com/billing/subscriptions/backdating.md#backdating-discounts)をご覧ください。

### 引き換え回数制限

引き換え回数制限は、顧客全体についてクーポンに適用されます。たとえば、クーポンの引き換え回数を 50 回に制限した場合、そのクーポンは顧客に 50 回のみ適用できます。これは、50 人の異なる顧客に適用することも、1 人の顧客に 50 回適用することも、または最大回数の 50 回に達するまで複数の顧客に複数回ずつ適用することもできます。

顧客がクーポンを使用した場合に永続的に継続するように設定し、しかしそのクーポンに有効期限がある場合には、そのクーポンを受け取った顧客は永続的にその割引を受けることができます。新しい顧客は、有効期限後にクーポンを適用することはできません。

## プロモーションコード

プロモーションコードは、クーポン用に作成する顧客向けのコードです。たとえば、FALLPROMO と SPRINGPROMO の両方で、25% 割引の 1 つのクーポンを指定できます。プロモーションコードは直接顧客と共有し、支払い時に使用してもらうことができます。

*カスタマーポータル* (The customer portal is a secure, Stripe-hosted page that lets your customers manage their subscriptions and billing details)を実装して、プロモーションコードを有効にした場合、顧客はポータル内で既存のサブスクリプションのアップグレード時またはダウングレード時に割引を適用できます。

> サブスクリプションでは、プロモーションコードと価格の更新が別々に適用されるため、予期しない更新が発生する場合があります。たとえば、支払いの失敗によって料金のアップグレードが失敗しても、料金のアップグレードに含まれたプロモーションコードが成功することがあります。

> カスタマーポータルには、サブスクリプションに適用されたプロモーションコードが表示されます。顧客がプロモーションコードを自身で適用したり、他の人と共有したりしないようにする場合は、[プロモーションコードに制限を設定](https://docs.stripe.com/billing/subscriptions/coupons.md#promo-code-config) するか、直接 [クーポンを適用](https://docs.stripe.com/billing/subscriptions/coupons.md#discount-subscriptions) する必要があります。

対象となる顧客、初回注文、最小注文値、有効期限、および引き換え回数制限を指定して、プロモーションコードの管理と制限をカスタマイズします。

### 制限

プロモーションコードには以下のような制限があります。

- 以下の件数に制限があるプロモーションコードは適用できません。
  - [Subscription Item オブジェクト](https://docs.stripe.com/api/subscription_items/object.md)
  - [インボイスアイテムオブジェクト](https://docs.stripe.com/api/invoiceitems/object.md)
  - 更新を行う際の [Subscription オブジェクト](https://docs.stripe.com/api/subscriptions/object.md)
  - [Subscription Schedule オブジェクト](https://docs.stripe.com/api/subscription_schedules/object.md)の将来のフェーズ

### プロモーションコードを作成する

#### ダッシュボード

プロモーションコードは、[クーポンを作成](https://docs.stripe.com/billing/subscriptions/coupons.md#create-a-coupon)する際にダッシュボードで作成できます。

この**コード**では大文字小文字が区別され、すべての顧客向けの有効なプロモーションコード内で一意です。以下に例を挙げます。

- 同じ**コード**を使用して対象の顧客が制限された複数のプロモーションコードを作成できますが、その**コード**を再利用して、あらゆる顧客が引き換えできるプロモーションコードを作成することはできません。
- あらゆる顧客が利用できるプロモーションコードを作成した場合、同じ**コード**で別の有効なプロモーションコードを作成することはできません。
- ある**コード** でプロモーションコードを作成し、それを[無効化](https://docs.stripe.com/billing/subscriptions/coupons.md#deactivate)すると、その後にその同じ**コード**で新しいプロモーションコードを作成することができます。

1. ダッシュボードの[クーポン作成](https://dashboard.stripe.com/test/coupons/create)ページで、**顧客向けプロモーションコードを使用**ボタンをクリックします。
2. コードを入力します。これは、割引を引き換えるために顧客が支払い時に入力するコードです。コードを設定しない場合、Stripe により自動的に生成されます。
3. プロモーションコードの要件を選択します。たとえば、初回注文のみで有効になるようにクーポンを制限できます。

#### API

この `code` では大文字小文字が区別され、すべての顧客向けの有効なプロモーションコード内で一意です。以下に例を挙げます。

- 同じ `code` を使用して対象の顧客が制限された複数のプロモーションコードを作成できますが、その `code` を再利用して、あらゆる顧客が引き換えできるプロモーションコードを作成することはできません。
- あらゆる顧客が利用できるプロモーションコードを作成した場合、同じ `code` で別の有効なプロモーションコードを作成することはできません。
- `code: NEWUSER` でプロモーションコードを作成し、`active: false` を渡してそれを無効化すると `code: NEWUSER` で新しいプロモーションコードを作成できます。

[promotion code](https://docs.stripe.com/api/promotion_codes.md) を作成するには、既存の`Coupon` と、特定の `Customer` IDでのみ有効といった何らかの制限を指定します。`code` パラメーターで `FALL25OFF` といったコード文字列が指定できます。コード文字列を指定しない場合、Stripe がランダムなコード文字列を生成します。

#### Accounts v2

```curl
curl https://api.stripe.com/v1/promotion_codes \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "coupon={{COUPON_ID}}" \
  -d code=ALICE20 \
  -d "customer_account={{CUSTOMERACCOUNT_ID}}"
```

#### Customers v1

```curl
curl https://api.stripe.com/v1/promotion_codes \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "coupon={{COUPON_ID}}" \
  -d code=ALICE20 \
  -d "customer={{CUSTOMER_ID}}"
```

プロモーションコードを作成する際は、関連付けられたクーポンの設定が継承されます。

### プロモーションコードの設定

プロモーションコードを設定することで、以下をカスタマイズできます。

- プロモーションコードを使用できる顧客
- 顧客がそのプロモーションコードを引き換えに使用できる回数
- プロモーションコードの有効期限
- プロモーションコードを適用できる最小金額を設定する

### 特定の顧客に限定する

#### ダッシュボード

プロモーションコードの配布を特定の顧客に限定するには、次の手順を実行します。

1. [クーポンを作成](https://dashboard.stripe.com/test/coupons/create)ページで、**特定の顧客に限定**を選択します。
2. 関連する顧客を選択します。顧客を指定しない場合、すべての顧客がそのプロモーションコードを引き換えることができます。

#### API

プロモーションコードを特定の顧客に限定するには、プロモーションコードの作成時に `customer_account` または `customer` を指定します。顧客を指定しない場合、すべての顧客がそのプロモーションコードを引き換えることができます。

### 初回注文に限定する

プラットフォームで取引履歴のない顧客にクーポンを制限します。この設定により、顧客は以下の場合にクーポンを使用することができません。

- 決済が完了しなかった場合でも、PaymentIntent を開始しました。
- 試用期間に加入した場合、その後にキャンセルされた場合でも。

#### ダッシュボード

プロモーションコードを初めての顧客に限定するには、[クーポンの作成](https://dashboard.stripe.com/test/coupons/create) ページで、**初めての注文にのみ適用** を選択します。

#### API

`restrictions` 属性の `first_time_transaction` パラメーターを設定することで、プロモーションコードを初めての顧客に限定することができます。

### 最小金額を設定する

#### ダッシュボード

プロモーションコードの対象となる最小金額を設定するには、[クーポンを作成](https://dashboard.stripe.com/test/coupons/create)ページで、**最少注文額が必要です**を選択し、最小金額を入力します。

プロモーションコードの制限は引き換え時に確認されるため、最低取引額はサブスクリプションの初回の支払いにのみ適用されます。

クーポンが複数の通貨をサポートしている場合、最小金額は通貨ごとに異なることがあります。

#### API

プロモーションコードでは、`minimum_amount` プロパティーおよび `minimum_amount_currency` プロパティーを設定して、割引対象の最低取引額を設定できます。プロモーションコードの制限は引き換え時に確認されるため、最低取引額はサブスクリプションの初回の支払いにのみ適用されます。複数の通貨で販売している場合は、`currency_options` プロパティーを設定して各通貨の最低取引額を設定します。

### 有効期限をカスタマイズする

#### ダッシュボード

プロモーションコードの有効期限日を設定するには、[クーポンを作成](https://dashboard.stripe.com/test/coupons/create)ページで、**有効期限を追加**を選択して、さらにプロモーションコードの有効期限の日時を選択します。

ベースとなるクーポンにすでに有効期限日が設定されている場合には、プロモーションコードの有効期限日を、そのクーポンの有効期限日より後にすることはできません。

たとえば、クーポンを 1 年間サポートするプランがあるとします。ただし、引き換え期間を顧客がクーポンを受け取ってから 1 週間以内にする場合は、クーポンの有効期限日を現在から 1 年後にし、各プロモーションコードの有効期限日を作成後 1 週間に設定します。

#### API

`expires_at` を使用してプロモーションコードの有効期限日を設定します。そのベースとなるクーポンにすでに `redeem_by` が設定されている場合は、プロモーションコードの有効期限をその期日よりも後にすることはできません。`promotion_code[expires_at]` が指定されていない場合は、クーポンの `redeem_by` の値が自動的に `expires_at` となります。

- たとえば、クーポンを 1 年間サポートするプランがあるとします。ただし、引き換え期間を顧客がクーポンを受け取ってから 1 週間以内にする場合は、`coupon[redeem_by]` を現在から 1 年後にし、各 `promotion_code[expires_at]` を作成後 1 週間に設定します。

### 引き換え回数を制限する

#### ダッシュボード

顧客がプロモーションコードを引き換えることができる合計回数を設定するには、[クーポンの作成](https://dashboard.stripe.com/test/coupons/create)ページで **このコードを引き換えることができる回数を制限する** を選択し、回数を入力します。詳細については[引き換え回数制限](https://docs.stripe.com/billing/subscriptions/coupons.md#redemption-limits)をご覧ください。

ベースとなるクーポンにすでに最大回数が設定されている場合には、プロモーションコードの最大引き換え回数は、そのクーポンの引き換え回数の上限を超えることはできません。

#### API

`max_redemptions` を使用して、顧客がプロモーションコードを引き換えることができる合計回数を制限します。基礎となるクーポンに `max_redemptions` が設定されている場合、プロモーションコードの `max_redemptions` はクーポンよりも大きく設定することはできません。詳細については[引き換え制限](https://docs.stripe.com/billing/subscriptions/coupons.md#redemption-limits)をご覧ください。

### プロモーションコードを無効にする

#### ダッシュボード

プロモーションコードを無効化するには、次の手順を実行します。

1. ダッシュボードで、[商品](https://dashboard.stripe.com/test/products?active=true)ページを開きます。
2. **クーポン**をクリックします。
3. プロモーションコードを無効にするクーポンをクリックします。
4. 関連するプロモーションコードの行で、オーバーフローメニュー (⋯) をクリックします。
5. **プロモーションコードをアーカイブ**をクリックします。

ただし、プロモーションコードのべ―スとなるクーポンが無効になると、そのプロモーションコードはすべて永続的に無効になります。同様に、プロモーションコードが、その最大引き換え上限や有効期限日に達した場合も、永続的に無効になります。こうしたプロモーションコードを再度有効にすることはできません。

#### API

`active` パラメータを使用してプロモーションコードが現在引き換え可能かどうかを設定します。ただし、プロモーションのべ―スとなるクーポンが無効になると、そのプロモーションコードはすべて永続的に無効になります。同様に、プロモーションコードが、`max_redemptions` や `expires_at` に達した場合も、永続的に無効になります。それらのプロモーションコードを再度有効にすることはできません。

### サブスクリプションにプロモーションコードを適用する

プロモーションコードを作成したら、そのプロモーションコードをサブスクリプションに適用して割引を引き換えます。プロモーションコードは次の 2 つの方法で適用できます。

- [サブスクリプションを作成](https://docs.stripe.com/api.md#create_subscription)する場合
- [顧客の既存のサブスクリプションを更新](https://docs.stripe.com/api.md#update_subscription)する場合

#### ダッシュボード

1. ダッシュボードで、**Billing** > **サブスクリプション**に移動します。
2. 該当するサブスクリプションをクリックします。
3. **アクション** > **サブスクリプションを更新** > **クーポンを追加**をクリックします。
4. ドロップダウンメニューからプロモーションコードをクリックし、**送信**をクリックします。

#### API

1. [ PromotionCodes をリスト](https://docs.stripe.com/api/promotion_codes/list.md) し、顧客が [code](https://docs.stripe.com/api/promotion_codes/list.md#list_promotion_code-code) パラメーターに入力したコード文字列を指定することで、それと一致する `PromotionCode` が取得できます。
2. プロモーションコードを適用するには、次の API コールでプロモーションコード ID を使用します。

#### Accounts v2

```curl
curl https://api.stripe.com/v1/subscriptions \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "customer_account={{CUSTOMERACCOUNT_ID}}" \
  -d "items[0][price]={{PRICE_ID}}" \
  -d "discounts[0][promotion_code]={{PROMOTIONCODE_ID}}"
```

#### Customers v1

```curl
curl https://api.stripe.com/v1/subscriptions \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "customer={{CUSTOMER_ID}}" \
  -d "items[0][price]={{PRICE_ID}}" \
  -d "discounts[0][promotion_code]={{PROMOTIONCODE_ID}}"
```

### Checkout にプロモーションコードを追加する

Checkout セッションで [allow_promotion_codes](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-allow_promotion_codes) パラメーターを設定することにより、API でプロモーションコードを有効にします。Checkout セッションで `allow_promotion_codes` が有効になっていると、顧客が利用するプロモーションコードの入力ボックスが Checkout に表示されます。
![Checkout のプロモーションコードフィールド](https://b.stripecdn.com/docs-statics-srv/assets/promo_code_checkout.c07ef6d4f0b1b3f9a8a7e4bbba83d56f.png)

Checkout のプロモーションコードフィールド

## 併用可能なクーポンとプロモーションコード

顧客の支払いのリストには、複数のクーポン、プロモーションコード、または引き換え済みの[割引](https://docs.stripe.com/api/.md#discounts)を追加できます。これは、[サブスクリプションを作成](https://docs.stripe.com/api.md#create_subscription)する場合、または[顧客の既存のサブスクリプションを更新](https://docs.stripe.com/api.md#update_subscription)する場合に実行できます。

Stripe はサブスクリプションとサブスクリプションアイテムの両方で、複数の割引をサポートしています。

併用可能な割引を含むサブスクリプションを作成すると、各割引がサブスクリプションのすべてのアイテムに適用されます。割引の順序は、`amount_off` と `percent_off` の両方を使用する場合に重要になります。たとえば、次の累積割引は異なる方法で適用されます。

- 20% 割引 *さらに* 5 USD 引き
- 5 USD 引き *さらに* 20% 割引

#### ダッシュボード

1. ダッシュボードで、**Billing** > **サブスクリプション**に移動します。
2. 該当するサブスクリプションをクリックします。
3. **アクション** > **サブスクリプションを更新** > **クーポンを追加**をクリックします。
4. ドロップダウンメニューからクーポンをクリックし、**送信**をクリックします。
5. 該当する商品をクリックします。
6. **クーポンを追加**をクリックします。
7. ドロップダウンメニューからクーポンをクリックし、**送信**をクリックします。

#### API

#### Accounts v2

```curl
curl https://api.stripe.com/v1/subscriptions \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "customer_account={{CUSTOMERACCOUNT_ID}}" \
  -d "items[0][price]={{PRICE_ID}}" \
  -d "items[0][discounts][0][coupon]=item-coupon" \
  -d "items[0][discounts][1][promotion_code]=item-promo" \
  -d "discounts[0][coupon]=sub-coupon" \
  -d "discounts[1][promotion_code]=sub-promo"
```

#### Customers v1

```curl
curl https://api.stripe.com/v1/subscriptions \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "customer={{CUSTOMER_ID}}" \
  -d "items[0][price]={{PRICE_ID}}" \
  -d "items[0][discounts][0][coupon]=item-coupon" \
  -d "items[0][discounts][1][promotion_code]=item-promo" \
  -d "discounts[0][coupon]=sub-coupon" \
  -d "discounts[1][promotion_code]=sub-promo"
```

### 制限

複数の割引の利用には、いくつかの制限があります。

- `discounts` パラメーターには最大 20 件の項目を設定できます。
- `discounts` の各エントリーは一意である必要があります。
- 同じクーポンから作成されたクーポンとプロモーションコードを渡すことはできません。
- 同じクーポンから生成されたクーポンと割引を渡すことはできません。
- 引き換え済みの割引は、更新する顧客またはサブスクリプションにすでに関連付けられている必要があります。

### サブスクリプションを更新する

既存の割引を変更しない場合、`discounts` を設定する必要はありません。

`discounts` を更新する際は、サブスクリプションで保持する、以前に設定した `coupon`、`promotion_code`、または `discount` を渡す必要があります。

`discounts = ""` を渡して、サブスクリプションからすべての割引をクリアします。サブスクリプションに割引がない場合、顧客レベルの割引があれば、その割引が請求書に適用されます。

新しい `discounts` パラメーターを使用して、すでにサブスクリプションに複数の割引を設定している場合、非推奨の `coupon` または `promotion_code` パラメーターを使用してサブスクリプションを更新することはできません。同様に、前のフェーズで複数の割引を設定した場合、非推奨の `coupon` または `promotion_code` パラメーターでスケジュールのフェーズを更新することはできません。

`discounts` の更新によって、比例配分が発生することや、請求書が生成されることはありません。新しい割引は、サブスクリプションで次回請求書が作成されたときに適用されます。

> サブスクリプションレベルのプロモーションコード、クーポン、割引をそれ自体で更新しても、比例配分の請求書の項目は作成されません。比例配分は、現在の請求サイクルの請求可能額に影響する変更によってのみ作成されます。たとえば、サブスクリプション項目の`価格`や`数量`の変更、サブスクリプション項目の追加または削除、請求サイクルアンカーの変更などです。
> 
> ただし、割引の変更と比例配分を発生させる更新 (項目数量の変更と、同じ API コールでの割引の変更など) を組み合わせると、Stripe はサブスクリプションの更新された料金体系と割引の状態を使用して比例配分額を計算します。比例配分に関するデビットまたはクレジットには、変更された割引が反映されます。

## 別の割引方法

クーポンはサブスクリプションに割引を適用する一般的な方法ですが、以下のようにすることもできます。

- 顧客にマイナスの[顧客残高](https://docs.stripe.com/api.md#customer_object-balance)を追加します。
- マイナスの[請求書アイテム](https://docs.stripe.com/billing/invoices/subscription.md#adding-draft-invoice-items)を追加します。
- 商品の通常価格よりも安価な、[予備価格](https://docs.stripe.com/products-prices/manage-prices.md#create-price)を追加します。

上記の方法のマイナスの請求書アイテムは、作成された割引、その時点と理由についてより詳細な情報を提供します。

## See also

- [サブスクリプションの変更](https://docs.stripe.com/billing/subscriptions/change.md)
- [比例配分](https://docs.stripe.com/billing/subscriptions/prorations.md)
- [請求書の処理](https://docs.stripe.com/billing/invoices/subscription.md)
- [Coupon API](https://docs.stripe.com/api.md#coupons)
- [Promotion Code API](https://docs.stripe.com/api.md#promotion_codes)
