# Create an OutboundSetupIntent object

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: 2025-10-29.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=2025-10-29.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

## Response attributes

- `id` (string)
  ID of the outbound setup intent.

- `object` (string, value is "v2.money_management.outbound_setup_intent")
  String representing the object’s type. Objects of the same type share the same value of the object field.

- `created` (timestamp)
  Created timestamp.

- `livemode` (boolean)
  Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode.

- [`next_action`](https://docs.stripe.com/api/v2/money-management/outbound-setup-intents/create.md?query=next_action&api-version=2025-10-29.preview) (object, nullable)
  Specifies which actions needs to be taken next to continue setup of the credential.

- [`payout_method`](https://docs.stripe.com/api/v2/money-management/outbound-setup-intents/create.md?query=payout_method&api-version=2025-10-29.preview) (object)
  Information about the payout method that’s created and linked to this outbound setup intent.

- `status` (enum)
  Status of the outbound setup intent.
Possible enum values:
  - `canceled`
    The user may cancel the outbound setup intent at any time prior to reaching the succeeded status. The outbound setup intent will no longer be usable. This is a terminal status.

  - `requires_action`
    Some additional setup steps need to be done to fully set up the credential for the specified usage intent. Additional steps are specified in next_action.

  - `requires_payout_method`
    When the outbound setup intent is created, it begins in this status if no payout_method_data is provided. The outbound setup intent will also transition back to this status if a setup failure occurs. The user will then need to provide new payout_method_data to continue.

  - `succeeded`
    If no additional setup actions need to be done i.e. credential is fully set up for the specified usage intent. This is a terminal status.

- `usage_intent` (enum)
  The intended money movement flow this payout method should be set up for, specified in params.
Possible enum values:
  - `payment`
    Setup for outbound payments.

  - `transfer`
    Setup for outbound transfers.

## 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 | 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 | 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_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_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 | 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. |
| 409 | idempotency_error | An idempotent retry occurred with different request parameters. |
