# Create an Outbound Setup Intent

Create an OutboundSetupIntent object.

## Request

```curl
curl -X POST https://api.stripe.com/v2/money_management/outbound_setup_intents \
  -H "Authorization: Bearer <<YOUR_SECRET_KEY>>" \
  -H "Stripe-Version: 2026-08-26.preview" \
  --json '{
    "payout_method_data": {
        "type": "bank_account",
        "bank_account": {
            "country": "GB",
            "account_number": "00012345",
            "routing_number": "108800"
        }
    }
  }'
```

### Response

```json
{
  "id": "osi_test_61SITWK7KhLsQIGAK16QsOpAPpE97EJALhqt1U5mC4kq",
  "object": "v2.money_management.outbound_setup_intent",
  "created": "2025-04-01T14:13:12.000Z",
  "next_action": {
    "confirmation_of_payee": {
      "object": "core.vault.gb_bank_account",
      "status": "uninitiated"
    },
    "type": "confirmation_of_payee"
  },
  "payout_method": {
    "id": "gbba_test_61SITWKOFwHCpdRSV16QsOpAPpE97EJALhqt1U5mCDyS",
    "object": "v2.money_management.payout_method",
    "available_payout_speeds": [
      "standard"
    ],
    "bank_account": {
      "archived": false,
      "bank_name": "Test Bank",
      "country": "GB",
      "enabled_delivery_options": [
        "local"
      ],
      "last4": "2345",
      "routing_number": "108800",
      "supported_currencies": [
        "gbp"
      ],
      "bank_account_type": "checking"
    },
    "created": "2025-04-01T14:13:12.295Z",
    "latest_outbound_setup_intent": "osi_test_61SITWK7KhLsQIGAK16QsOpAPpE97EJALhqt1U5mC4kq",
    "type": "bank_account",
    "usage_status": {
      "payments": "requires_action",
      "transfers": "eligible"
    },
    "livemode": false
  },
  "status": "requires_action",
  "usage_intent": "payment",
  "livemode": false
}
```

## Parameters

- `payout_method` (string, optional)
  If provided, the existing payout method resource to link to this setup intent. Any payout_method_data provided is used to update information on this linked payout method resource.

- [`payout_method_data`](https://docs.stripe.com/api/v2/money-management/outbound-setup-intents/create.md?query=payout_method_data&api-version=2026-08-26.preview) (object, optional)
  If no payout_method provided, used to create the underlying credential that is set up for outbound money movement. If a payout_method provided, used to update data on the credential linked to this setup intent.

- `usage_intent` (enum, optional)
  Specify which type of outbound money movement this credential should be set up for (payment | transfer). If not provided, defaults to payment.
Possible enum values:
  - `payment`
    Setup for outbound payments.

  - `transfer`
    Setup for outbound transfers.

## Returns

Returns an [Outbound Setup Intent object](https://docs.stripe.com/api/v2/money-management/outbound-setup-intents/object.md?api-version=2026-08-26.preview).

## Error Codes

| HTTP status code | Code | Description |
| --- | --- | --- |
| 400 | active_outbound_setup_intent_exists_for_payout_method | Returned when the outbound setup intent cannot be created for a given payout method because the payout method already has another active outbound setup intent. |
| 400 | apple_pay_invalid_format | Returned when the Apple Pay payment token is malformed or cannot be parsed. |
| 400 | apple_pay_no_signing_key | Returned when the Apple Pay payment token cannot be verified due to a missing signing key. |
| 400 | apple_pay_payment_decryption | Returned when the Apple Pay payment token could not be decrypted. |
| 400 | apple_pay_pk_token_required | Returned when the Apple Pay payment token is absent from the request. |
| 400 | archived_payout_method | Returned when the credential ID provided corresponds to an archived Payout Method. |
| 400 | blocked_payout_method | Returned when the payout method cannot be used due to suspicious activity. |
| 400 | blocked_payout_method_bank_account | Returned when the bank account cannot be added due to previous suspicious activity. |
| 400 | blocked_payout_method_card | Returned in cases where the card cannot be used due to suspicious activity. |
| 400 | blocked_payout_method_crypto_wallet | Returned in cases where the crypto wallet cannot be used due to suspicious activity. |
| 400 | incompatible_payout_method_currency | Returned in cases where the currency provided is incompatible with the payout method. This occurs when the credentials provided do not match with the currency provided. |
| 400 | invalid_fields |  |
| 400 | invalid_payout_method | Returned in cases where the ID provided doesn’t correspond to a valid payout method. |
| 400 | invalid_payout_method_bank_account | Returned in cases where the PayoutMethodBankAccount object provided is not valid (wrong format of credentials that does not correspond to a banking institution). |
| 400 | invalid_payout_method_card | Returned in cases where the PayoutMethodCard object is not valid. |
| 400 | invalid_payout_method_crypto_wallet | Returned in cases where the PayoutMethodCryptoWallet object is not valid. |
| 400 | invalid_payout_method_data | Returned in cases where the PayoutMethod object provided is not valid (wrong format of credentials that does not correspond to a valid payout method). |
| 400 | invalid_payout_method_update | Returned when attempting to update non-updatable credential data. |
| 400 | invalid_status_payout_method | Returned when the credential ID provided corresponds to a resource that does not allow usage as a payout method. |
| 400 | limit_payout_method | Returned when the number of payout methods has exceeded the limit in a given workspace. PayoutMethod objects may be archived with the /archive API, at which point they will not count against the limit. If you are not passing a V2 Account ID in the Stripe-Context header you may receive this error since you are creating all your payout method objects in your own workspace. |
| 400 | limit_payout_method_bank_account | Returned when the number of country bank accounts has exceeded the limit in a given workspace. PayoutMethodBankAccount objects may be archived with the /archive API, at which point they will not count against the limit. If you are not passing a V2 Account ID in the Stripe-Context header you may receive this error since you are creating all your bank account objects in your own workspace. |
| 400 | limit_payout_method_card | Returned when the number of cards has exceeded the limit in a given workspace. PayoutMethodCard objects may be archived with the /archive API, at which point they will not count against the limit. If you are not passing a V2 Account ID in the Stripe-Context header you may receive this error since you are creating all your card objects in your own workspace. |
| 400 | limit_payout_method_crypto_wallet | Returned when the number of crypto wallets has exceeded the limit in a given workspace. PayoutMethodCryptoWallet objects may be archived with the /archive API, at which point they will not count against the limit. If you are not passing a V2 Account ID in the Stripe-Context header you may receive this error since you are creating all your crypto wallet objects in your own workspace. |
| 400 | parameter_pair_exclusive | Two mutually exclusive parameters were provided in the request. |
| 400 | payment_method_unsupported_for_payouts | Returned when the payment method referenced in from_resource is not supported for payouts. |
| 400 | payout_method_cannot_be_updated | Returned when attempting to update a Payout Method controlled by another resource. |
| 400 | resource_not_found | Returned when the request references a resource that cannot be found. |
| 400 | unsupported_payout_method | Returned in cases where Stripe is unable to support this payout method at this time. |
| 400 | unsupported_payout_method_bank_account | Returned in cases where Stripe is unable to support this bank at this time. |
| 400 | unsupported_payout_method_crypto_wallet | Returned in cases where Stripe is unable to support this bank at this time. |
| 400 | unsupported_payout_method_currency | Returned in cases where the currency provided is unsupported for the payout method. This occurs when the currency provided is not supported regardless of the credentials provided. |
| 409 | idempotency_error | An idempotent retry occurred with different request parameters. |
