Stripe の実装に後から資金を追加する非公開プレビュー
カード支出用に Stripe に後から資金を追加する方法をご紹介します。
Connect プラットフォームまたはダイレクトユーザーとして、カード支出でマイナスの Issuing 残高を累積し、Stripe に後から資金を追加できるようになりました。カード支出の発生前に Issuing 残高に前もって資金を追加するのではなく、カードのオーソリがネットワークによってキャプチャーされた「後」に (通常、オーソリ作成の 1 日後)、Issuing 残高に資金を追加できます。Stripe は毎日、プラットフォームに債務額を通知します。プラットフォームでは、期限までに Stripe に同日の電信送金を行えます。延滞手数料や追加ペナルティーが課されないように、期限 (通常、20:00 UTC) までに Stripe に資金を追加する必要があります。
Connect
Connect プラットフォームに後から資金を追加する場合、連結アカウントの動作は次の説明と同様です。
プラットフォームと連結アカウントの関係は変わりません。主な違いは、連結アカウントの合計支出額の事前入金が必要になる代わりに、後から資金を追加できることです。
はじめに
- リザーブの設定 (リザーブは業務の不履行が生じた場合にのみ利用されます)
- 銀行から電信送金する機能
カードプログラムの CreditPolicy
Stripe ではカードプログラムの CreditPolicy
を設定します。これには、債務の返済や規約に関する重要な情報が含まれます。カードプログラムの CreditPolicy
は、連結アカウントに対して設定した CreditPolicy
とは異なります。カードプログラムの CreditPolicy
は Stripe が設定して制御します。次の重要なフィールドが定義されます。
credit_
: すべての連結アカウント (またはダイレクトユーザーの場合はアカウント) 全体で支出できる最大合計金額です。この設定は Stripe で決定されるため、更新をリクエストする場合は、Stripe に連絡する必要があります。これは、エクスポージャー限度額とも呼ばれます。limit_ amount required_
: Stripe でリザーブとして保持する必要がある最小金額。reserve_ amount credit_
およびperiod_ interval credit_
: これらはいずれも、カード支出が期限になるまでの期間を表します。カードプログラムのクレジット間隔が 1 日の場合、毎日 Stripe に返済することになります。period_ interval_ count
GET CreditPolicy
API エンドポイントを呼び出すことで、カードプログラムの CreditPolicy
の詳細を取得できます。
GET /v1/issuing/credit_policy
レスポンスの例
{ "livemode": true, "credit_limit_amount": 10000, // minor units "credit_limit_currency": "usd", "required_reserve_amount": 9000, // minor units "reserve_currency": "usd", "status": "active", "credit_period_interval": "day", "credit_period_interval_count": 1 // other fields for upcoming/last effective attributes }
カードプログラムの FundingObligation
CreditPolicy
では後から資金を追加するプログラムの全体的なパラメーターが定義されます。一方、FundingObligation
は、すべての連結アカウント (またはダイレクトユーザーの場合はアカウント) でのカード支出による、Stripe に対するプラットフォームの現在の債務を表します。
Stripe は毎朝、issuing_
Webhook イベントを送信します。このイベントには、Stripe に対するプラットフォームの債務を表す FundingObligation
が含まれています。特定の FundingObligation
の amount_
の値は、その日の債務額を表します。
{ "id": "icfo_123", "amount_total": 95000000, // minor units "amount_outstanding": 95000000, // minor units "amount_paid": 0, "currency": "usd", "status": "unpaid", "due_at": "timestamp_on_t1", "paid_at": "nil", "owed_to": "stripe", "finalized_at": "timestamp_on_t2", "grace_period_ends_at": "timestamp_on_t3", …, }
支払い遅延
すべての FundingObligation
には、FundingObligation
の期限を表す due_
フィールドが含まれています。
{ "id": "icfo_123", "amount_total": 95000000, // minor units "amount_outstanding": 95000000, // minor units "amount_paid": 0, "currency": "usd", "status": "unpaid", "due_at": "timestamp_on_t1", "paid_at": "nil", "owed_to": "stripe", "finalized_at": "timestamp_on_t2", "grace_period_ends_at": "timestamp_on_t3", …, }
期限になっても FundingObligation
を返済しなかった場合、次のようになります。
FundingObligation
のstatus
がpast_
に変更され、due issuing_
Webhook イベントがトリガーされますfunding_ obligation. updated - Stripe との契約に記載されているように、支払い遅延手数料が課されます
一定の期間に支払い遅延が複数回生じると、追加のペナルティーがプラットフォームに課されることがあります (たとえば、カードプログラムのエクスポージャー限度額の減額)。
Stripe に対する債務額を確認する
Stripe は土日や祝日も含めて毎日、カードプログラムの FundingObligation
を送信します。アカウントを最新状態に保って延滞手数料やペナルティーが生じないようにするために、数式を使用して、unpaid
と past_
のすべての FundingObligation
の amount_
値に基づいて毎日総債務額を計算することをお勧めします。
total_ = sum(unpaid FundingObligations)1 + sum(past_due FundingObligations)2 |
1_「sum(unpaid FundingObligations)」_は、status=unpaid
のすべての FundingObligations
の合計です。
2_「sum(past_due FundingObligations)」_は、status=past_
のすべての FundingObligations
の合計です。
土日と祝日の残高の期限は、翌営業日になります
平日に作成された FundingObligation
の期限は同日ですが、土日または祝日に作成された FundingObligation
の期限は翌営業日になります。通常の週末の場合、月曜日に 3 つの FundingObligations
が期限となるため、Stripe に対する総債務額を正しく集計する必要があります。
FundingObligation を返済する
毎日 due_
タイムスタンプに基づいて総債務額分の資金を追加するには、次のいずれかの方法を使用します。
- 同日の電信送金: 銀行から Stripe Issuing 残高への同日の電信送金を開始して、
FundingObligation
を返済できます。FundingInstructions (口座情報照会) API を使用して、Issuing 残高の口座と金融番号を取得し、それを電信送金の入金先として使用します。 - 残高送金: アメリカ国内では、ダッシュボードまたは API を使用して Stripe Payments 残高から Issuing 残高に瞬時に資金を移動して
FundingObligation
を返済できます (API の利用をご希望の場合は、Stripe にご連絡ください)。 - 事前に資金を追加した Issuing 残高: Stripe では、事前に追加された資金や前日に過剰に追加した資金を次の
FundingObligation
に充当します。
Stripe では、FundingObligation
の債務額を全額受け取ると、そのステータスと金額を更新し、issuing_
Webhook イベントをトリガーします。
{ "id": "icfo_123", "amount_total": 95000000, // minor units "amount_outstanding": 0, "amount_paid": 95000000, // minor units "currency": "usd", "status": "paid", "due_at": "timestamp_on_t1", "paid_at": "timestamp_of_payment", "owed_to": "stripe", "grace_period_ends_at": "timestamp_on_t2" …, }
総債務額の一部のみを返済した場合、Stripe では金額を更新しますが、ステータスは unpaid
のままになります。これは、issuing_
Webhook イベントに反映されます。
{ "id": "icfo_123", "amount_total": 95000000, // minor units "amount_outstanding": 3000000, // minor units "amount_paid": 92000000, // minor units "currency": "usd", "status": "unpaid", "due_at": "timestamp_on_t1", "paid_at": "timestamp_of_payment", "owed_to": "stripe", "grace_period_ends_at": "timestamp_on_t2" …, }
due_
の期限を過ぎても残高が未払いのままの場合、status
が past_
になり、issuing_
Webhook イベントが再度トリガーされます。
FundingObligation の取引を取得する
FundingObligation
に関連した取引のリストを取得するには、すべての取引を一覧表示する API リクエストで次のいずれかのパラメーターを渡します。
- ダイレクトユーザー向けの funding_obligation_for_account パラメーター
- プラットフォームユーザー向けの funding_obligation_for_platform パラメーター
ダイレクト
レスポンスの例
{ "object": "list", "url": "/v1/issuing/transactions", "has_more": false, "data": [ { "id": "ipi_123", "object": "issuing.transaction", // various other fields "funding_obligation_for_platform": null, "funding_obligation_for_account": "ifo_123", // various other fields }, { "id": "ipi_123", "object": "issuing.transaction", // various other fields "funding_obligation_for_platform": null, "funding_obligation_for_account": "ifo_123", // various other fields }, {...} ] }
プラットフォーム
Connect プラットフォームは、連結アカウント ID を伴う Stripe-Account
ヘッダーを指定する必要があります。funding_obligation_for_platform を使用してプラットフォームの FundingObligation
でクエリするか、連結アカウントの FundingObligation
がわかる場合は funding_obligation_for_account を使用します。
レスポンスの例
{ "object": "list", "url": "/v1/issuing/transactions", "has_more": false, "data": [ { "id": "ipi_123", "object": "issuing.transaction", // various other fields "funding_obligation_for_platform": "ifo_123", "funding_obligation_for_account": "ifo_456", // various other fields }, { "id": "ipi_123", "object": "issuing.transaction", // various other fields "funding_obligation_for_platform": "ifo_123", "funding_obligation_for_account": "ifo_789", // various other fields }, {...} ] }
リザーブを管理する
カードの支払いを後払いにする場合、Stripe でリザーブ (プログラム利用規約では「担保」と呼ばれます) を維持している必要があります。Stripe は Stripe が所有・管理するアカウントでリザーブを保持しています。これは未払いの売上に対するセキュリティを目的としており、past_
FundingObligations
を返済する際にリザーブから引き出します。Stripe がリザーブから引き出した場合、延滞手数料をご請求することがあります。さらに、リザーブを使用することになった場合、Stripe はプラットフォームの credit_
を減額したり、リザーブ要件を引き上げる可能性があります。このような事態を避けるには、クレジット連携の FundingObligation
の due_
タイムスタンプより前に、電信送金または残高送金の方法で、Stripe Issuing 残高に資金を追加してください。
リザーブ要件を確認する
CreditPolicy
で必要な required_
を確認できます。後から資金を追加できるようにするには、この金額をリザーブに送る必要があります。
GET /v1/issuing/credit_policy
レスポンスの例
{ "livemode": true, "credit_limit_amount": 10000, // minor units "credit_limit_currency": "usd", "required_reserve_amount": 9000, // minor units "reserve_currency": "usd", "status": "active", "credit_period_interval": "day", "credit_period_interval_count": 1 // other fields for upcoming/last effective attributes }
リザーブ残高に資金を追加する
Stripe は、リザーブ残高への資金の送金をサポートしています。リザーブのアカウント詳細は FundingInstruction
で確認できます。ここには、資金の送金を開始するための銀行口座および送金情報も含まれます。
注意
これは、Stripe が Issuing 残高に資金を追加するために使用するさまざまな手順とは異なります。リザーブの口座情報の destination_
には issuing_
が設定されます。
レスポンスの例
{ "id": "fi_XYZ", "object": "funding_instruction", "livemode": "true", "currency": "usd", "bank_transfer": { "type": 'us_bank_account', "country": "US", "financial_addresses": [{ "supported_networks": ['ach', 'domestic_wire_us'], "type": 'aba', "aba": { "account_number": "546475644", "bank_name": "Wells Fargo", "routing_number": "123456" }, }] }, "destination_balance": "issuing_credit_reserved", "funding_type": "bank_transfer", }
FundingInstructions
から取得した銀行口座に (電信送金または ACH クレジットなどの方法で) 送金した資金は、リザーブ残高に入金されます。入金が完了すると、topup.
Webhook 通知が届きます。
{ "id": "tu_XYZ", "object": "topup", "amount": 9000, "balance_transaction": "txn_123", "destination_balance": "issuing_credit_reserved" "created": 123456789, ... }
リザーブ残高を確認する
/v1/balance API を使用すると、任意の時点におけるリザーブ残高を確認できます。
レスポンスの例
{ "object": "balance", "available": [ ... ], "connect_reserved": [ ... ], "issuing": { ... }, "issuing_credit_reserved": [ { "amount": 9000, "currency": "usd" } ], "livemode": true, "pending": [ ... ] }
Stripe によるリザーブの引き出し
past_
の FundingObligation
がある場合、Stripe はまずリザーブから資金を引き出して FundingObligation
の返済に充て、issuing_
Webhook を使用してプラットフォームに通知します。FundingObligation
オブジェクトが更新され、リザーブから返済された金額が示されます。FundingObligation
の amount_
の全額をリザーブで返済できなかった場合、FundingObligation
は past_
のままになります。詳細および影響については、期日を過ぎた資金追加義務をご覧ください。
リザーブから全額が支払われた FundingObligation
を以下に示します。
{ "id": "icfo_123" "amount_total": 95000000, // minor units "amount_outstanding": 0, "amount_paid": 95000000, // minor units "amount_paid_from_reserve": 95000000, // minor units "currency": "usd", "status": "paid", "due_at": "timestamp_on_t1", "paid_at": "timestamp_of_payment_with_reserve", "owed_to": "stripe", "grace_period_ends_at": "timestamp_on_t2", …, }
また、リザーブ残高から Issuing 残高に自動送金された資金を表す BalanceTransfer
オブジェクト (および関連する BalanceTransactions
) も表示されます。
レスポンスの例
{ "id": "btr_1MinsBCq7itcH1tbDkk4sY8w", "object": "balance_transfer", "amount": 10000, "currency": "usd", "destination_balance": { "issuing": { "balance_transaction": "txn_123_inbound" }, "type": "issuing" }, ... "source_balance": { "issuing_credit_reserved": { "balance_transaction": "txn_123_outbound" }, "type": "issuing_credit_reserved" } }
レスポンスの例
{ "id": "txn_123_outbound", "object": "balance_transaction", "amount": 100, "currency": "usd", ... "type": "balance_transfer_outbound", "balance_type": "issuing_credit_reserved", "reporting_category": "issuing_credit_reserved_funds" } { "id": "txn_123_inbound", "object": "balance_transaction", "amount": 100, "currency": "usd", ... "type": "balance_transfer_inbound", "balance_type": "issuing", "reporting_category": "issuing_credit_reserved_funds" }
リザーブを補填する
Stripe がお客様のリザーブから資金を引き出して FundingObligation
を返済した場合、CreditPolicy
に記載されている reserve_
以上の金額をリザーブに補填する必要があります。Stripe はリザーブの FundingObligation
を生成し、リザーブの必要補填金額と期日を通知します。また、issuing_
Webhook もお送りします。リザーブを補填するには、以前使用したものと同じリザーブ残高 FundingInstruction
を使用して資金を追加する必要があります。FundingObligation
の due_
タイムスタンプまでにリザーブを補填してください。
{ "id" : "fo_456", "object": "issuing.funding_obligation", "amount_outstanding": 10000, "amount_paid": 0, "amount_total": 10000, "currency": "usd", "status": "pending", "due_at": "timestamp_t1", "grace_period": "timestamp_t2", "balance_type": "issuing_credit_reserved" ... }
リザーブ要件の更新をリッスンする
プログラムの拡大に伴い、必要なリザーブ金額が変更されることがあります。その場合は、CreditPolicy
の required_
フィールドが更新されます。プログラムの拡大が原因でリザーブ要件が引き上げられる場合は、エクスポージャー限度額も適切に拡大します。変更通知を受け取るには、issuing_
Webhook をリッスンします。
リザーブ要件の増加
(CreditPolicy
に記載のとおり) リザーブ要件が引き上げられた場合のプロセスは、リザーブを補填する際と同様です。リザーブの FundingObligation
が届いたら、そこに記載されている時刻までに支払う必要があります。
{ "id" : "fo_321", "object": "issuing.funding_obligation", "amount_outstanding": 2000, "amount_paid": 0, "amount_total": 0, "currency": "usd", "status": "pending", "due_at": "timestamp_t1", "grace_period": "timestamp_t2", "balance_type": "issuing_credit_reserved" ... }
リザーブ要件の減少
(CreditPolicy
に記載のとおり) リザーブ要件が引き下げられた場合、Stripe は余剰資金を Issuing 残高に送金します。今後の支出に充てるか、Issuing の実装に関連付けられた銀行口座に入金するか、ご自身で決めることができます。
期日を過ぎたリザーブ義務
リザーブの資金追加義務が past_
(due_
時刻を超過) になった場合、Stripe は以降の取引のオーソリを拒否します。リザーブへの支払いでお困りの場合、貴社のアカウントエグゼクティブに連絡をして、対応を依頼してください。
カードプログラムの利用可能な支出額
現在、Stripe ではカードプログラムで支出に利用可能な残高を示すフィールドまたは残高を用意していません。ただし、この値は次の式で計算できます。
利用可能なクレジット = credit_ + Issuing 残高 (エクスポージャー限度額によって追加の支出が許可されたことにより、Issuing 残高がマイナスになる場合があります) |
後から資金を追加する場合のオーソリの拒否
後から資金を追加する場合、以下の原因でオーソリが拒否されることがあります。
past_
のdue FundingObligations
- リザーブを補填しなかった場合
past_due FundingObligation による拒否
FundingObligation
が past_
で、FundingObligation
の grace_
で定義されている猶予期間を過ぎている場合、Stripe ではオーソリを拒否します。grace_
を確認するには、次の例をご覧ください。
{ "id": "icfo_123", "amount_total": 95000000, // minor units "amount_outstanding": 95000000, // minor units "amount_paid": 0, "currency": "usd", "status": "past_due", "due_at": "timestamp_on_t1", "paid_at": nil, "owed_to": "stripe", "grace_period_ends_at": "timestamp_on_t2", ..., }
猶予期間を過ぎると、Issuing でのオーソリは拒否されるようになり、以下が含まれた issuing_authorization.created イベントが送信されます。
{ "id": "iauth_123", "object": "issuing_authorization", "approved": false, ..., "status": "closed", "request_history": [ { "amount": 100, // minor units "approved": false, "reason": "past_due_funding_obligation_to_stripe", ..., } ] }
リザーブを補填しなかった場合
Stripe がリザーブから資金を引き出して FundingObligation
の返済に充てた場合、リザーブを補填して CreditPolicy
の required_
に戻すための猶予期間 (通常、24 時間) が設定されます。猶予期間が満了するまでにリザーブを補填せずに支出を続けた場合、Stripe は Issuing でのオーソリを拒否し、次の issuing_
イベントを送信します。
{ "id": "iauth_123", "object": "issuing_authorization", "approved": false, // other fields... "status": "closed", "request_history": [ { "amount": 100, // minor units "approved": false, ..., "reason": "insufficient_reserve_balance", } ] }
プラットフォームの購入限度額の通知を有効にする
設定を使用し、メール通知を有効にすることで、プラットフォーム全体での総支出額に対する制限としてプラットフォームの購入限度額を監視することができます。プラットフォームの購入限度額は、Platform CreditPolicy (プラットフォームの CreditPolicy) オブジェクトの credit_limit_amount 属性によって示されます。デフォルトでは、このメール通知は実装が本番環境で有効になったときに有効になり、しきい値は Platform CreditPolicy オブジェクトで credit_
属性の 25% に設定されます。利用可能な支出額が設定されたしきい値を下回るたびにアラートが届きます。
これらの通知を本番環境またはテスト環境で更新するには、以下を使用します。
- メール通知設定に移動します。
- Issuing の購入限度額で、次の 2 つのタイプのアラートオプションから選択します。
- 通知なし: このオプションを選択すると、すべての受取人に対してメール通知が無効になります。
- Issuing の購入限度額のしきい値: 入力フィールドを使用して、この値を更新します。この値はデフォルトで 25% に設定されています。
次の表は、credit_
が 100 USD に設定され、Issuing の購入限度額のアラートしきい値が 25% に設定されている場合のプラットフォームの利用可能な支出額を計算します (プラットフォームの Issuing 残高が -80 USD であると想定しています。)
規約 | 決定方法 | プラットフォームの例 |
利用可能な支出額のアラートしきい値 | credit_ にアラートしきい値を乗算します。 | 100 * 0.25 = 25 USD |
現在の利用可能な支出額 | credit_ に現在の Issuing 残高を加算します (クレジット支出では Issuing 残高がマイナス)。 | 100 - 80 = 20 USD |
プラットフォームにメールで通知が届きます | 現在の利用可能な支出額が利用可能な支出額のしきい値を下回っている場合。 | プラットフォームにアラートが届きます |
このメールアラートの受取人は、ユーザーのプロフィールのメール設定で Issuing の購入限度額を選択して設定できます。