InboundTransfer オブジェクトを使用して Treasury で送金
所有している別の口座から Treasury の金融口座に送金する方法をご紹介します。
インバウンド送金は、ACH ネットワークを使用して外部のアメリカの銀行口座から金融口座に資金を移動します。このような送金は、InboundTransfer オブジェクトで開始されます。
同日の ACH 機能を使用していない場合、インバウンド送金には通常、2 ~ 4 営業日かかります。詳細については、資金移動のタイムラインのガイドをご覧ください。
InboundTransfer を作成する
POST /v1/treasury/inbound_
を使用して InboundTransfer
オブジェクトを作成します。これは、お客様が保有する外部口座から自身の金融口座への引き出しベースの送金を表します。言い換えると、InboundTransfer
を作成し、外部のアメリカの銀行口座から引き落としを行い、金融口座に資金を移動します。このリクエストには、以下のパラメーターを含める必要があります。
amount
: 金融口座に送金されるセント単位での金額。currency
: 3 文字の ISO 通貨コード (サポートされている値は、現在usd
のみ)。financial_
: 送金を受け取る金融口座の ID。account origin_
: インバウンド送金の送金元。まず、SetupIntent(支払い方法設定インテント) を使用して、アカウントに関連付けられたインバウンドフローの支払い方法を設定し、銀行口座を確認する必要があります。別の方法として、確認済みの ExternalAccount (外部銀行口座) として以前に設定された既存の BankAccount (銀行口座) を使用することもできます。支払い方法と銀行口座のいずれを使用する場合でも、口座から資金を引き落とすには、口座名義人の許可が必要です。payment_ method
以下の JSON は、リクエストの本文に含めることができるデータを示します。
{ // The source PaymentMethod or BankAccount. Funds are pulled from this account. "origin_payment_method": "{{PAYMENT_METHOD_ID}}" | "{{BANK_ACCOUNT_ID}}", // The destination FinancialAccount. Funds arrive in this account. "financial_account": "{{FINANCIAL_ACCOUNT_ID}}", // The amount to debit. 10.00 USD in this case. "amount": 1000, "currency": "usd", // An optional, internal description for the InboundTransfer. "description": "Funds for vendor payment payment_234281", // An optional descriptor for the InboundTransfer to send // to the network with the debit request. Max 10 characters "statement_descriptor": "payment_1", // Stripe does not support updating InboundTransfers after creation. // You can only set metadata at creation time. "metadata": null | {{Hash}} }
以下のリクエストは、アカウントに関連付けられた支払い方法を使用して 200 USD を指定された ID の金融口座に送金します。Stripe-Account
ヘッダー値は、金融アカウントと支払い方法の両方を所有する Stripe アカウントを識別します。
成功すると、レスポンスで InboundTransfer
オブジェクトが提供されます。このオブジェクトには、hosted_
が含まれ、お客様のプラットフォームのアカウント所有者が取引詳細にアクセスできるようにします。
{ "id": "{{INBOUND_TRANSFER_ID}}", "object": "inbound_transfer", "amount": 20000, "created": 1648071297, "currency": "usd", "description": "Funds for repair", "financial_account": "{{FINANCIAL_ACCOUNT_ID}}", "hosted_regulatory_receipt_url": "https://payments.stripe.com/regulatory-receipt/{{IBT_URL}}", "linked_flows": null, "livemode": false, "metadata": {}, "origin_payment_method": "{{PAYMENT_METHOD_ID}}", ... "statement_descriptor": "Invoice 12", "status": "processing", ... }
警告
まれに、 Stripeがさまざまなリスク要因により InboundTransfer リクエストをキャンセルすることがあります。これらのシナリオでは、 API リクエストがレスポンスコード 402 でエラーになります。エラーメッセージには、エラーにつながったリスク要因の詳細が表示されています。
同日の ACH
プライベートプレビュー
同日の ACH は現在、制限付きのプレビュー版として提供されているため、Stripe の審査と承認が必要です。アクセスをリクエストするには、treasury-support@stripe.comにメールを送信してください。
アクセスできない場合、同日の ACH の機能またはパラメーターを含む API コールがエラーを返します。
同日の ACH を使用すると、カットオフ時間 までに InboundTransfer
コールが正常に完了した場合、同一営業日内に元の金融口座に売上を入金できます。 同日の ACH を使用するには、origin_
パラメーターを same_
に設定します。
注
ACH インバウンド送金を同日に決済する場合、標準の ACH インバウンド送金に比べ、プラットフォームが大きな財務リスクにさらされる可能性があります。たとえば、連結アカウントが送金を開始しても、送金元口座の残高不足が原因で差戻しが発生したりすることがあります。同日決済では、資金が差戻される前に金融口座から資金が引き出されるため、時間的余裕が多くあります。連結アカウントが資金を引き出し、その後、差戻しによって金融口座の残高がマイナスになった場合は、お客様のプラットフォームがその責任を負います。
InboundTransfer を取得する
GET /v1/treasury/inbound_
を使用し、関連付けられた ID の InboundTransfer
オブジェクトを取得します。
以下の JSON は、リクエストの本文に含めることができるデータを示します。 レスポンスの一部のパラメーターには、expand[]
パラメーターに値として追加した場合にのみ返される追加情報があります。次のレスポンス例で、拡張できるフィールドには、「Expandable」コメントが付いています。オブジェクトレスポンスの拡張の詳細については、レスポンスを拡張するをご覧ください。
{ "id": "{{INBOUND_TRANSFER_ID}}", "object": "inbound_transfer", "livemode": false, "created": "{{Timestamp}}", "financial_account": "{{FINANCIAL_ACCOUNT_ID}}", // Expandable "amount": 1000, "currency": "usd", // The only current valid PaymentMethod type for InboundTransfers is us_bank_account "origin_payment_method": "{{PAYMENT_METHOD_ID}}",
次のリクエストは、id
値が {{INBOUND_
の InboundTransfer
を取得します。本文の expand[]
配列に transaction
を含めると、該当する情報が展開されて返されます。
成功すると、拡張された情報を持つ InboundTransfer
オブジェクトがレスポンスで返されます。
{ "id": "{{INBOUND_TRANSFER_ID}}", "object": "inbound_transfer", "amount": 20000, "created": 1648071297, "currency": "usd", "description": "Inbound transfer", "failure_details": null, "financial_account": "{{FINANCIAL_ACCOUNT_ID}}", "hosted_regulatory_receipt_url": "https://payments.stripe.com/regulatory-receipt/{{INBOUND_TRANSFER_ID}}",
InboundTransfer を一覧表示する
GET /v1/treasury/inbound_
を使用し、関連付けられた ID の金融口座のすべての InboundTransfers
を取得します。標準のリストパラメーターまたは status
でリストをフィルタリングできます。
{ // Standard list parameters "limit", "starting_after", "ending_before", // Filter by status "status": "processing" | "succeeded" | "failed", // Filter by FinancialAccount (Required) "financial_account": "{{FINANCIAL_ACCOUNT_ID}}", // Required }
以下のリクエストは、ID {{CONNECTED_
の連結アカウントに関連付けらた、ID {{FINANCIAL_
の金融口座について、ステータスが succeeded
のインバウンド送金をすべて取得します。
InboundTransfers を手動で確認する
銀行パートナーへの送金を遅らせるか、売上を長期間保留することで、送金のリスクを軽減できます。この保留により、不審なアクティビティを確認するための時間が増える可能性があります。inbound_
の機能へのアクセスをリクエストすると、ステータスが requires_
のインバウンド送金を、この機能が有効になっている金融口座ですべて受け取れるようになります。
以下は、新しい金融口座でこの機能を設定する例です。他の機能を追加することもできます。
以下は、既存の金融口座でこの機能を設定する例です。
通常、インバウンド送金は作成時に自動的に銀行に送金されます。ただし、ステータスが requires_
のインバウンド送金では、銀行パートナーに送金を送信する前に /v1/treasury/inbound_
エンドポイントでユーザーの明示的な確認を取る必要があります。送金を確定またはキャンセルする前に、インバウンド送金の詳細とリスクシグナルを確認できます。ステータスが requires_
のインバウンド送金は、5 営業日以内に確定またはキャンセルしてください。5 営業日を過ぎると、送金は自動的にキャンセルされます。たとえば、金曜日に作成された requires_
のインバウンド送金は、翌週の金曜日までに確定させる必要があります (アメリカで祝日がない場合)。
confirm
エンドポイントで funds_
パラメーターを使用して、目的の金融口座に資金をリリースするまでの遅延時間 (秒単位) を指定します。これにより、追加の遅延を利用して、送金を手動で確認できます。また、このフィールドを使用して、ACH の差戻し期間を過ぎても資金を保持し、元の銀行が遅延後に資金を取り消すことができないようにすることもできます。funds_
を 432,000 に設定して、差戻し期間後に資金がリリースされるようにすると、さらにセキュリティが高まります。
以下は、可用性の遅延なしで confirm
エンドポイントを呼び出す例です。
以下は、可用性の遅延を指定して confirm
エンドポイントを呼び出す例です。
InboundTransfer の状態
以下の表は、各ステータスと可能な移行状態について説明したものです。
ステータス | 説明 | 状態の移行 |
---|---|---|
processing | InboundTransfer の作成に成功しました。Stripe はネットワークでの売上の送金を指示します。 | failed 、canceled 、succeeded 、requires_ |
requires_ | InboundTransfer は保留状態で作成されます。Stripe がネットワーク上で資金の移動を開始していないときは、ユーザーは /v1/treasury/inbound_ エンドポイントを使用してこのインバウンド送金をトリガーする意図を明示する必要があります。 | processing 、canceled |
failed (最終状態) | InboundTransfer の確定に失敗しました。取引は作成されず、payment_ は引き落としされていません。 | 該当なし |
canceled (最終状態) | InboundTransfer はネットワークへの送信前にキャンセルされました。Stripe は取引を無効化し、売上を外部の銀行口座から移動しません。 | 該当なし |
succeeded (最終状態) | InboundTransfer が成功し、資金がアカウントに入金されました。取引が作成されました。外部の口座が資金を引き出した場合、InboundTransfer は成功した後で返金されることがあります。これは、関連付けられた ReceivedDebit によって表されます。 | 該当なし |
InboundTransfer をテストする
実装をエンドツーエンドでテストするには、test SetupIntents requests を使用して PaymentMethod
を作成し、その PaymentMethod
を InboundTransfer
作成リクエストに渡します。PaymentMethods
が有効であれば InboundTransfers
は成功し、無効な PaymentMethods
が無効であれば (サポートされていないタイプ、未確認の銀行口座を含む、インバウンドフロー用に設定されていない、など) 本番環境と同じエラーをスローします。
InboundTransfer の状態をテストする
Stripe では、テスト用の PaymentMethod
トークンのセットも用意しています。これを使用すると、次のような特定の状態の移行をトリガーできます。
PAYMENT_METHOD の値 | 結果 |
---|---|
pm_ | processing から succeeded に移行する InboundTransfer 。 |
pm_ | processing 状態のままの InboundTransfer 。 |
pm_ | processing から failed に移行する InboundTransfer 。 |
さまざまなエッジケースをより迅速にテストするために、PaymentMethod
のトークンは以下の特定の失敗タイプをシミュレーションします。
PAYMENT_METHOD の値 | 結果 |
---|---|
pm_ | failure_ で失敗に移行する InboundTransfer 。 |
pm_ | failure_ で failed に移行する InboundTransfer 。 |
pm_ | failure_ で失敗に移行する InboundTransfer 。 |
pm_ | failure_ で失敗に移行する InboundTransfer 。 |
pm_ | failure_ で失敗に移行する InboundTransfer 。 |
pm_ | processing から succeeded に移行し、後で不審請求の申請が行われる InboundTransfer 。inbound_ が true になり、関連付けられた ReceivedDebit が作成されます |
いずれの場合も、InboundTransfer
のレスポンスは processing
状態で始まります。関連する状態の移行ごとに Webhooks を受信し、InboundTransfer
を作成後に取得すると、想定された状態が返されます。
InboundTransfer テストヘルパーエンドポイント
Stripe では、さまざまな状態の InboundTransfers
をテストできるエンドポイントも提供しています。InboundTransfer
を作成し、以下の手順に従います。
テスト用の
succeed
エンドポイント を使用し、関連付けられた ID の送金を直接succeeded
状態に移行します。POST /v1/test_
helpers/treasury/inbound_ transfers/{{INBOUND_ TRANSFER_ ID}}/succeed テスト用の fail エンドポイント を使用し、関連付けられた ID の送金を直接
failed
の状態に移行します。POST /v1/test_
helpers/treasury/inbound_ transfers/{{INBOUND_ TRANSFER_ ID}}/fail
これらのエンドポイントは、返品などのエラーシナリオをテストするために特に便利です。こういったエンドポイントがなければ、InboundTransfer が資金を引き出していた外部の口座からのアクションが必要になります。
本文にオプションの failure_
パラメーターを含め、送金が失敗した理由を示します。この情報が提供されない場合には、送金はデフォルトの could_
失敗コードで失敗します。
{ "failure_details": { "code": "account_closed" | "account_frozen" | "bank_account_restricted" | "bank_ownership_changed" | "could_not_process" | // Generic fallback code "invalid_account_number" | "incorrect_account_holder_name" | "invalid_currency" | "no_account" } }
Treasury は、成功した後で返金される InboundTransfer をシミュレーションするための return
エンドポイントも提供しています。
テスト用の return エンドポイント を使用し、関連付けられた ID の InboundTransfer
で返金のシミュレーションを開始します。
POST /v1/test_
すべてのテスト用エンドポイントは、該当するそれぞれの状態の移行に対して Webhooks をトリガーします。移行後に InboundTransfer
を取得すると、想定される状態が返されます。
InboundTransfer Webhook
Stripe は、Webhook エンドポイントに以下の InboundTransfer
イベントを送信します。
InboundTransfer
作成時のtreasury.
。inbound_ transfer. created InboundTransfer
のステータスが変化した際のtreasury.
。ステータス値のオプションには以下が含まれます。inbound_ transfer. {{new_ status}} treasury.
inbound_ transfer. succeeded treasury.
inbound_ transfer. failed