Create an OutboundTransfer object v2

Money Management
Outbound Transfers
Create an OutboundTransfer object

Creates an OutboundTransfer.

Learn more about calling API v2 endpoints.

Parameters

  • amountobjectRequired

    The “presentment amount” for the OutboundPayment.

    • amount.currencystringRequired

      A lowercase alpha3 currency code like “usd”.

    • amount.valueintegerRequired

      In minor units like 123 for 1.23 USD.

  • fromobjectRequired

    The FinancialAccount to pull funds from.

    • from.currencystringRequired

      Describes the FinancialAmount’s currency drawn from.

    • from.financial_accountstringRequired

      The FinancialAccount that funds were pulled from.

  • toobjectRequired

    To which payout method to send the OutboundTransfer.

    • to.currencystring

      Describes the currency to send to the recipient. If included, this currency must match a currency supported by the destination. Can be omitted in the following cases:

      • destination only supports one currency
      • destination supports multiple currencies and one of the currencies matches the FA currency
      • destination supports multiple currencies and one of the currencies matches the presentment currency Note - when both FA currency and presentment currency are supported, we pick the FA currency to minimize FX.
    • to.payout_methodstringRequired

      The payout method which the OutboundTransfer uses to send payout.

  • delivery_optionsobject

    Delivery options to be used to send the OutboundTransfer.

    • delivery_options.bank_accountenum

      Method for bank account.

      Possible enum values
      automatic

      Method automatically selected by Stripe.

      local

      The group of local bank-transfer networks in the bank account’s country.

      wire

      The group of wire transfer networks in the bank account’s country.

  • descriptionstring

    An arbitrary string attached to the OutboundTransfer. Often useful for displaying to users.

  • metadatamap

    Set of key-value pairs that you can attach to an object. This can be useful for storing additional information about the object in a structured format.

Returns

