# Create an OutboundTransfer object Creates an OutboundTransfer. ## Parameters - `amount` (object, required) The “presentment amount” for the OutboundPayment. - `amount.currency` (string, required) A lowercase alpha3 currency code like “usd”. - `amount.value` (integer, required) In minor units like 123 for 1.23 USD. - `from` (object, required) The FinancialAccount to pull funds from. - `from.currency` (string, required) Describes the FinancialAmount’s currency drawn from. - `from.financial_account` (string, required) The FinancialAccount that funds were pulled from. - `to` (object, required) To which payout method to send the OutboundTransfer. - `to.currency` (string, optional) 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_method` (string, required) The payout method which the OutboundTransfer uses to send payout. - `delivery_options` (object, optional) Delivery options to be used to send the OutboundTransfer. - `delivery_options.bank_account` (enum, optional) 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. - `description` (string, optional) An arbitrary string attached to the OutboundTransfer. Often useful for displaying to users. - `metadata` (map, optional) 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 - `id` (string) Unique identifier for the OutboundTransfer. - `object` (string, 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. - `amount` (object) The “presentment amount” for the OutboundTransfer. - `amount.currency` (string) A lowercase alpha3 currency code like “usd”. - `amount.value` (integer) In minor units like 123 for 1.23 USD. - `cancelable` (boolean) Returns true if the OutboundTransfer can be canceled, and false otherwise. - `created` (timestamp) 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_options` (object, nullable) Delivery options to be used to send the OutboundTransfer. - `delivery_options.bank_account` (enum, nullable) 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. - `description` (string, nullable) An arbitrary string attached to the OutboundTransfer. Often useful for displaying to users. - `expected_arrival_date` (timestamp, nullable) 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. - `from` (object) The FinancialAccount that funds were pulled from. - `from.debited` (object) The monetary amount debited from the sender, only set on responses. - `from.debited.currency` (string) A lowercase alpha3 currency code like “usd”. - `from.debited.value` (integer) In minor units like 123 for 1.23 USD. - `from.financial_account` (string) The FinancialAccount that funds were pulled from. - `livemode` (boolean) Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode. - `metadata` (map, nullable) 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_url` (string, nullable) 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_descriptor` (string) 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. - `status` (enum) 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_details` (object, nullable) Status details for an OutboundTransfer in a `failed` or `returned` state. - `status_details.failed` (object, nullable) The `failed` status reason. - `status_details.failed.reason` (enum) 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.returned` (object, nullable) The `returned` status reason. - `status_details.returned.reason` (enum) 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. - `unknown_failure` Unknown failure. - `status_transitions` (object, nullable) Hash containing timestamps of when the object transitioned to a particular status. - `status_transitions.canceled_at` (timestamp, nullable) 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_at` (timestamp, nullable) 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_at` (timestamp, nullable) 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_at` (timestamp, nullable) 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. - `to` (object) To which payout method the OutboundTransfer was sent. - `to.credited` (object) The monetary amount being credited to the destination. - `to.credited.currency` (string) A lowercase alpha3 currency code like “usd”. - `to.credited.value` (integer) In minor units like 123 for 1.23 USD. - `to.payout_method` (string) The payout method which the OutboundTransfer uses to send payout. - `trace_id` (object) 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.status` (enum) 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.value` (string, nullable) The trace ID value if `trace_id.status` is `supported`, otherwise empty. ## Error Codes | HTTP status code | Code | Description | | ---------------- | ----------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 400 | amount_too_large_for_selected_delivery_option | Error returned when user selected a delivery option but the specified amount exceeds the method limits. | | 400 | card_payout_method_not_supported | Error returned when the provided Card payout method is not eligible for outbound payment or outbound transfer. | | 400 | cop_not_accepted | Error returned when the Confirmation of Payee is not accepted. | | 400 | delivery_option_not_supported | Error returned when the selected delivery option is not supported for the payout method. | | 400 | financial_address_creation_required | Error returned when there is no active financial address required for GB OBPs or OBTs. | | 400 | from_balance_unsupported_currency | Error returned when the balance type in the OutboundPayment/OutboundTransfer request does not support the provided currency. | | 400 | insufficient_funds | Error returned when the balance of provided financial account and balance type in the OutboundPayment/OutboundTransfer request does not have enough funds. | | 400 | invalid_payout_method_country | Error returned when the payout method country does not match the recipient account country. | | 400 | no_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. | | 400 | outbound_flow_from_closed_financial_account_unsupported | The user attempts to create an outbound flow from a closed Financial Account. | | 400 | outbound_transfer_not_allowed | Error returned when the user is not allowed to make this OutboundTransfer request. | | 400 | outbound_transfer_recipient_verification_already_consumed | Error returned when the provided recipient verification has been used for another payment. | | 400 | outbound_transfer_recipient_verification_awaiting_acknowledgement | Error returned when provided recipient verification has not been acknowledged. | | 400 | outbound_transfer_recipient_verification_expired | Error returned when provided recipient verification is expired. | | 400 | outbound_transfer_recipient_verification_missing | Error returned when recipient verification is missing for OBTs which requires recipient verification prior to OBT initiation. | | 400 | outbound_transfer_recipient_verification_payout_method_mismatch | Error returned when payout method on recipient verification creation request don’t match outbound transfer creation request. | | 400 | outbound_transfer_recipient_verification_recipient_mismatch | Error returned when recipient on recipient verification creation request don’t match outbound transfer creation request. | | 400 | outbound_transfer_recipient_verification_recipient_name_outdated | Error returned when the recipient account name of the recipient verification no longer matches the verified name. | | 400 | payout_method_unsupported_currency | Error returned when the payout method does not support the request’s payout method currency. | | 400 | storer_capability_missing | The required storer capabilities are missing. | | 400 | storer_capability_not_active | The required storer capabilities are not active. | | 400 | unsupported_currency | The currency is not supported for Financial Accounts. | | 400 | unsupported_operation_with_managed_financial_account | Creation of an object is not allowed with a managed account. | | 404 | from_balance_type_not_found | Deprecated. Error returned when balance type of provided financial account in the OutboundPayment/OutboundTransfer request cannot be identified. | | 404 | from_financial_account_not_found | Error returned when financial account in the OutboundPayment/OutboundTransfer request cannot be identified. | | 404 | outbound_transfer_recipient_verification_not_found | Error returned when the provided recipient verification cannot be identified. | | 404 | payout_method_invalid | Error returned when the payout method in the OutboundPayment/OutboundTransfer request cannot be identified. | | 409 | idempotency_error | An idempotent retry occurred with different request parameters. | ```curl curl -X POST https://api.stripe.com/v2/money_management/outbound_transfers \ -H "Authorization: Bearer <>" \ -H "Stripe-Version: 2025-11-17.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 ```json { "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 } ```