# 従量課金 商品やサービスの使用量に応じて顧客に請求します。 > 従量課金の仕組みを更新しました。[改訂後の従量課金のドキュメント](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/billing/subscriptions/usage-based-legacy/pricing-models.md): Stripe で使用量に基づく料金体系をモデル化する方法をご紹介します。 [使用量を記録する](https://docs.stripe.com/billing/subscriptions/usage-based-legacy/recording-usage.md): ユーザーの使用量を記録し、Stripe に報告します。 [従量課金の概要](https://docs.stripe.com/billing/subscriptions/usage-based-legacy.md#sample-integration): 従量課金の導入についてご紹介します。 ## 従量課金のライフサイクル 従量課金のライフサイクルは次のようになります。 この図は、顧客体験を導入した後にどのようになるかを示したものです。 従量課金 (See full diagram at https://docs.stripe.com/billing/subscriptions/usage-based-legacy) ## 導入サンプル この例では、Typographic という架空のフォントサービスの導入を説明します。 ## 商品と料金体系を作成する 商品と価格を使用して Stripe でビジネスをモデル化します。 Stripe API またはダッシュボードを使用して、*商品* (Products represent items your customer can subscribe to with a Subscription. An associated Price object describes the pricing and other terms of the subscription)とその料金設定オプションを作成します。Typographic には、それぞれに 2 つの段階が設定された 3 種類の商品が存在します。 - 標準 - 階層 1: 1 カ月あたりリクエスト 10,000 件までは 10 USD - 階層 2: 10,000 件を超えた後はリクエストごとに 0.10 USD を加算 - 成長 - 階層 1: 1 カ月あたりリクエスト 10,000 件までは 25 USD - 階層 2: 10,000 件を超えた後はリクエストごとに 0.10 USD を加算 - エンタープライズ - 階層 1: 1 カ月あたりリクエスト 10,000 件までは 75 USD - 階層 2: 10,000 件を超えた後はリクエストごとに 0.0075 USD を加算 この料金体系では、顧客の使用量に基づいて定額料金と超過料金を請求します。[累進従量制](https://docs.stripe.com/subscriptions/pricing-models/tiered-pricing.md#graduated-pricing)では、顧客は最初の 10,000 件のリクエストに対して定額料金を支払います。それを超えると第 2 段階に入り、追加リクエスト 1 件ごとに料金を支払うことになります。定額料金なしで使用量だけに応じて請求することもできます。 請求期間ごとに、各顧客の[使用量記録](https://docs.stripe.com/billing/subscriptions/usage-based-legacy/recording-usage.md)を作成します。Stripe はそれを合計して請求額を決定します。このプロセスは以降のステップで説明しますが、デフォルトの動作を理解しておくと料金の作成方法を考える際に役立ちます。 #### ダッシュボード Stripe でダッシュボードを使用して使用量に基づく料金体系モデルを作成するには、以下のようにします。 最初に `Standard` の商品を作成します。商品の作成時に利用できるオプションについては、[価格ガイド](https://docs.stripe.com/products-prices/manage-prices.md#create-product)をご覧ください。 1. **商品**[タブ](https://dashboard.stripe.com/products)に移動します。 1. **+ 商品を追加**をクリックします。 1. 商品の**名前**を入力します。この例では `Standard` です。 1. (オプション) **説明**を追加します。説明は、決済時の[カスタマーポータル](https://docs.stripe.com/customer-management.md)、および[見積もり](https://docs.stripe.com/quotes.md)に表示されます。 次に、`Standard` 商品の月額料金を作成します。**料金体系モデル**に**段階的な料金体系**を選択してから、**継続**を選択します。 2 つの段階的な料金階層を作成します。 | | 下限ユニット | 上限ユニット | ユニットあたり | 定額 | | ----- | ------ | ------ | -------- | --------- | | 最初の段階 | 0 | 10,000 | 0.00 USD | 10.00 USD | | 次の段階 | 10,001 | ∞ | 0.10 USD | 0.00 USD | 次に、**請求期間**で**毎月**を選択し、**使用量が計測されます**にチェックマークを入れます。 #### API [Product (商品)](https://docs.stripe.com/api/products.md) API と [Price (価格)](https://docs.stripe.com/api/prices.md) API を使用して、Stripe で使用量に基づく料金体系モデルを作成するには、以下のようにします。 1. `Standard` 商品を作成します。 ```curl curl https://api.stripe.com/v1/products \ -u "<>:" \ -d name=Standard ``` 1. 価格を作成します。 ```curl curl https://api.stripe.com/v1/prices \ -u "<>:" \ -d nickname=Standard \ -d "tiers[0][unit_amount]=10" \ -d "tiers[0][flat_amount]=1000" \ -d "tiers[0][up_to]=10000" \ -d "tiers[1][unit_amount]=10" \ -d "tiers[1][flat_amount]=0" \ -d "tiers[1][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]={{STANDARD_PRICE_ID}}" \ -d "items[0][quantity]=1" ``` `Growth` と `Enterprise` の商品のステップを繰り返し、必要に応じて適切な値を入力します。 [料金体系モデル](https://docs.stripe.com/products-prices/pricing-models.md)の種類については、ドキュメントをご覧ください。 ## 顧客を登録する 顧客がサービスに登録できるようにするには、ウェブサイトに決済フォームを表示させる必要があります。[Stripe Checkout](https://docs.stripe.com/checkout/quickstart.md) を利用してサイトにフォームを埋め込むか、Stripe がオンラインで提供するフォームに顧客をリダイレクトします。顧客が継続商品を選択し、決済用のリンクに請求先情報を入力すると、Stripe は 2 種類のレコードを作成します。 - [Customer (顧客)](https://docs.stripe.com/api/customers/object.md) - [Subscription (サブスクリプション)](https://docs.stripe.com/api/subscriptions/object.md): これらの記録はいずれも Stripe に保存されます。 Stripe には、決済フォームの設定に使用できるその他のオプションもあります。 - [料金表](https://docs.stripe.com/payments/checkout/pricing-table.md): Stripe ダッシュボードで料金表を作成し、サイトに埋め込みます。顧客がプランを選択すると、決済ページが表示されます。料金表は、小数未満の料金体系には対応していません。 - [Web Element](https://docs.stripe.com/payments/elements.md): お客様のサイトに導入するカスタムの決済フローを構築します。 ## 使用状況レコードを作成する 各請求期間では、期間全体にわたり使用量を Stripe に報告して、正しい金額が顧客に請求されるようにします。顧客の使用量の記録に自社のシステムを使用して、サブスクリプションの使用量情報を Stripe に提供することができます。 [使用量を記録して報告する](https://docs.stripe.com/billing/subscriptions/usage-based-legacy/recording-usage.md)方法をご紹介します。 ## 構築したシステムをテストする 導入のテストを行い、想定どおりに動作することを確認します。詳しくは、[サブスクリプションの導入テスト](https://docs.stripe.com/billing/testing.md)をご覧ください。 テストクロックを使用することで、模擬の使用量記録をはじめ、さまざまな状況をテストできます。使用量記録のコールを行う際は、テストクロックと使用量記録のタイムスタンプを同期させる必要があります。テストクロックのタイムスタンプを書き留めて、使用量記録が同じ時間枠に含まれるようにしてください。詳しくは、[テストクロック](https://docs.stripe.com/billing/testing/test-clocks.md)をご覧ください。 ## Optional: 無料トライアル サブスクリプションのトライアル期間中に、[従量課金](https://docs.stripe.com/products-prices/pricing-models.md#usage-based-pricing)ベースで請求できます。トライアル期間中に発生した使用量は、通常の請求サイクルの総額には含められません。トライアル期間の終了後に使用量が発生し、それが次回の請求サイクルの終了時に請求されます。 [トライアル期間とサブスクリプション](https://docs.stripe.com/billing/subscriptions/trials.md)の詳細をご覧ください。 ### Webhook とトライアル システムでトライアルステータスの変更に関連するウェブイベントの監視と処理が適切に行われていることを確認します。 トライアルが終了し、サブスクリプションが `trialing` から `active` に移行する数日前に、`customer.subscription.trial_will_end` イベントを受信します。このイベントを受信したら、顧客に支払い方法の指定があり、請求可能な状態であることを確認します。必要に応じて、請求が行われることを顧客に通知します。 | ステータス | 説明 | | -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `trialing` | サブスクリプションは現在トライアル期間中であり、顧客にプロダクトを支障なく提供できます。初回の支払いが行われると、サブスクリプションは自動的に `active` に移行します。 | | `active` | サブスクリプションの状態は良好です。`past_due` のサブスクリプションでは、関連する最新の請求書を支払うか、回収不可としてマークすると、サブスクリプションが `active` に移行します。`active` は、サブスクリプションに関連するすべての未払いの請求書が支払われたことを示すものではない点に注意してください。その他の未払いの請求書は、支払い待ちのまま残すことも、回収不可としてマークすることも、必要に応じて無効にすることもできます。 | | `incomplete` | サブスクリプションを有効にするには、顧客が 23 時間以内に支払いを成功させる必要があります。または、支払いで顧客認証などの[対応が必要](https://docs.stripe.com/billing/subscriptions/usage-based-legacy.md#requires-action)です。保留中の支払いがあり、PaymentIntent のステータスが `processing` の場合も、サブスクリプションが `incomplete` になることがあります。 | | `incomplete_expired` | サブスクリプションの初回の支払いが失敗し、サブスクリプションの作成から 23 時間以内に支払いが成功しませんでした。これらのサブスクリプションは顧客に請求されません。このステータスは、サブスクリプションの有効化に失敗した顧客を追跡するために存在します。 | | `past_due` | 最新の *確定済み* の請求書の決済は、失敗したか、試行されていません。サブスクリプションは、引き続き請求書を作成します。ダッシュボードの [subscription settings](https://dashboard.stripe.com/settings/billing/automatic) によって、サブスクリプションの次のステータスが決まります。[smart retries](https://docs.stripe.com/billing/revenue-recovery/smart-retries.md) を試行しても請求書が未払いの場合は、サブスクリプションを `canceled`、`unpaid`、または `past_due` のままにするように設定できます。サブスクリプションを再度有効にするには、顧客に最新の請求書を決済してもらいます。サブスクリプションのステータスは、決済が最新の請求書より前に行われたか、最新の請求書の期日を過ぎたかに関係なく、`active` になります。 | | `canceled` | サブスクリプションがキャンセルされました。キャンセル時に未払いのすべての請求書の自動回収が無効化されます (`auto_advance=false`)。これは、更新できない最終的なステータスです。 | | `unpaid` | 最新の請求書は支払われていませんが、サブスクリプションはそのまま保持されます。最新の請求書は未処理のままになり、請求書は引き続き生成されますが、支払いの試行は行われません。サブスクリプションが `unpaid` の場合は、`past_due` の時点で支払いの試行と再試行がすでに行われているため、プロダクトへのアクセスを取り消します。サブスクリプションのステータスを `active` にするには、期日前に最新の請求書を支払う必要があります。 | | `paused` | サブスクリプションはデフォルトの決済手段なしでトライアル期間が終了し、[trial_settings.end_behavior.missing_payment_method](https://docs.stripe.com/billing/subscriptions/trials/free-trials.md#create-free-trials-without-payment) が `pause` に設定されています。サブスクリプションの請求書は作成されなくなりました。顧客にデフォルトの決済手段を関連付けた後で、[サブスクリプションを再開](https://docs.stripe.com/billing/subscriptions/trials/free-trials.md#resume-a-paused-subscription)できます。 | [サブスクリプションと Webhook](https://docs.stripe.com/billing/subscriptions/webhooks.md) の詳細をご覧ください。 ## Optional: キャンセル 従量課金を使用すると、請求期間中の使用量に応じて顧客が支払う価格が変動します。請求期間を変えると、サブスクリプションのサービス期間の終了が早まり、短縮された請求期間中に発生した使用量に対して顧客に請求することになります。 キャンセルされたサブスクリプションを、再びアクティブにすることはできません。代わりに、顧客から更新された請求先情報を収集し、顧客のデフォルトの支払い方法を更新して、既存の顧客レコードから新しいサブスクリプションを作成します。 [cancel_at_period_end](https://docs.stripe.com/api/subscriptions/update.md#update_subscription-cancel_at_period_end) を使用してサブスクリプションのキャンセルを予定している場合、`cancel_at_period_end` を false に更新することで、期間の終了時まではいつでもサブスクリプションを再度有効にできます。最終的な請求書には、請求期間の終了時にサブスクリプションがキャンセルされたときに測定された使用量も含まれます。 ### 比例配分 (日割り / 秒割り計算) 顧客がサブスクリプションを変更すると、多くの場合、支払う金額の調整が発生します。この調整は[比例配分](https://docs.stripe.com/billing/subscriptions/prorations.md)と呼ばれます。[create preview invoice (請求書プレビューの作成) エンドポイント](https://docs.stripe.com/api/invoices/create_preview.md)を使用して、調整後の金額を顧客に表示できます。 フロントエンドで、請求書のプレビューの情報をバックエンドのエンドポイントに渡します。 ```javascript function createPreviewInvoice( customerId, subscriptionId, newPriceId, trialEndDate ) { return fetch('/create-preview-invoice', { method: 'post', headers: { 'Content-type': 'application/json', }, body: JSON.stringify({ customerId: customerId, subscriptionId: subscriptionId, newPriceId: newPriceId, }), }) .then(response => { return response.json(); }) .then(invoice => { return invoice; }); } ``` バックエンドで、フロントエンドから呼び出すエンドポイントを定義します。[請求書のプレビューを作成](https://docs.stripe.com/api/invoices/create_preview.md)して、プレビューする変更を渡します。この例では、以前の価格 ID のサブスクリプションアイテムを削除し、使用量をクリアし、新しい価格 ID を追加する必要があります。これらの変更は実際には適用されず、プレビューの表示を定義するだけです。 #### Ruby ```ruby # Don't put any keys in code. See https://docs.stripe.com/keys-best-practices. # Find your keys at https://dashboard.stripe.com/apikeys. Stripe.api_key = '<>' post '/create-preview-invoice' do content_type 'application/json' data = JSON.parse request.body.read subscription = Stripe::Subscription.retrieve(data['subscriptionId']) invoice = Stripe::Invoice.create_preview( customer: data['customerId'], subscription: data['subscriptionId'], subscription_details: { items: [ { id: subscription.items.data[0].id, deleted: true, clear_usage: true }, { price: ENV[data['newPriceId']], deleted: false } ] } ) invoice.to_json end ``` ## Optional: 請求しきい値 ### 請求サイクルの起点 しきい値に達すると、コードに従って[請求サイクルのアンカー](https://docs.stripe.com/billing/subscriptions/usage-based-legacy.md#bca)をリセットするかどうかが制御され、対象であると見込まれるすべてのライセンス制のサブスクリプションがそれに応じて比例配分されます。 請求しきい値を使用することにより、サブスクリプションサービス期間で顧客の未払いの使用量が特定の金額または使用量のしきい値に達した際に*請求書* (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/api/subscriptions/create.md#create_subscription-billing_thresholds-reset_billing_cycle_anchor)をリセットすることもできます。請求書または決済の期間の途中で未払い金額や商品消費を制限するための予防措置が必要な場合には、請求しきい値の使用を検討してください。 #### サブスクリプションに金額のしきい値を追加する 通常の場合、しきい値の金額は販売商品の単価の倍数に設定します。 金額しきい値を低く設定すると、顧客は使用量の単位ごとに請求書を受け取ることになり混乱を招くおそれがあります。 この値は、[最小通貨単位](https://docs.stripe.com/currencies.md#zero-decimal)に使用される正の整数です (1 USD を請求する場合は 100 セント、小数点以下のない通貨 (日本円) で 100 円を請求する場合は 100)。値は 50 通貨単位以上にする必要があります。 サブスクリプションを作成または更新する際に、[ダッシュボード](https://dashboard.stripe.com/test/subscriptions)で金額のしきい値を設定することもできます。 ```curl curl https://api.stripe.com/v1/subscriptions/{{SUBSCRIPTION_ID}} \ -u "<>:" \ -d "billing_thresholds[amount_gte]=10000" \ -d "billing_thresholds[reset_billing_cycle_anchor]=false" ``` #### サブスクリプションアイテムに使用量のしきい値を追加する 金額のしきい値の場合と同様に、請求書の作成頻度を抑えるため、使用量のしきい値は使用量の 1 ユニットよりも大きくすることをお勧めします。こうすることで、請求書の作成頻度を抑えることができます。Stripe では現在、ダッシュボードで使用量のしきい値を設定することはできません。 ```curl curl https://api.stripe.com/v1/subscription_items/{{SUBSCRIPTIONITEM_ID}} \ -u "<>:" \ -d "billing_thresholds[usage_gte]=2000" ``` #### しきい値と請求サイクルの起点 顧客の使用量がしきい値に達したときに、そのサブスクリプションの[請求サイクルの起点](https://docs.stripe.com/billing/subscriptions/billing-cycle.md)に変化があるわけではありません (デフォルト設定)。たとえば、月次のサブスクリプションの途中でしきい値に達した場合には、そのサブスクリプションは、しきい値のないサブスクリプションと同様にその月の末日にリセットされます。 この動作を変更して、しきい値に達すると請求サイクルの起点がリセットされるようにすることができます。そうすることにより、サブスクリプションが月末に本来のロールオーバーポイントに達したときと同様の方法で、しきい値への到達を効率的に処理できます。 ```curl curl https://api.stripe.com/v1/subscriptions/{{SUBSCRIPTION_ID}} \ -u "<>:" \ -d "billing_thresholds[reset_billing_cycle_anchor]=true" ``` 従量制のサブスクリプションに `aggregate_usage=last_ever` が設定されている場合は、`reset_billing_cycle_anchor=true` を使用できないのでご注意ください。 #### しきい値と段階制料金 段階は、しきい値のある請求書全体で管理されます。しきい値のないサブスクリプションと同様に、段階は請求期間の終了時にのみリセットされますが、しきい値に達したときに請求サイクルの起点をリセットするようにサブスクリプションを設定することもできます。 たとえば、広告インプレッションに対して `graduated` 段階構造が設定された、広告プラットフォームを運営しているとします。 | 段階 | 金額 (単価) | | ----------------------- | --------------------------- | | 1 ~ 10000 (up_to=10000) | 0.50 USD (`unit_amount=50`) | | 10000+ (`up_to=inf`) | 0.40 USD (`unit_amount=40`) | 使用量は実際の使用が発生した後に請求されるため、新しい顧客に対するしきい値は暫定的に 100 USD にします。このスキームでは、最初の 1 万回のインプレッションまでは 200 インプレッションごとに顧客に請求します (200 x 0.50 USD = 100 USD)。顧客のインプレッションが 1 万回を超えると、250 インプレッションごとに顧客に請求します (250 x 0.40 USD = 100 USD)。これが請求期間の最後まで続き、この最後の時点で未請求の使用量が請求され、サブスクリプションと段階がリセットされます。 しきい値に達したときに段階をリセットするには、サブスクリプションの設定で使用量が設定したしきい値に達したときに請求サイクルの起点がリセットされるようにする必要があります。 ##### 数量ベースの段階 [数量ベースの段階](https://docs.stripe.com/billing/subscriptions/usage-based-legacy.md#volume-based-pricing)は、特定の使用量の料金を定義する[段階的な階層](https://docs.stripe.com/billing/subscriptions/usage-based-legacy.md#graduated-pricing)とは異なり、すべての使用量ユニットの料金を定義します。一部の料金体系モデルでは、段階が上がるたびに単価が下がる数量ベースの段階を使用しています。このようなモデルを使用することで、顧客の使用量の増加を促すことができます (例: 広告インプレッション、ストレージのギガバイト数など)。 これをしきい値と組み合わせた場合、この料金体系モデルでは以下の状況でマイナス金額のラインアイテムを含む請求書が生成されることがあります。 1. しきい値のある請求書がすでに発行されています。 1. その後の使用量は低い単価で請求されます。 たとえば、以下の段階があるとします。 | 段階 | 金額 (単価) | | ------------------------- | --------------------------- | | 1 ~ 10000 (`up_to=10000`) | 0.50 USD (`unit_amount=50`) | | 10000+ (`up_to=inf`) | 0.40 USD (`unit_amount=40`) | 顧客が 10,000 ユニットを使用すると、請求書の合計は 5,000 USD (10,000 x 0.50 USD = 5,000 USD) になります。その後さらに使用を続けることで、「すべて」の使用量が、低い単価である 0.40 USD で請求されます。このため、顧客がもう 1 ユニット使用すると、請求書は 4,000.40 USD に「減少」します (10,001 x 0.40 USD = 4,000.40 USD)。 サブスクリプションにしきい値がない場合、Stripe は請求期間の終了時に 4,000.40 USD の請求書を発行することになります。 5,000 USD の金額しきい値が存在する場合に、どのようにしてマイナスの請求が発生するのかを確認してみましょう。このシナリオでは、顧客の使用量が 10,000 ユニットに達すると Stripe が請求書を発行します。 顧客がもう 1 ユニット使用すると、請求書の合計は 4,000.40 USD (10,001 x 0.40 USD = 4,000.40 USD) に減少します。ただし、顧客がそれ以上 1 ユニットも使用しなければ、999.60 USD の「超過支払い額」が生じます (5,000 USD - 4,000.40 USD = 999.60 USD)。請求期間の最後に、Stripe はこの金額を顧客の残高に加え、将来の請求書の支払いに充当します。 顧客が使用を続けたと仮定します。この使用量のコストは、顧客が 12,500 ユニットを使用すると、再び 5,000 USD に達します (5,000 USD ÷ 0.40 USD = 12,500)。ただし、前回の支払いの 5,000 USD がこの使用量に充当されるため、請求書は発行されません。 Stripe は、合計使用量が 25,000 ユニット (合計費用が 10,000 USD) に達するか、請求期間の終了まで (どちらか早く発生した方)、請求書を発行しません。以下の表は、使用量が 25,000 ユニットに達した場合に発行される 2 種類の請求書に表示されるラインアイテムを示しています。 請求書 1 | ラインアイテム | 数量 | 金額 | | ----------------- | ------ | ------------- | | 使用量 (単価 0.50 USD) | 10,000 | 5,000 USD | | **合計** | | **5,000 USD** | 請求書 2 | ラインアイテム | 数量 | 金額 | | ----------------------- | ------ | ------------- | | 使用量 (単価 0.40 USD) | 25,000 | 10,000 USD | | 前回請求された金額 (単価 0.50 USD) | | -5,000 USD | | **合計** | | **5,000 USD** | #### 制限と注意事項 - しきい値は、[トライアルのサブスクリプション](https://docs.stripe.com/billing/subscriptions/trials.md)には適用されません。 - 金額しきい値は、使用量ベースのサブスクリプション項目の定額料金の合計より大きくなければなりません。 - サブスクリプションの終了までの 24 時間は、Billing しきい値が評価されません。これは、同じ日に複数の請求書を受け取った顧客の混乱を防ぐのに役立ちます。 - サブスクリプションに設定できる金額のしきい値は 1 つのみです。 - サブスクリプションアイテムに設定できる使用量のしきい値は 1 つのみです。 - 使用量の報告はリアルタイムで行われるため、指定されたしきい値に達した瞬間に請求書が発行されるとは限りません。請求金額または使用量が指定のしきい値よりも若干高くなる場合があります。 - 金額のしきい値に達したかどうかの判断に使用される金額に税金は含まれませんが、割引や該当する比例配分は含まれます。 - サブスクリプションで、`last_ever` 総計モードが使用されている場合は、`reset_billing_anchor` オプションを有効にできません。 ## Optional: 集計使用量 使用量に基づく料金体系モデルは、計測しているユニットが厳密には合計に従わない状況にも適用できます。 たとえば Typographic は、書き込まれたワード数に基づき課金を行う、コピーライティングサービスを提供しています。Typographic は、コピーライティングサービスの使用量に応じた料金に、定額の月額料金を加算した額を、月末に顧客に請求します。Typographic は、1 カ月あたりできるだけ多くのワード数を、各顧客に請求をしたいと考えています。これは、[aggregate_usage](https://docs.stripe.com/api/prices/create.md#create_price-recurring-aggregate_usage) パラメーターを使用して設定できます。 ```curl curl https://api.stripe.com/v1/prices \ -u "<>:" \ -d "nickname=Copywriting service" \ -d product={{PRODUCT_ID}} \ -d unit_amount=10000 \ -d currency=usd \ -d "recurring[interval]=month" \ -d "recurring[usage_type]=metered" \ -d "recurring[aggregate_usage]=max" ``` 顧客が 6 月 1 日に、2,000 ワード書き込み、さらに 6 月 15 日に 1,000 ワード書き込みました。その後で、6 月 20 日に最初の 2,000 ワードのうちの 1,000 ワード分のクレジットが提供されたとします。この場合、月末の請求金額は 200 USD になります (この月の最大使用量が 2,000 ワードで、ワード単価が 0.10 USD)。 `aggregate_usage` パラメーターは、サブスクリプションでの使用量記録の処理方法を決定します。このパラメーターには以下のオプションがあります。 - `sum`: (パラメーターを指定しない場合に渡される) デフォルト値。合計請求額は、請求期間の全使用量の記録の合計に従います。 - `last_during_period`: 合計請求額は、請求期間の最新の使用量記録に従います。請求期間中に使用が記録されなかった場合は、使用量 `0` の使用量に応じた合計請求額になります。 - `last_ever`: 合計請求額は、提供された最新の使用量記録に基づきます。現行の請求期間中に使用が記録されなかった場合、Stripe は以前の使用量記録を探します。使用量記録が見つからない場合は、合計請求額は使用量 `0` に従います。 - `max`: 合計請求額は、請求期間の最大の使用量記録に従います。請求期間中に使用が記録されなかった場合は、`0` の使用量に応じた合計請求額になります。 どのオプションを選択するかは、使用量の処理方法によって異なります。また、使用量の記録方法を表示するために、[Usage Record API](https://docs.stripe.com/api/usage_records/create.md#usage_record_create-action) の `action` パラメーターの値も設定します。 ```curl curl https://api.stripe.com/v1/prices \ -u "<>:" \ -d currency=usd \ -d "recurring[interval]=month" \ -d "recurring[usage_type]=metered" \ -d "product_data[name]=Gold special" \ -d "nickname=Gold special price" \ -d unit_amount=3000 ``` サブスクリプションを作成する場合 - `quantity` を渡さないでください。 - [サブスクリプションアイテム](https://docs.stripe.com/api.md#subscription_items) の ID は必ず記録してください。この値を [Usage Record API](https://docs.stripe.com/api.md#usage_record_create) に渡して使用量を報告します。 ## Optional: 数量を変換する 単価をかける前に使用量を集計するには、[transform_quantity](https://docs.stripe.com/api/prices/create.md#create_price-transform_quantity) オプションを使用します。これは、料金の合計を求める前に、さまざまな数量や使用量を報告するのに便利です。 Typographic は提供商品を拡大してカスタムフォントデザインサービスを追加することにしました。カスタムデザインは労働集約的であるため、カスタマイズのレベルに応じて追加料金 (別の `Product`) を請求します。デザイナーはカスタマイズの実行に要した時間を正確に記録しますが、Typographic の顧客への請求は分単位では行われません。分単位ではなく、同社はカスタマイズに要した時間が 1 時間未満であっても 1 時間単位で請求します。 まず、フォントカスタマイズ用商品を作成します。 ```curl curl https://api.stripe.com/v1/products \ -u "<>:" \ -d "name=Font Customization Service" \ -d unit_label=Hours ``` 次に、フォントカスタマイズサービス商品の料金を作成します。1 時間単位で 150 USD を請求し、使用時間が 1 時間に満たない場合も切り上げて 1 時間分を請求します。 ```curl curl https://api.stripe.com/v1/prices \ -u "<>:" \ -d "nickname=Customization Per Hour Rate" \ -d unit_amount=15000 \ -d currency=usd \ -d "recurring[interval]=month" \ -d "recurring[usage_type]=metered" \ -d product={{FONT_CUSTOMIZATION_SERVICE_PRODUCT_ID}} \ -d "transform_quantity[divide_by]=60" \ -d "transform_quantity[round]=up" ``` デザイナーが 150 分のカスタマイズを利用した場合、その顧客は 3 時間のカスタマイズ (2 時間 30 分を切り上げ) 分として 450 USD が請求されます。 ## See also - [実装のサンプルリポジトリー](https://github.com/stripe-samples/subscription-use-cases/tree/main/usage-based-subscriptions) - [従量課金のビデオチュートリアル](https://www.youtube.com/watch?v=v8cN4pEofy8)