# 既存のサブスクリプションの料金を変更する

価格を変更してサブスクリプションをアップグレードおよびダウングレードする方法をご紹介します。

このガイドでは、Subscriptions API を使用した顧客のサブスクリプションの管理について詳しく説明しています。

また、[カスタマーポータル](https://docs.stripe.com/customer-management.md)を導入して、Stripe がホストするダッシュボードを顧客に提供することもできます。このダッシュボードでサブスクリプションと請求の詳細を管理できます。

顧客がサブスクリプションを変更すると、お客様は新しい選択を反映させるために、サブスクリプションアイテムを変更する必要があります。たとえば、顧客がプレミアム段階にアップグレードするか、またはベーシック段階にダウングレードする場合、サブスクリプションアイテムの基本価格を入れ替えるよう求められることがあります。これを実行するには、いくつかの方法があります。

## 識別子を取得する

選択した方法にかかわらず、更新するオブジェクトの識別子を指定する必要があります。関連するフィルター (顧客が設定した[ Account](https://docs.stripe.com/api/v2/core/accounts/object.md) または [Customer](https://docs.stripe.com/api/customers/object.md) オブジェクトの ID など)を指定して [list subscriptions](https://docs.stripe.com/api/subscriptions/list.md) メソッドを使用し、更新するサブスクリプションと項目を見つけます。

```curl
curl -G https://api.stripe.com/v1/subscriptions \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d customer={{CUSTOMER_ID}}
```

これにより、特定の顧客に関するサブスクリプションが返され、サブスクリプション ID (`id`) 、サブスクリプションアイテム ID (`items.data.id`)、サブスクリプションアイテムの価格 ID (`items.data.price.id`)を取得することができます。

```json
{
  "object": "list",
  "url": "/v1/subscriptions",
  "has_more": false,
  "data": [
    {
      "id": "su_1NXPiE2eZvKYlo2COk9fohqA",
      "object": "subscription",
      "application": null,
      "application_fee_percent": null,
      "automatic_tax": {
        "enabled": false
      },
      "items": {
        "object": "list",
        "data": [
          {
            "id": "si_OK3pbS1dvdQYJP",
            "object": "subscription_item",
            "billing_thresholds": null,
            "created": 1690208774,
            "metadata": {},
            "price": {
              "id": "price_1NOhvg2eZvKYlo2CqkpQDVRT",
              "object": "price"
            }
          }
        ]
      }
    }
  ]
}
```

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

次のパラメーターを含む[サブスクリプションを更新](https://docs.stripe.com/api.md#update_subscription)します。

- `item ID`: 現在の料金を新しい料金に置き換えるには、サブスクリプションアイテムを指定する必要があります。指定せずに新しい料金でサブスクリプションを更新すると、新しいサブスクリプションアイテムが「追加」され、サブスクリプションで両方の料金が有効化されることになります。
- `item price`: 置き換える料金の ID を指定します。
- `item quantity`: サブスクリプションの料金を更新すると、数量がデフォルト値の `1` に自動的に戻されます。既存のサブスクリプションの数量が `1` 以外で、その値を保持する場合は、その値を更新内容に含める必要があります。

```curl
curl https://api.stripe.com/v1/subscriptions/{{SUBSCRIPTION_ID}} \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "items[0][id]={{SUB_ITEM_ID}}" \
  -d "items[0][price]={{NEW_PRICE_ID}}"
```

> 現在の価格を新しい価格に変えるには、サブスクリプションアイテムを指定する必要があります。これを行わないと、新しい価格が「追加」され、サブスクリプションの両方の価格が有効化されることになります。

別の方法として、現在のサブスクリプションアイテムを削除し、更新された価格で新しいサブスクリプションアイテムを作成することもできます。

```curl
curl https://api.stripe.com/v1/subscriptions/{{SUBSCRIPTION_ID}} \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "items[0][id]={{SUB_ITEM_ID}}" \
  -d "items[0][deleted]=true" \
  -d "items[1][price]={{NEW_PRICE_ID}}"
```

## サブスクリプションアイテムを更新する

次のパラメーターを使用して[サブスクリプション項目を更新](https://docs.stripe.com/api/subscription_items/update.md)します。

- [price](https://docs.stripe.com/api/subscription_items/update.md#update_subscription_item-price):置き換える料金の ID を指定します。
- [quantity](https://docs.stripe.com/api/subscription_items/update.md#update_subscription_item-quantity):サブスクリプション価格を更新すると、数量は自動的にデフォルト値の`1`に戻ります。既存のサブスクリプション数量が `1` 以外であり、その値を保存する場合は、更新に含める必要があります。

サブスクリプション単位で他に変更を行う必要がない場合は、このオプションを使用します。

```curl
curl https://api.stripe.com/v1/subscription_items/{{SUBSCRIPTIONITEM_ID}} \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d price={{NEW_PRICE_ID}}
```

## 請求期間

どちらの価格にも、同じ請求期間が設定されている場合 (`interval` と `interval_count` の組み合わせ)、サブスクリプションでは同じ請求日が維持されます。価格ごとの請求期間が異なる場合、新しい価格には変更日に開始される新しい期間で請求されます。たとえば、顧客を 1 つの月次サブスクリプションから別の月次サブスクリプションに切り替えても、請求日は変わりません。それに対して、顧客を月次支払いから年次サブスクリプションに切り替えると、請求日はその切り替え日に移行します。顧客を 1 つの月次サブスクリプションから別の月次サブスクリプションに切り替え、それに伴ってトライアル期間を設ける場合にも、請求日は (トライアル期間の終わりに) 移行します。

### サブスクリプションのスケジュール

請求期間の終了時にサブスクリプションを変更する場合は、[サブスクリプションスケジュール](https://docs.stripe.com/billing/subscriptions/subscription-schedules.md#changing-subscriptions)を使用して移行を管理することを検討してください。サブスクリプションスケジュールを使用する場合は、[ベストプラクティス](https://docs.stripe.com/billing/subscriptions/subscription-schedules.md#subscription-schedule-sub-updates)に従って、予期しないサブスクリプションの上書きを防ぎます。

## 請求書ーターを使用した従量課金

請求メーターに関連付けられた料金をサイクル途中で更新する場合については、[料金モデル](https://docs.stripe.com/billing/subscriptions/usage-based/manage-billing-setup.md#mid-cycle-updates)セクションに詳しい説明があります。請求メーターで料金を更新する際に `clear_usage` を渡しても効果はありません。

## 使用状況レコードを使用した従量課金 (レガシー)

レガシーの使用量記録を基盤とする従量制価格と、新しい使用量記録の価格への更新がある場合、使用量は新しい価格に移行されます。

```curl
curl https://api.stripe.com/v1/subscriptions/{{SUBSCRIPTION_ID}} \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "items[0][id]={{SUB_ITEM_ID}}" \
  -d "items[0][price]={{NEW_PRICE_ID}}" \
  -d "items[0][clear_usage]=true"
```

## 比例配分 (日割り / 秒割り計算)

サブスクリプションを変更すると、多くの場合、[比例配分](https://docs.stripe.com/billing/subscriptions/prorations.md)が発生します。顧客が料金の変更に伴う追加費用を把握できるようにするには、[比例配分をプレビュー](https://docs.stripe.com/billing/subscriptions/prorations.md#preview-proration)します。また、[比例配分を無効にする](https://docs.stripe.com/billing/subscriptions/prorations.md#disable-prorations)こともできます。

### 即時の支払い

Stripe は、サブスクリプションの請求サイクルアンカーがリセットされると、即座に決済を試みます。[サブスクリプションの請求サイクルアンカーのリセット](https://docs.stripe.com/billing/subscriptions/billing-cycle.md#changing) についてはこちらをご覧ください。

すぐに請求が行われたものの、要求された支払いに失敗した場合、サブスクリプションの変更リクエストが成功し、サブスクリプションが `past_due` に変わります。

同じ請求期間でサブスクリプションの変更があった際に顧客にただちに請求するには、`proration_behavior` を `always_invoice` に設定します。これにより、比例配分が行われ、すぐに切り替え後*請求書* (Invoices are statements of amounts owed by a customer. They track the status of payments from draft through paid or otherwise finalized. Subscriptions automatically generate invoices, or you can manually create a one-off invoice)が生成されます。この設定を[保留の更新](https://docs.stripe.com/billing/subscriptions/pending-updates.md)と組み合わせると、新しい請求書で決済が成功した場合にのみ、サブスクリプションが更新されます。

### クレジット比例配分

クレジット比例配分は、顧客が請求期間終了前にサブスクリプションをダウングレードするか、サブスクリプションアイテムをキャンセルしたときに発行されます。Stripe は、サブスクリプションの[billing_mode](https://docs.stripe.com/api/subscriptions/object.md#subscription_object-billing_mode) の設定に応じて、クレジット比例配分の計算に 2 つ異なる方式でクレジット比例配分を計算します。詳細については、[クレジット比例配分](https://docs.stripe.com/billing/subscriptions/prorations.md#credit-prorations) をご覧ください。

### 価格と数量がゼロを処理する

顧客を金額がゼロのサブスクリプション (トライアルなど) に登録した場合、ゼロ以外の金額に変更すると、[請求期間](https://docs.stripe.com/billing/subscriptions/change-price.md#billing-periods)は変更日にリセットされます。

顧客をゼロ以外の金額でゼロ数量のサブスクリプションに登録した場合、数量をゼロ以外に変更しても請求書は生成されず、請求期間もリセットされません。

## See also

- [請求期間(サイクル)](https://docs.stripe.com/billing/subscriptions/billing-cycle.md)
- [キャンセルと一時停止](https://docs.stripe.com/billing/subscriptions/cancel.md)
- [Update Subscription API](https://docs.stripe.com/api.md#update_subscription)