Response attributes

  • idstring

    Unique identifier for the OutboundTransfer.

  • objectstring, value is "v2.money_management.outbound_transfer"

    String representing the object’s type. Objects of the same type share the same value of the object field.

  • amountobject

    The “presentment amount” for the OutboundTransfer.

    • amount.currencystring

      A lowercase alpha3 currency code like “usd”.

    • amount.valueinteger

      In minor units like 123 for 1.23 USD.

  • cancelableboolean

    Returns true if the OutboundTransfer can be canceled, and false otherwise.

  • createdtimestamp

    Time at which the OutboundTransfer was created. Represented as a RFC 3339 date & time UTC value in millisecond precision, for example: 2022-09-18T13:22:18.123Z.

  • delivery_optionsnullable object

    Delivery options to be used to send the OutboundTransfer.

    • delivery_options.bank_accountnullable enum

      Method for bank account.

      Possible enum values
      automatic

      Method automatically selected by Stripe.

      local

      The group of local bank-transfer networks in the bank account’s country.

      wire

      The group of wire transfer networks in the bank account’s country.

  • descriptionnullable string

    An arbitrary string attached to the OutboundTransfer. Often useful for displaying to users.

  • expected_arrival_datenullable timestamp

    The date when funds are expected to arrive in the payout method. This field is not set if the payout method is in a failed, canceled, or returned state. Represented as a RFC 3339 date & time UTC value in millisecond precision, for example: 2022-09-18T13:22:18.123Z.

  • fromobject

    The FinancialAccount that funds were pulled from.

    • from.debitedobject

      The monetary amount debited from the sender, only set on responses.

      • from.debited.currencystring

        A lowercase alpha3 currency code like “usd”.

      • from.debited.valueinteger

        In minor units like 123 for 1.23 USD.

    • from.financial_accountstring

      The FinancialAccount that funds were pulled from.

  • livemodeboolean

    Has the value true if the object exists in live mode or the value false if the object exists in test mode.

  • metadatanullable map

    Set of key-value pairs that you can attach to an object. This can be useful for storing additional information about the object in a structured format.

  • receipt_urlnullable string

    A link to the Stripe-hosted receipt for this OutboundTransfer. The receipt link remains active for 60 days from the OutboundTransfer creation date. After this period, the link will expire and the receipt url value will be null.

  • statement_descriptorstring

    The description that appears on the receiving end for an OutboundTransfer (for example, bank statement for external bank transfer). It will default to STRIPE if not set on the account settings.

  • statusenum

    Current status of the OutboundTransfer: processing, failed, posted, returned, canceled. An OutboundTransfer is processing if it has been created and is processing. The status changes to posted once the OutboundTransfer has been “confirmed” and funds have left the account, or to failed or canceled. If an OutboundTransfer fails to arrive at its payout method, its status will change to returned.

    Possible enum values
    canceled

    A user canceled the OutboundTransfer before posting. Stripe returns the funds to the user by voiding the pending Transaction.

    failed

    The OutboundTransfer failed to confirm. Stripe returns the funds to the user by voiding the pending Transaction.

    posted

    The OutboundTransfer posted and funds have left the account. The underlying Transaction posts.

    processing

    The OutboundTransfer starting state. Funds are “held” by a pending Transaction (but are still part of the current balance). The OutboundTransfer might be cancelable by the user, depending on the value of the cancelable field.

    returned

    The OutboundTransfer failed to successfully arrive at the destination. Funds return to the user with a second posted Transaction attached to the same flow.

  • status_detailsnullable object

    Status details for an OutboundTransfer in a failed or returned state.

    • status_details.failednullable object

      The failed status reason.

      • status_details.failed.reasonenum

        The failed status reason.

        Possible enum values
        payout_method_declined

        The outbound flow to this payout method was declined.

        payout_method_does_not_exist

        Payout method used for this outbound flow does not exist.

        payout_method_expired

        Payout method used for this outbound flow expired.

        payout_method_unsupported

        Payout method used for this outbound flow is unsupported.

        payout_method_usage_frequency_limit_exceeded

        The usage frequency limit for this payout method was exceeded.

        unknown_failure

        Unknown failure.

    • status_details.returnednullable object

      The returned status reason.

      • status_details.returned.reasonenum

        The returned status reason.

        Possible enum values
        payout_method_canceled_by_customer

        The outbound flow to this payout method was canceled by customer.

        payout_method_closed

        Payout method account used for this outbound flow is closed.

        payout_method_currency_unsupported

        Currency is not supported by the payout method account.

        payout_method_does_not_exist

        Payout method account used for this outbound flow does not exist.

        payout_method_holder_address_incorrect

        Address on the payout method account is incorrect.

        payout_method_holder_details_incorrect

        The payout method account holder’s details are incorrect.

        payout_method_holder_name_incorrect

        Name on the payout method account is incorrect.

        payout_method_invalid_account_number

        The outbound flow to this payout method has an invalid account number.

        payout_method_restricted

        Payout method account used for this outbound flow is restricted.

        recalled

        The outbound flow to this payout method was recalled.

        Show 1 more
  • status_transitionsnullable object

    Hash containing timestamps of when the object transitioned to a particular status.

    • status_transitions.canceled_atnullable timestamp

      Timestamp describing when an OutboundTransfer changed status to canceled. Represented as a RFC 3339 date & time UTC value in millisecond precision, for example: 2022-09-18T13:22:18.123Z.

    • status_transitions.failed_atnullable timestamp

      Timestamp describing when an OutboundTransfer changed status to failed. Represented as a RFC 3339 date & time UTC value in millisecond precision, for example: 2022-09-18T13:22:18.123Z.

    • status_transitions.posted_atnullable timestamp

      Timestamp describing when an OutboundTransfer changed status to posted. Represented as a RFC 3339 date & time UTC value in millisecond precision, for example: 2022-09-18T13:22:18.123Z.

    • status_transitions.returned_atnullable timestamp

      Timestamp describing when an OutboundTransfer changed status to returned. Represented as a RFC 3339 date & time UTC value in millisecond precision, for example: 2022-09-18T13:22:18.123Z.

  • toobject

    To which payout method the OutboundTransfer was sent.

    • to.creditedobject

      The monetary amount being credited to the destination.

      • to.credited.currencystring

        A lowercase alpha3 currency code like “usd”.

      • to.credited.valueinteger

        In minor units like 123 for 1.23 USD.

    • to.payout_methodstring

      The payout method which the OutboundTransfer uses to send payout.

  • trace_idobjectPreview feature

    A unique identifier that can be used to track this OutboundTransfer with recipient bank. Banks might call this a “reference number” or something similar.

    • trace_id.statusenum

      Possible values are pending, supported, and unsupported. Initially set to pending, it changes to supported when the recipient bank provides a trace ID, or unsupported if the recipient bank doesn’t support it. Note that this status may not align with the OutboundPayment or OutboundTransfer status and can remain pending even after the payment or transfer is posted.

      Possible enum values
      pending

      Pending to receive TraceId information from recipient bank.

      supported

      TraceId is supported by the recipient bank.

      unsupported

      TraceId is not supported by the recipient bank.

    • trace_id.valuenullable string

      The trace ID value if trace_id.status is supported, otherwise empty.

Error Codes
400amount_too_large_for_selected_delivery_option

Error returned when user selected a delivery option but the specified amount exceeds the method limits.

400card_payout_method_not_supported

Error returned when the provided Card payout method is not eligible for outbound payment or outbound transfer.

400cop_not_accepted

Error returned when the Confirmation of Payee is not accepted.

400delivery_option_not_supported

Error returned when the selected delivery option is not supported for the payout method.

400financial_address_creation_required

Error returned when there is no active financial address required for GB OBPs or OBTs.

400from_balance_unsupported_currency

Error returned when the balance type in the OutboundPayment/OutboundTransfer request does not support the provided currency.

400insufficient_funds

