従量課金をモデル化する
注
従量課金プロセスを更新しました。以前のガイダンスの情報については、Stripe のレガシーの従量課金のドキュメントをご覧ください。
従量課金には、使った分だけの支払い、定額手数料と超過料金 (ほとんどのユーザーに推奨される)、クレジットバーンダウンといったさまざまな料金モデルが用意されています。
従量課金
一般に「後払い請求」または「従量課金」と呼ばれます。決められた期間内に発生した使用量を記録し、期間終了時に顧客に請求します。4 つの異なる価格戦略をデプロイできます。
- ユニットあたり: ユニット 1 つごとに同額を請求します。
- パッケージ単位: ユニットまたは使用量のパッケージまたはバンドルに対して請求します。これは架空の Alpaca AI 会社のモデルで示されています。
- 階層型従量ベースの料金: サブスクリプションアイテムは、期間終了時の使用総量に対応する階層で請求されます。従量ベースの料金で詳細をご覧ください。
- 階層型段階的な料金: 従量ベースの料金と似ていますが、段階的な料金では、すべての使用量に単一の料金を適用するのではなく、各段階の使用量に応じて請求します。
顧客が大量の使用量を累計して、月末に決済手段が失敗する可能性があるため、ビジネスが信頼性の低い顧客にかかわる場合はこのモデルをお勧めしません。
定額手数料と超過料金モデル
このモデルでは、期間開始時にサービスに対する毎月の定額料金を請求します。定額料金には部分的な使用量の割り当てが含まれ、追加の使用量 (超過分) が期間終了時に請求されます。
同じ商品に 2 つの料金を指定してこれをモデル化できます。たとえば、Alpaca AI は Llama AI と呼ばれる高度なモデルを新たにリリースするとします。このモデルの料金は月額 200 USD で、10 万トークンが含まれています。料金に含まれるトークンを超える使用量には、トークンあたり 0.001 USD の追加料金が請求されます。
クレジットバーンダウンモデル
この支払いモデルでは、ユーザーは初期金額を支払い、段階的に使用量に応じたクレジットを使用します。Stripe は現在、この特定のモデルをサポートしていませんが、ネイティブサポートの開発に積極的に取り組んでいます。今後のベータ版へのアクセスをご希望の場合は、こちらをクリックしてください。
請求しきい値
請求しきい値を設定して、サブスクリプションサイクルで顧客の未払いの使用量が特定の金額のしきい値に達した際にインボイスを発行し、必要に応じてサブスクリプションの請求サイクルの起点をリセットします。インボイスと次回のインボイスまたは支払いと次回の支払いの間の未払い金額や商品消費を制限する予防措置を追加するには、請求しきい値の使用を検討してください。
サブスクリプションに金額のしきい値を追加する
しきい値は、販売商品の単価の倍数に設定するのが一般的です。
金額しきい値を低く設定すると、顧客は使用量の単位ごとにインボイスを受け取ることになり混乱を招くおそれがあります。
この値は、最小通貨単位による正の整数です (1 USD を請求する場合は 100 セント、小数点以下のない通貨の 100 JPY を請求する場合は 100)。値は 50 通貨単位以上に設定します。
サブスクリプションを作成または更新する際に、ダッシュボードで金額のしきい値を設定することもできます。
サブスクリプションアイテムに使用量のしきい値を追加する
インボイスの作成頻度を抑えるため、使用量のしきい値には使用量の 1 ユニットよりも大きい値を設定します。Stripe では、ダッシュボードで使用量のしきい値を設定することはできません。
しきい値と請求サイクルの起点
デフォルトでは、顧客の使用量がしきい値に達した後も、サブスクリプションの請求サイクルの起点は変わりません。たとえば、1 カ月間のサブスクリプションの途中でしきい値に達した場合には、しきい値のないサブスクリプションと同様にその月の最後にリセットされます。
しきい値に達すると請求サイクルの起点がリセットされるようにサブスクリプションを設定することで、この動作を変更できます。Stripe では、しきい値への到達を、サブスクリプションが自然に月末のロールオーバーポイントに到達したものと同様に扱います。
しきい値と段階制料金
Stripe は、しきい値のあるインボイス全体で段階を管理します。しきい値のないサブスクリプションと同様に、段階は請求期間の終了時にデフォルトでリセットされますが、しきい値に達した後に請求サイクルの起点をリセットするようにサブスクリプションを設定することもできます。
たとえば、広告インプレッションに対して以下の graduated
段階構造が設定された、広告プラットフォームを運営しているとします。
段階 | 金額 (単価) |
---|---|
1 ~ 10000 (up_to=10000) | 0.50 USD (unit_amount=50 ) |
10000+ (up_to=inf ) | 0.40 USD (unit_amount=40 ) |
Stripe は使用量をさかのぼって請求するため、新しい顧客に対するしきい値は一時的な措置として 100 USD に設定できます。このスキームでは、最初の 1 万回のインプレッションまでは 200 インプレッションごとに顧客に請求します (200 x 0.50 USD = 100 USD)。顧客のインプレッションが 1 万回を超えると、250 インプレッションごとに顧客に請求します (250 x 0.40 USD = 100 USD)。これが請求期間の最後まで続き、この最後の時点ですべての未請求の使用量が請求され、サブスクリプションと段階がリセットされます。
しきい値に達したときに段階をリセットするには、サブスクリプションの設定で使用量が設定したしきい値に達した後に請求サイクルの起点がリセットされるようにする必要があります。
数量ベースの段階
数量ベースの段階は、特定の使用量の料金を定義する段階的な階層とは異なり、すべての使用量ユニットの料金を定義します。一部の料金体系モデルでは、段階が上がるたびに単価が下がる数量ベースの段階を使用しています。このようなモデルを使用することで、顧客の使用量の増加を促すことができます (例: 広告インプレッション、ストレージのギガバイト数など)。
これをしきい値と組み合わせた場合、この料金体系モデルでは以下の状況でマイナス金額のラインアイテムを含むインボイスが生成されることがあります。
- しきい値のあるインボイスがすでに発行されています。
- その後の使用量は低い単価で請求されます。
たとえば、以下の段階制料金構造について考えてみます。
段階 | 金額 (単価) |
---|---|
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 はインボイスを発行しません。
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 |
制限事項
- しきい値は、トライアルサブスクリプションには適用されません。
- 金額のしきい値は、従量課金のサブスクリプションアイテムの定額手数料の合計費用以上にする必要があります。
- サブスクリプションの終了までの 24 時間は、Billing しきい値が評価されません。これは、同じ日に複数のインボイスを受け取った顧客の混乱を防ぐのに役立ちます。
- サブスクリプションに設定できる金額のしきい値は 1 つのみです。
- サブスクリプションアイテムに設定できる使用量のしきい値は 1 つのみです。
- 使用量の報告はリアルタイムで行われるため、指定されたしきい値に達した瞬間にインボイスが発行されるとは限りません。請求金額または使用量が指定のしきい値よりも若干高くなる場合があります。
- 金額のしきい値に達したかどうかの判断に使用される金額に税金は含まれませんが、割引は含まれます。
- パッケージごとの段階制料金は現在サポートされていません
無料トライアル
従量課金を使用したサブスクリプションのトライアル期間を使用できます。トライアル期間中に発生した使用量は、請求サイクルの終了時に顧客に対して請求される総額に含められません。トライアル期間の終了後に使用量が発生し、それが次回の請求サイクルの終了時に請求されます。
トライアル期間とサブスクリプションの詳細をご覧ください。
Webhook とトライアル
システムでトライアルステータスの変更に関連するウェブイベントの監視と処理が適切に行われていることを確認します。
トライアルが終了し、サブスクリプションが trialing
から active
に移行する数日前に、customer.subscription.trial_will_end
イベントを受信します。このイベントを受信したら、顧客のアカウントに決済手段の指定があり、請求の進行が可能な状態あることを確認します。必要に応じて、次回の支払いについて事前に顧客に通知します。
ステータス | 説明 |
---|---|
trialing | サブスクリプションは現在トライアル期間中であり、顧客に商品を提供しても安全です。 最初の支払いが行われると、サブスクリプションは自動的に active に移行します。 |
active | サブスクリプションは良好な状態であり、直近の支払いは正常に行われました。 顧客に商品を提供しても安全です。 |
incomplete | サブスクリプションを有効にするには、23 時間以内に支払いを成功させる必要があります。あるいは、支払いで顧客の認証などのアクションが必要です。保留中の支払いがあるときも、サブスクリプションは incomplete になる場合があります。その場合、PaymentIntent のステータスは processing です。 |
incomplete_expired | サブスクリプションの初回の支払いが失敗し、サブスクリプションの作成から 23 時間以内に成功した支払いがありませんでした。これらのサブスクリプションは顧客に請求しません。このステータスは、サブスクリプションの有効化に失敗した顧客を追跡するために存在します。 |
past_due | latest finalized invoice に対する支払いは、失敗したか、実行されていないかのどちらかです。サブスクリプションは請求書の作成を継続します。サブスクリプションの設定によって、サブスクリプションの次の状態が決まります。すべての Smart Retries が試行された後でも請求書が未払いである場合、サブスクリプションが canceled 、unpaid に移行するか、past_due のままになるように設定できます。サブスクリプションを active に移行するには、期日前に最新の請求書を支払ってください。 |
canceled | サブスクリプションはキャンセルされています。キャンセルの際に未払いのすべてのインボイスの自動回収が無効化されます (auto_advance=false )。これは、それ以上更新ができない最終的なステータスです。 |
unpaid | 最新のインボイスは支払われていませんが、サブスクリプションはそのままで保持されます。最新のインボイスは未払いステータスのままになり、インボイスの生成は続行されますが、支払いの試行は行われません。支払いはすでに試行され past_due であったときに再試行されたため、サブスクリプションが unpaid の場合、商品へのアクセスを取り消す必要があります。サブスクリプションを active に移行するには、その期日前に最新のインボイスへの支払いを行います。 |
paused | サブスクリプションは、デフォルトの決済手段を指定されずにトライアル期間が終了し、trial_settings.end_behavior.missing_payment_method は pause に設定されます。サブスクリプションに対してインボイスは作成されなくなります。デフォルトの決済手段が顧客に関連付けられた後、サブスクリプションを再開できます。 |
サブスクリプションと Webhook の詳細をご覧ください。
キャンセル
従量課金を使用すると、請求サイクル中の使用量に応じて顧客が支払う金額が変動します。請求サイクルを変えると、サブスクリプション期間の終了が早まり、短縮された請求サイクル中に発生した使用量に対して顧客に請求することになります。Stripe は従量課金での比例配分 (日割り / 秒割り計算) に対応していません。
キャンセルされたサブスクリプションを、再びアクティブにすることはできません。代わりに、顧客から更新された請求先情報を収集し、顧客のデフォルトの決済手段を更新して、既存の顧客レコードから新しいサブスクリプションを作成できます。
cancel_at_period_end
を使用してサブスクリプションのキャンセルをスケジュール設定した場合、cancel_at_period_end
を false
に更新することで、期間の終了時まではいつでもサブスクリプションを再度有効にできます。最終インボイスには、請求期間の終了時点でのサブスクリプションがキャンセルされてからのすべての使用量が含まれます。
数量を変換する
単価を適用する前に使用量を変換するには、transform_quantity オプションを使用します。これにより、報告された使用量を特定の数で割って、結果を切り上げまたは切り捨てできます。これは、個々の単価ではなく、商品のパッケージに対して価格を設定する場合に一般的に使用されます。数量の変換は、段階制料金とは互換性がありません。
たとえば、レンタカーサービスを運営しているとします。あなたは使用量を分単位の時間で報告して、レンタカーを貸し出した 1 時間ごとに顧客に請求したいと考えています。
次に、レンタカーサービス商品の料金を作成します。1 時間単位で 10 USD を請求し、使用時間が 1 時間に満たない場合も切り上げて 1 時間分を請求します。
車が 150 分間レンタルされた場合、その顧客は 3 時間のレンタル (2 時間 30 分の切り上げ) に対する 30 USD を請求されます。
小数を使用する金額
小数を使用する料金は、整数ではない料金の金額を作成する必要がある場合に利用できます。たとえば、クラウドストレージの SaaS ビジネスを運営している場合、1 カ月につき、1 MB あたり 0.05 セントを請求する料金を作成できます。使用量を基準にして MB の数量に 0.05 セントを乗じて、最も近い整数のセントに丸めます。
小数を使用する価格を作成するには、unit_amount
ではなく、unit_amount_decimal
を指定します。unit_amount_decimal
を使用すると、請求通貨の補助単位で金額を設定できます。たとえば、USD で unit_amount_decimal = 105.5
と設定して 105.5 セント、(1.055 USD) を示すことができます。unit_amount_decimal
では、小数点以下最大 12 桁までを使用できます。
段階制料金の使用を計画している場合は、unit_amount
ではなく unit_amount_decimal
を使用できます。また、unit_amount
の代わりに unit_amount_decimal
を使用して請求書アイテムを作成することもできます。
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
が返されることになり、システムでエラーが発生する可能性があるためです。
猶予期間
デフォルトでは、Stripe はサブスクリプションが生成されてから 1 時間後にそのインボイスを確定します。この 1 時間の猶予期間中は、以前の期間の使用量を引き続き報告できます。インボイスが確定すると、その請求期間の最新の数量を反映するように更新されます。
インボイスの確定後に報告された使用量は、今後のインボイスにはキャプチャーされません。
猶予期間の延長をご希望の場合は、usage-based-billing@stripe.com までお問い合わせください。
サイクル途中の更新
請求サイクル中にサブスクリプションアイテムの価格を更新できます。ただし、反映されるのはインボイスの更新後に発生した使用量のみです。変更前に発生した使用量は請求されません。
更新後に報告された新しい使用量は、新しい料金で請求されます。
サブスクリプションアイテムを削除するには、以下のようにします。
そのアイテムの使用量はインボイスに反映されません。
過去の日付でのサブスクリプションの作成
過去の日付でサブスクリプションを作成して、サブスクリプションを作成する前の使用量の報告を開始できます。