# 従量課金をモデル化する Stripe で使用される各種従量課金モデルについてご紹介します。 > 従量課金の仕組みを更新しました。[改訂後の従量課金のドキュメント](https://docs.stripe.com/billing/subscriptions/usage-based.md) をご覧ください。 > > [移行](https://docs.stripe.com/billing/subscriptions/usage-based-legacy/migration-guide.md)の方法をご確認ください。 従量課金の料金体系モデルでは、[ユーザー数](https://docs.stripe.com/products-prices/pricing-models.md#per-seat)や[定額](https://docs.stripe.com/products-prices/pricing-models.md#flat-rate)料金のように数量を明示的に設定するのではなく、請求期間中のサービスの使用量に基づいて顧客に請求します (もう 1 つの違いは、ユーザー数や定額料金のモデルでは、請求期間の決済をオプションで事前に回収できることです。従量課金では、決済を後から回収する必要があります)。また、[使用量を記録して報告](https://docs.stripe.com/billing/subscriptions/usage-based-legacy/recording-usage.md)する必要もあります。 この場合、企業は、新しい会議サービスの使用に対して分単位で請求し、使用時間が長いほど顧客の 1 分あたりの料金を下げたいと考えています。 これを Stripe で表すと、次のようなモデルになります。 ![](https://b.stripecdn.com/docs-statics-srv/assets/pricing_model-metered-usage.43b16d41d299829bc3fd34ddc2d14b15.png) 従量課金の料金体系モデル ### 利用タイプ 継続購入の場合、licensed または metered のいずれかの `usage_types` を使用して、顧客への請求額を定義します。 ### ライセンスに基づく利用 ライセンスに基づく利用 (`recurring[usage_type]='licensed'`) では、サブスクリプションの作成時または更新時に、サブスクリプションアイテムの数量を設定します。この数量は、ユーザーまたは顧客がこれを変更するまで存続します。サブスクリプションの請求期間ごとに、そのアイテムの金額 × 数量が請求されます。たとえば、顧客が 1 ユーザーあたり 15 USD の月次サービスに 3 ユーザーを登録している場合は、毎月 45 USD を支払います。 ### 従量利用 使用量に基づく請求 (`recurring[usage_type]='metered'`) では、顧客のサービスの使用量に基づいて後から請求し、[Usage API](https://docs.stripe.com/api/usage_records.md) で使用量を追跡します。請求期間の終了時に、合計使用量に `unit_amount` を乗算して、顧客の支払い額が算出されます。たとえば、ブロードバンドのプロバイダーが使用量でギガバイト (GB) あたり 0.50 USD を請求する場合、100 GB を使用した顧客への請求額は 50 USD となります。 ### パッケージと標準の料金体系 ダッシュボードで、料金体系モデルとして**標準の料金体系**または**パッケージ料金体系**を選択できます。これらのモデルはどちらも[ライセンス型](https://docs.stripe.com/api/prices/create.md#create_price-recurring-usage_type) (`recurring[usage_type]='licensed'`) の使用量タイプにマッピングされます。どちらのモデルでも、サブスクリプションの作成または更新時に単位数を指定できます。以下に両モデルの相違点を示します。 - **標準の料金体系**では、数量はデフォルトで 1 になります。 - **パッケージ料金体系**では、単価に 2 以上の値を設定します。 ### Stripe で従量課金の料金体系をモデル化する 次の例では、使用量料金体系モデルを作成する方法を示しています。この場合、サービス料金は 1 分あたり 0.07 USD です。 #### ダッシュボード Stripe でダッシュボードを使用して使用量に基づく料金体系モデルを作成するには、以下のようにします。 最初に `Per-minute pricing` の商品を作成します。商品の作成時に利用できるオプションについては、[価格ガイド](https://docs.stripe.com/products-prices/manage-prices.md#create-product)をご覧ください。 1. [商品カタログ](https://dashboard.stripe.com/products)に移動します。 2. **+ 商品を追加**をクリックします。 3. 商品の**名前**を入力します。この例では `Per-minute pricing` です。 4. (オプション) **説明**を追加します。説明は、決済時の[カスタマーポータル](https://docs.stripe.com/customer-management.md)、および[見積もり](https://docs.stripe.com/quotes.md)に表示されます。 次に、`分単位の料金`商品の月額料金を作成します。**高度な料金オプション**をクリックします。**料金モデル**で**使用量ベース**、**段階別**、**累進**を選択します。 3 つの段階的な料金階層を作成します。 | | 下限ユニット | 上限ユニット | ユニットあたり | 定額 | | --- | --- | --- | --- | --- | | 最初の段階 | 0 | 60 | 0.25 USD | 0.00 USD | | 次の段階 | 61 | 120 | 0.20 USD | 0.00 USD | | 次の段階 | 121 | ∞ | 0.15 USD | 0.00 USD | 以下のようにして、その料金を使用するサブスクリプションを作成します。 1. **支払い** > **サブスクリプション**[ページ](https://dashboard.stripe.com/subscriptions)に移動します。 2. **+ サブスクリプションを作成**をクリックします。 3. 顧客を検索または追加します。 4. 作成した `Per-minute pricing` 商品を検索して、使用する料金を選択します。 5. (オプション) Stripe Tax を使用するには**税金を自動徴収**を選択します。 6. **サブスクリプションを開始**をクリックしてすぐに開始するか、**サブスクリプションのスケジュール**をクリックして開始時期を選択します。 #### API [Product (商品)](https://docs.stripe.com/api/products.md) API と [Price (価格)](https://docs.stripe.com/api/prices.md) API を使用して、Stripe で使用量に基づく料金体系モデルを作成するには、以下のようにします。 1. `Per-minute pricing` 商品を作成します。 ```curl curl https://api.stripe.com/v1/products \ -u "<>:" \ -d "name=Per-minute pricing" ``` 2. 価格を作成します。 ```curl curl https://api.stripe.com/v1/prices \ -u "<>:" \ -d "nickname=Per-minute pricing" \ -d "tiers[0][unit_amount]=500" \ -d "tiers[0][up_to]=5" \ -d "tiers[1][unit_amount]=400" \ -d "tiers[1][up_to]=10" \ -d "tiers[2][unit_amount]=100" \ -d "tiers[2][up_to]=inf" \ -d currency=usd \ -d "recurring[interval]=month" \ -d "recurring[usage_type]=metered" \ -d "product={{PRODUCT_ID}}" \ -d tiers_mode=graduated \ -d billing_scheme=tiered \ -d "expand[0]=tiers" ``` サブスクリプションを作成する際に、段階的な料金の ID を使用します。 ```curl curl https://api.stripe.com/v1/subscriptions \ -u "<>:" \ -d customer={{CUSTOMER_ID}} \ -d "items[0][price]={{PER_MINUTE_PRICE_ID}}" ``` サブスクリプションの導入ガイドでは、実装全体に合わせて料金体系モデルを調整する方法を説明しています。 - Stripe Checkout を使用している場合、次のステップはサイト用の [Checkout セッションを作成](https://docs.stripe.com/billing/subscriptions/build-subscriptions.md?payment-ui=checkout&ui=stripe-hosted#create-session)することです。Stripe を設定していることを確認してください。 - Stripe Elements を使用している場合、次のステップは[顧客を作成](https://docs.stripe.com/billing/subscriptions/build-subscriptions.md?payment-ui=elements&api-integration=checkout#create-customer)することです。Stripe とサンプルアプリケーションが設定されていることを確認してください。 従量課金のその他のバージョンについては、[高度な](https://docs.stripe.com/billing/subscriptions/usage-based-legacy/pricing-models.md#advanced)モデルのセクションをご覧ください。また、従量課金の[無料トライアル](https://docs.stripe.com/billing/subscriptions/usage-based-legacy.md#trials)やその他の機能の導入方法についてもご覧いただけます。 ## 高度な料金モデル ### 定額料金とユーザー数単位の料金 2 つの別々の商品に顧客を登録することで、基本料金とユーザー数単位の追加料金の両方が含まれる料金体系をモデル化できます。一方の商品で定額の基本料金を表し、もう一方の商品で変動するユーザー数単位の料金を表します。 この会社の例では、サービスに対して月額定額料金と、50 人を超えるユーザーに対して段階制料金体系を請求しています。 #### Stripe で定額料金とユーザー数単位の料金体系をモデル化する Stripe でこの構造をモデル化するため、この会社では、基本手数料の **商品** と **料金** を作成します。 ```curl curl https://api.stripe.com/v1/prices \ -u "<>:" \ -d "nickname=Monthly Base Fee" \ -d product={{BASE_FEE_PRODUCT_ID}} \ -d unit_amount=500 \ -d currency=usd \ -d "recurring[interval]=month" \ -d "recurring[usage_type]=licensed" ``` 次に、1 ユーザーあたり 15 USD を請求する月額料金を作成します。 ```curl curl https://api.stripe.com/v1/prices \ -u "<>:" \ -d "nickname=Per-seat price" \ -d product={{PRODUCT_ID}} \ -d unit_amount=1500 \ -d currency=usd \ -d "recurring[interval]=month" \ -d "recurring[usage_type]=licensed" ``` 以下は、3 人のユーザーを持つ顧客に対して、基本料金と、ユーザー単位の料金のサブスクリプションを設定する方法を示しています。 ```curl curl https://api.stripe.com/v1/subscriptions \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "items[0][price]={{BASE_FEE_PRICE_ID}}" \ -d "items[0][quantity]=1" \ -d "items[1][price]={{PER_SEAT_PRICE_ID}}" \ -d "items[1][quantity]=3" ``` これにより、5 USD の基本月額料金と、3 人のユーザーそれぞれに対する 15 USD の請求で、毎月 50 USD の請求が発生します。 ### 定額料金と使用量ベース料金の組み合わせ また、定額料金と使用量ベース料金を組み合わせて、請求期間中の使用量に対する料金に加えて、月額定額料金を請求することも可能です。 [Product (商品)](https://docs.stripe.com/api/products.md)および[Price](https://docs.stripe.com/api/prices.md) APIを使用して、Stripe で定額料金と使用量ベースの料金モデルを作成するには、以下を行います。 1. `Flat monthly fee` 商品を作成します。 ```curl curl https://api.stripe.com/v1/products \ -u "<>:" \ -d name=Per-seat ``` 2. `Flat monthly fee` 商品の料金を作成します。 ```curl curl https://api.stripe.com/v1/prices \ -u "<>:" \ -d "product={{PRODUCT_ID}}" \ -d unit_amount=1000 \ -d currency=usd \ -d "recurring[interval]=month" ``` 3. `Meeting per minute usage` 料金を作成します。 ```curl curl https://api.stripe.com/v1/prices \ -u "<>:" \ -d "nickname=Metered Monthly Plan" \ -d product={{PRODUCT_ID}} \ -d unit_amount=700 \ -d currency=usd \ -d "recurring[interval]=month" \ -d "recurring[usage_type]=metered" ``` サブスクリプションを作成する際に、両方の料金 ID を指定します。 ```curl curl https://api.stripe.com/v1/subscriptions \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d "items[0][price]={{FLAT_MONTHLY_FEE_PRICE_ID}}" \ -d "items[0][quantity]=1" \ -d "items[1][price]={{METERED_USAGE_PRICE_ID}}" \ -d "items[1][quantity]=1" ``` ### 小数を使用する金額 小数を使用する料金は、整数ではない料金の金額を作成する必要がある場合に利用できます。たとえば、クラウドストレージの SaaS ビジネスを運営している場合、1 カ月につき、1 MB あたり 0.05 セントを請求する料金を作成できます。使用量を基準にして MB の数量に 0.05 セントを乗じて、最も近い整数のセントに端数処理します。 #### 小数を使用するオブジェクトを作成する 小数を持つ[価格を作成](https://docs.stripe.com/api.md#create_price)するには、`unit_amount` ではなく、`unit_amount_decimal` を指定します。`unit_amount_decimal` を使用すると、請求通貨の補助単位を使用して金額を設定できます。たとえば、USD で `unit_amount_decimal = 105.5` と設定すると、105.5 セント (1.055 USD) と表すことができます。`unit_amount_decimal` では、小数点以下最大 12 桁まで使用できます。 [段階制料金](https://docs.stripe.com/products-prices/pricing-models.md#tiered-pricing)の使用を予定している場合は、`unit_amount` ではなく `unit_amount_decimal` を使用します。また、`unit_amount` の代わりに `unit_amount_decimal` を使用して[請求書アイテムを作成](https://docs.stripe.com/api/invoiceitems/create.md)することもできます。 API レスポンスでは、オブジェクトが小数点付きの値で作成されると、整数 `unit_amount` フィールドには入力されません。たとえば、`unit_amount_decimal = 0.05` で価格を作成すると、レスポンスには `unit_amount = null` と `unit_amount_decimal = 0.05` が含まれます。`unit_amount_decimal` には整数値を渡すこともでき、その場合はレスポンスの `unit_amount` に入力されます。たとえば、`unit_amount_decimal = 5` で価格を作成すると、レスポンスには `unit_amount = 5` と `unit_amount_decimal = 5.0` が含まれます。 > システムに `unit_amount` 値を使用するイベント処理が存在し、小数を使用する価格の使用を開始する場合は、代わりに `unit_amount_decimal` を使用する必要があります。これは非常に重要です。`unit_amount` では小数を整数に変換できない場合に `null` が返されることになり、システムでエラーが発生する可能性があるためです。