Error returned when the balance of provided financial account and balance type in the OutboundPayment/OutboundTransfer request does not have enough funds.

400invalid_payout_method_country

Error returned when the payout method country does not match the recipient account country.

400no_suitable_delivery_options_for_large_amount

Error returned when user does not specify the delivery option or provides automatic, and the amount exceeds all the possible delivery options for this payout method.

400outbound_flow_from_closed_financial_account_unsupported

The user attempts to create an outbound flow from a closed Financial Account.

400outbound_transfer_not_allowed

Error returned when the user is not allowed to make this OutboundTransfer request.

400outbound_transfer_recipient_verification_already_consumed

Error returned when the provided recipient verification has been used for another payment.

400outbound_transfer_recipient_verification_awaiting_acknowledgement

Error returned when provided recipient verification has not been acknowledged.

400outbound_transfer_recipient_verification_expired

Error returned when provided recipient verification is expired.

400outbound_transfer_recipient_verification_missing

Error returned when recipient verification is missing for OBTs which requires recipient verification prior to OBT initiation.

400outbound_transfer_recipient_verification_payout_method_mismatch

Error returned when payout method on recipient verification creation request don’t match outbound transfer creation request.

400outbound_transfer_recipient_verification_recipient_mismatch

Error returned when recipient on recipient verification creation request don’t match outbound transfer creation request.

400outbound_transfer_recipient_verification_recipient_name_outdated

Error returned when the recipient account name of the recipient verification no longer matches the verified name.

400payout_method_unsupported_currency

Error returned when the payout method does not support the request’s payout method currency.

400storer_capability_missing

The required storer capabilities are missing.

400storer_capability_not_active

The required storer capabilities are not active.

400unsupported_currency

The currency is not supported for Financial Accounts.

400unsupported_operation_with_managed_financial_account

Creation of an object is not allowed with a managed account.

404from_balance_type_not_found

Deprecated. Error returned when balance type of provided financial account in the OutboundPayment/OutboundTransfer request cannot be identified.

404from_financial_account_not_found

Error returned when financial account in the OutboundPayment/OutboundTransfer request cannot be identified.

404outbound_transfer_recipient_verification_not_found

Error returned when the provided recipient verification cannot be identified.

404payout_method_invalid

Error returned when the payout method in the OutboundPayment/OutboundTransfer request cannot be identified.

409idempotency_error

An idempotent retry occurred with different request parameters.

POST /v2/money_management/outbound_transfers
curl -X POST https://api.stripe.com/v2/money_management/outbound_transfers \
-H "Authorization: Bearer sk_test_BQokikJ...2HlWgH4olfQ2sk_test_BQokikJOvBiI2HlWgH4olfQ2" \
-H "Stripe-Version: 2025-10-29.preview" \
--json '{
"from": {
"financial_account": "fa_test_65NybHaQx7KJxDc22rZ16NybHIZ4SQ3LORe4rpuNGDIXEO",
"currency": "usd"
},
"to": {
"payout_method": "usba_test_61NyccB7UY8KzlWh916NybHIZ4SQ3LORe4rpuNGDIRWC",
"currency": "usd"
},
"amount": {
"value": 50,
"currency": "usd"
},
"description": "Paying out Stripe earnings"
}'
Response
{
"id": "obt_test_65OAfYe4XKyMwZeHlcV16NybHIZ4SQ3LORe4rpuNGDIRZw",
"object": "v2.money_management.outbound_transfer",
"from": {
"financial_account": "fa_test_65NybHaQx7KJxDc22rZ16NybHIZ4SQ3LORe4rpuNGDIXEO",
"debited": {
"value": 50,
"currency": "usd"
}
},
"to": {
"credited": {
"value": 50,
"currency": "usd"
},
"payout_method": "usba_test_61NyccB7UY8KzlWh916NybHIZ4SQ3LORe4rpuNGDIRWC"
},
"delivery_options": {
"bank_account": "automatic"
},
"amount": {
"value": 50,
"currency": "usd"
},
"statement_descriptor": "Stripe payout",
"cancelable": true,
"description": "Paying out Stripe earnings",
"status": "processing",
"status_transitions": {
"canceled_at": null,
"failed_at": null,
"posted_at": null,
"returned_at": null
},
"status_details": null,
"created": "2023-04-26T23:18:16.777Z",
"expected_arrival_date": "2023-04-28T00:00:00Z",
"receipt_url": "https://payments.stripe.com/transaction_receipt/CCMaIwohd2tzcF90ZXN0XzZOeWJISVo0U1EzTE9SZTRycHVOR0RJKLjipqIGMgYk_Zatd6o6SJTkdgTDenznPtxy9kHSWhpBX0QEYqbR8_OPno6qVa79eu4rNCFiXFjzwfzKlMF16O028YAwyJ2T1sRMDLkbsqtVSR5r4dV-nw",
"livemode": false
}