# Create recipients

Learn how to create a recipient for your payout.

A recipient is the person or business you’re paying. You need to create a recipient before you can send them a payout. After you create a recipient, you can reuse their information for future payouts.

## Collect recipient information

You can have the recipient enter their own information, or you can provide it to Stripe yourself. Both options work in the Dashboard and with the API.

- **Let Stripe handle recipient onboarding**: The recipient enters their details in a secure, co-branded form that Stripe hosts, and Stripe handles sensitive bank data and identity verification. In the Dashboard, send the recipient a link or use **Pay via email**. With the API, redirect them with an Account Link.
- **Control recipient onboarding**: You collect the recipient’s details and provide them to Stripe. In the Dashboard, enter the details yourself. With the API, collect them in your own UI and submit them with the Accounts API.

Requirements vary. See [recipient requirements](https://docs.stripe.com/global-payouts/recipient-requirements.md) for the full list of supported countries and requirements, by business type and payout method.

|  | Stripe-hosted onboarding | Your own onboarding |
| --- | --- | --- |
| **Branding and localization** | Co-branded with your business name, logo, and colors, and automatically localized | Full control over the UI, but no automatic localization |
| **Automatic updates for new compliance requirements** | Immediate | Requires you to collect more information, and integration changes if you use the API |
| **Supports new countries without changes** | Yes, automatically | In the Dashboard only. API integrations require changes. |
| **Flow logic** | Limited control | Full control |

## Create a recipient 

#### Dashboard

To create a recipient in the Dashboard:

1. Go to **Treasury** > **Payouts** > [Recipients](https://dashboard.stripe.com/global-payouts/recipients), then click **Add recipient**.
2. Enter the recipient’s email and country. You can also add a name to help you find the recipient later.
3. Choose how you want to collect the recipient’s information. See [recipient requirements](https://docs.stripe.com/global-payouts/recipient-requirements.md) for the information you need to collect.
   - Select **Pay via email** to have Stripe email the recipient a link to a Stripe-hosted form where they enter their own details.
   - Send the link to the Stripe-hosted form to the recipient yourself.
   - Enter the recipient’s information yourself.
4. (Optional) Update the payout methods you want to enable for the recipient. After the recipient is created, you can also update payout methods from **Recipient details** > **Payout methods**.
5. Click **Continue**, or click **Send email** if you selected **Pay via email**.

The link expires after 3 days, after it’s opened twice, or when the recipient completes the form, whichever comes first.

For compliance reasons, you can’t enter a recipient’s debit card information manually. Dashboard recipient creation supports only bank accounts and crypto wallets.

> #### Pay via email considerations
> 
> - Pay via email doesn’t support cross-border payouts. The sender and recipient must be in the same country.
> - Pay via email isn’t available in the EU due to [Verification of Payee regulation](https://support.stripe.com/questions/verification-of-payee-support-for-financial-accounts).

### Customize the collection form

To customize the Stripe-hosted form that recipients use when you select **Pay via email** or send them a link, add your business name, color, and icon to your [branding settings](https://dashboard.stripe.com/settings/branding) in the Dashboard.

### Confirm recipient is enabled 

After you create a recipient, confirm that they’re ready to receive payouts:

1. Go to [Recipients](https://dashboard.stripe.com/global-payouts/recipients) and select the recipient.
2. Confirm that no additional information is required. A banner on the page displays if Stripe requires additional information from the recipient (for example, “Information needed” or “Default bank account not set”). Otherwise, the recipient’s information collection is complete.
3. Confirm that at least one payout method is enabled under **Payout methods**. If not, add one from **Recipient details** > **Payout methods**.

#### API

Use the API to create recipients, then collect their information with a Stripe-hosted form or in your own UI.

### Use API keys

Sandbox secret keys work with the Global Payouts APIs, but full-access secret keys (`sk_live_...`) don’t work in live mode. For live requests, use a [restricted API key](https://docs.stripe.com/keys/restricted-api-keys.md). For a standard integration, [create one in the Dashboard](https://dashboard.stripe.com/apikeys/create) with these permissions:

- `Recipient Configuration: Write`
- `Money Management Financial Accounts: Read`
- `Money Management Payout Methods: Write`
- `Money Management Outbound Payments: Write`
- `Money Management Payout Intents: Write`

### Create the recipient account 

A recipient is a v2 [Account](https://docs.stripe.com/api/v2/core/accounts.md) configured with recipient capabilities. The API refers to recipients as `Account` objects throughout.

Use the [Accounts API](https://docs.stripe.com/api/v2/core/accounts/create.md) to create a recipient. You must provide the following parameters to create the `Account`:

| Required information | Parameter |
| --- | --- |
| Recipient’s country | `identity.country` |
| Recipient’s type of business | `identity.entity_type` |
| Recipient’s email | `contact_email` |
| Display name (shown in the Dashboard) | `display_name` |
| Capabilities you want to enable | `configuration.recipient.capabilities` |

You must specify your intended payout method types by requesting the corresponding [capabilities](https://docs.stripe.com/global-payouts/recipient-creation.md#capabilities) when you [create the Account](https://docs.stripe.com/api/v2/core/accounts/create.md#v2_create_accounts-configuration-recipient-capabilities).

Some capabilities require additional information about your recipient, such as their name and date of birth. After you request capabilities, the API response lists the information required to activate them in the [requirements.entries](https://docs.stripe.com/api/v2/core/accounts/create.md#v2_create_accounts-response-requirements-entries) array. To receive the requirements in the response, include `requirements`, `configuration.recipient`, and `identity` in the `include` array. Otherwise, Stripe returns `null` for those properties, regardless of their actual values.

The following example requests the `bank_accounts.ach` capability for a US recipient:

```curl
curl -X POST https://api.stripe.com/v2/core/accounts \
  -H "Authorization: Bearer <<YOUR_SECRET_KEY>>" \
  -H "Stripe-Version: 2026-10-28.endive" \
  --json '{
    "contact_email": "jenny.rosen@example.com",
    "display_name": "Jenny Rosen",
    "identity": {
        "country": "us",
        "entity_type": "individual"
    },
    "configuration": {
        "recipient": {
            "capabilities": {
                "bank_accounts": {
                    "ach": {
                        "requested": true
                    }
                }
            }
        }
    },
    "include": [
        "identity",
        "configuration.recipient",
        "requirements"
    ]
  }'
```

### Capabilities

To request a capability, set the `requested` parameter in its hash to `true`. Capabilities are based on the following concepts:

- **Payout method**: The type of destination for a payout, such as a bank account, debit card, or crypto wallet.
- **Banking rail**: For bank account payout methods, the specific payment network used to move money (for example, ACH, FPS, or SEPA). A single bank account payout method can support multiple rails.
- **Capability**: A setting on a recipient account that enables a specific payout method or rail. Requesting a capability (for example, `bank_accounts.ach`) begins onboarding for that method. The capability must become `active`, and the recipient must have a corresponding payout method, before you can send payouts using it.

Bank accounts have one capability for each supported banking rail:

| Banking rail | Capability | Description |
| --- | --- | --- |
| ACH (US) | `configuration.recipient.capabilities.bank_accounts.ach` | Allows the `Account` to receive payouts over the ACH network. |
| Fedwire (US) | `configuration.recipient.capabilities.bank_accounts.fedwire` | Allows the `Account` to receive payouts over the Fedwire network. |
| FPS (UK) | `configuration.recipient.capabilities.bank_accounts.fps` | Allows the `Account` to receive payouts over the Faster Payments Service. |
| SEPA (Eurozone) | `configuration.recipient.capabilities.bank_accounts.sepa` | Allows the `Account` to receive payouts over the SEPA Credit Transfer network. |
| Local (cross-border) | `configuration.recipient.capabilities.bank_accounts.local` | Allows the `Account` to receive cross-border payouts over local bank networks. |
| SWIFT (cross-border) | `configuration.recipient.capabilities.bank_accounts.swift` | Allows the `Account` to receive cross-border payouts over the SWIFT network. |

Debit cards and crypto wallets each have a single capability:

| Payout method | Capability | Description |
| --- | --- | --- |
| Debit card | `configuration.recipient.capabilities.cards` | Allows the `Account` to receive payouts over debit card networks, such as Visa Direct or Mastercard Send. |

A recipient can have multiple payout methods of different types. Which payout method types are available depends on the recipient’s country. See the full list of [available payout methods by country](https://docs.stripe.com/global-payouts/recipient-requirements.md#requirements).

### Collect the recipient’s information 

After you create the recipient, collect their information with a Stripe-hosted form or in your own UI.

#### Stripe-hosted onboarding

Use the [Account Links API](https://docs.stripe.com/api/v2/core/account-links.md) to redirect recipients from your website or app to Stripe-hosted forms that collect their information. To send recipients a link by email instead, use the [Dashboard](https://docs.stripe.com/global-payouts/recipient-creation.md?dashboard-or-api=dashboard#create-recipients-with-no-code).

Stripe-hosted forms render dynamically based on the capabilities, country, and payout methods for each recipient. Your recipients complete the hosted form and submit required details, including payout method details (for example, bank account and routing number) directly to Stripe. To customize the form, add your business name, color, and icon to your [branding settings](https://dashboard.stripe.com/settings/branding) in the Dashboard.

#### Supported browsers

Stripe-hosted collection supports these desktop and mobile browsers:

- The last 20 major versions of Chrome and Firefox
- The last 2 major versions of Safari and Edge
- The last 2 major versions of mobile Safari on iOS

Stripe-hosted collection isn’t supported in iframes. Redirect recipients to the Account Link URL in a browser tab or window.

#### Redirect the recipient to the collection form

Use the [Account Links API](https://docs.stripe.com/api/v2/core/account-links/create.md) to create a single-use URL, then redirect your recipient to it from your website or app. By default, each `AccountLink` URL expires 5 minutes after you create it. Use the response’s `expires_at` value to determine when the link expires. Create the link only when your recipient is ready to fill in the form. Because the link is single-use and expires quickly, don’t send it by email or message. Authenticate the recipient in your application before you redirect them.

If your recipient opens an expired or already-used `AccountLink`, Stripe redirects them to your `refresh_url`. Your `refresh_url` page must authenticate the recipient before it creates a new `AccountLink` and redirects them to it. After your recipient completes or leaves the form, Stripe redirects them to your `return_url`.

> Interested in verifying your recipients? After recipients share their payout method details in Stripe-hosted forms, use the [Financial Connections API](https://docs.stripe.com/financial-connections/ownership.md) to view and confirm the ownership details associated with the linked account. If you’re interested in getting access, [enter your email](https://docs.stripe.com/global-payouts/recipient-creation.md#financial_connections_payouts_preview).

### Interested in verifying your recipients?

Enter your email to request access.

```bash
curl https://docs.stripe.com/preview/register \
  -X POST \
  -H "Content-Type: application/json" \
  -H "Referer: https://docs.stripe.com/global-payouts/recipient-creation" \
  -d '{"email": "EMAIL", "preview": "financial_connections_payouts_preview"}'
```

To create an `AccountLink`, include the following parameters:

- `account`: The recipient’s account ID, which you can get using the [Accounts v2 API](https://docs.stripe.com/api/v2/core/accounts.md)
- `use_case.type`: If you’re collecting the recipient’s information for the first time, specify `account_onboarding`.
- `use_case.account_onboarding.return_url`: The page Stripe redirects the recipient to when they complete or leave the information collection form.
- `use_case.account_onboarding.refresh_url`: The page Stripe redirects the recipient to when the `AccountLink` has already been visited, has expired, or is otherwise invalid.

The following request creates an `AccountLink` for purposes of collecting a recipient’s information for the first time:

```curl
curl -X POST https://api.stripe.com/v2/core/account_links \
  -H "Authorization: Bearer <<YOUR_SECRET_KEY>>" \
  -H "Stripe-Version: 2026-10-28.endive" \
  --json '{
    "account": "{{CONNECTEDACCOUNT_ID}}",
    "use_case": {
        "type": "account_onboarding",
        "account_onboarding": {
            "return_url": "https://example.com/return",
            "refresh_url": "https://example.com/reauth"
        }
    }
  }'
```

> Interested in additional authentication tools? Stripe also offers a one-time passcode feature to reauthenticate your recipient by sending an authentication code to their email, and then redirecting them to a new `AccountLink`. If you’re interested in getting access, [enter your email](https://docs.stripe.com/global-payouts/recipient-creation.md#authentication_tools_payouts_preview).

### Interested in additional authentication tools?

Enter your email to request access.

```bash
curl https://docs.stripe.com/preview/register \
  -X POST \
  -H "Content-Type: application/json" \
  -H "Referer: https://docs.stripe.com/global-payouts/recipient-creation" \
  -d '{"email": "EMAIL", "preview": "authentication_tools_payouts_preview"}'
```

#### Make updates to an existing recipient

You can allow recipients to update their information in the Stripe-hosted form by redirecting them to a new `AccountLink` from the [Account Links API](https://docs.stripe.com/api/v2/core/account-links.md).

To create the `AccountLink`, include:

- `account`: The recipient’s account ID, which you can get using the [Accounts v2 API](https://docs.stripe.com/api/v2/core/accounts.md)
- `use_case.type`: Specify `account_update`.
- `use_case.account_update.return_url`: The page Stripe redirects the recipient to when they’ve completed or left the information collection form.
- `use_case.account_update.refresh_url`: The page Stripe redirects the recipient to after the `AccountLink` has already been visited, has expired, or is otherwise invalid.

```curl
curl -X POST https://api.stripe.com/v2/core/account_links \
  -H "Authorization: Bearer <<YOUR_SECRET_KEY>>" \
  -H "Stripe-Version: 2026-10-28.endive" \
  --json '{
    "account": "{{CONNECTEDACCOUNT_ID}}",
    "use_case": {
        "type": "account_update",
        "account_update": {
            "return_url": "https://example.com/return",
            "refresh_url": "https://example.com/reauth"
        }
    }
  }'
```

Like the `AccountLink` you use to create a recipient, this URL is single-use and expires after 5 minutes by default.

#### Your own onboarding

Collect recipient and payout information directly in your own UI, and then pass that information to Stripe through the API.

#### Determine required fields to activate a recipient

[Retrieve the recipient’s Account](https://docs.stripe.com/api/v2/core/accounts/retrieve.md) with `requirements` in the `include` array to determine which information you need to collect. If you omit `requirements` from `include`, the response returns `null` for that property.

```curl
curl -G https://api.stripe.com/v2/core/accounts/{{CONNECTEDACCOUNT_ID}} \
  -H "Authorization: Bearer <<YOUR_SECRET_KEY>>" \
  -H "Stripe-Version: 2026-10-28.endive" \
  -d "include[0]=requirements"
```

Inspect the `requirements.entries` array in the response. To activate the recipient’s requested payout capabilities, provide the information identified by entries whose `impact.restricts_capabilities` array is non-empty.

#### Submit recipient information to Stripe

After you collect the required information, use the [Accounts API](https://docs.stripe.com/api/v2/core/accounts/update.md) to submit it.

```curl
curl -X POST https://api.stripe.com/v2/core/accounts/{{CONNECTEDACCOUNT_ID}} \
  -H "Authorization: Bearer <<YOUR_SECRET_KEY>>" \
  -H "Stripe-Version: 2026-10-28.endive" \
  --json '{
    "identity": {
        "country": "us",
        "entity_type": "individual",
        "individual": {
            "given_name": "Jenny",
            "surname": "Rosen",
            "address": {
                "city": "Brothers",
                "country": "US",
                "line1": "27 Fredrick Ave",
                "postal_code": "97712",
                "state": "OR"
            }
        }
    },
    "include": [
        "identity"
    ]
  }'
```

#### Create payout methods for your recipients

After you create the recipient `Account` and submit their information, add their payout method details. Use the [Outbound Setup Intents API](https://docs.stripe.com/api/v2/money-management/outbound-setup-intents/create.md) to create the recipient’s [PayoutMethod](https://docs.stripe.com/api/v2/money-management/payout-methods.md).

The bank account details you need vary by country. To find out which details to collect, use the [Payout Methods Bank Account Spec API](https://docs.stripe.com/api/v2/money-management/payout-methods-bank-account-specs/retrieve.md) with the recipient’s country in `countries`. The response lists the required fields for each country and their validation rules.

```curl
curl -G https://api.stripe.com/v2/money_management/payout_methods_bank_account_spec \
  -H "Authorization: Bearer <<YOUR_SECRET_KEY>>" \
  -H "Stripe-Version: 2026-10-28.endive" \
  -d "countries[0]=GB"
```

When you create the `OutboundSetupIntent`, the Stripe-Context header must be the recipient’s `Account` ID.

```curl
curl -X POST https://api.stripe.com/v2/money_management/outbound_setup_intents \
  -H "Authorization: Bearer <<YOUR_SECRET_KEY>>" \
  -H "Stripe-Version: 2026-10-28.endive" \
  -H "Stripe-Context: {{CONTEXT_ID}}" \
  --json '{
    "payout_method_data": {
        "type": "bank_account",
        "bank_account": {
            "country": "US",
            "currency": "usd",
            "account_number": "000123456789",
            "routing_number": "110000000"
        }
    }
  }'
```

> The `OutboundSetupIntent` response contains the [PayoutMethod](https://docs.stripe.com/api/v2/money-management/outbound-setup-intents/create.md#v2_create_outbound_setup_intents-response-payout_method). When you create a PayoutIntent or an OutboundPayment, use the `PayoutMethod` ID (for example, `usba_test_...`), not the `OutboundSetupIntent` ID (`osi_test_...`).

To send payouts through Fedwire, use the [US Bank Accounts API](https://docs.stripe.com/api/v2/core/vault/us-bank-accounts/update.md) to add the `fedwire_routing_number` to the `PayoutMethod`.

You can also use debit cards as a payout method. However, your recipients must submit their debit card information directly to Stripe. If you’re interested in enabling payouts by debit cards, use the [Account Links API](https://docs.stripe.com/api/v2/core/account-links.md) to redirect your recipient to a Stripe-hosted form where they submit their debit card details. For the full walkthrough of this collection flow, see the **Stripe-hosted onboarding** tab in [Collect the recipient’s information](https://docs.stripe.com/global-payouts/recipient-creation.md#collect-information).

### Confirm recipient is enabled

Stripe verifies capabilities asynchronously, so a capability might not be `active` immediately after you submit the recipient’s information. Its status can also change later, for example if Stripe requires more information from the recipient. Listen for the [v2.core.account[configuration.recipient].capability_status_updated](https://docs.stripe.com/api/v2/core/accounts/event-types.md#v2_accounts_event_types-v2.core.account%5Bconfiguration.recipient%5D.capability_status_updated) webhook to learn when a capability’s status changes. Learn more about [webhooks and how to handle them](https://docs.stripe.com/webhooks.md).

If you use a Stripe-hosted form, Stripe also sends the [v2.core.account_link.returned](https://docs.stripe.com/api/v2/core/events/event-types.md#v2_event_types-v2.core.account_link.returned) event after the recipient submits the required information. This event tells you that the recipient finished the form, but their capabilities might still be verifying.

[Retrieve the Account](https://docs.stripe.com/api/v2/core/accounts/retrieve.md) and inspect the `status` of the [capabilities](https://docs.stripe.com/global-payouts/recipient-creation.md#capabilities) you’ve requested. A capability’s `status` must be `active` for the recipient to be eligible to receive payouts by that payout method type. You must also confirm that a specific payout method of that type (for example, a bank account) is attached to the `Account` before you send funds to it. See [View all payout methods for a recipient](https://docs.stripe.com/global-payouts/recipient-creation.md#view-all-payout-methods-for-a-recipient).

```curl
curl -G https://api.stripe.com/v2/core/accounts/{{CONNECTEDACCOUNT_ID}} \
  -H "Authorization: Bearer <<YOUR_SECRET_KEY>>" \
  -H "Stripe-Version: 2026-10-28.endive" \
  -d "include[0]=identity" \
  -d "include[1]=configuration.recipient" \
  -d "include[2]=defaults"
```

### View all payout methods for a recipient

Use the Payout Methods API to [retrieve a recipient’s PayoutMethods](https://docs.stripe.com/api/v2/money-management/payout-methods/list.md).

The Stripe-Context header in this request must be the recipient’s `Account` ID.

```curl
curl https://api.stripe.com/v2/money_management/payout_methods \
  -H "Authorization: Bearer <<YOUR_SECRET_KEY>>" \
  -H "Stripe-Version: 2026-10-28.endive" \
  -H "Stripe-Context: {{CONTEXT_ID}}"
```

The response contains a list of `PayoutMethod` objects associated with the recipient. Use a `PayoutMethod` ID to send a payout using the [Payout Intents API](https://docs.stripe.com/api/v2/money-management/payout-intents/create.md) or the [Outbound Payments API](https://docs.stripe.com/api/v2/money-management/outbound-payments/create.md). See [Send payouts](https://docs.stripe.com/global-payouts/send-money.md) for more details.

### Set a default payout method for a recipient

You can optionally set a recipient’s default payout method for one or more currencies. Stripe uses the default payout method for a currency if you create a payout in that currency without specifying a `PayoutMethod`. If you specify a `PayoutMethod`, it overrides the default.

Update the recipient `Account` by adding one or more payout methods to its [defaults.payout_methods](https://docs.stripe.com/api/v2/core/accounts/update.md#v2_update_accounts-defaults-payout_methods). This property is a map keyed by lowercase ISO currency code, where each value is a `PayoutMethod` ID owned by the recipient.

```curl
curl -X POST https://api.stripe.com/v2/core/accounts/{{CONNECTEDACCOUNT_ID}} \
  -H "Authorization: Bearer <<YOUR_SECRET_KEY>>" \
  -H "Stripe-Version: 2026-10-28.endive" \
  --json '{
    "defaults": {
        "payout_methods": {
            "usd": "usba_test_..."
        }
    },
    "include": [
        "defaults"
    ]
  }'
```

The response returns the updated `Account` with the default payout method set for each currency you provided.

```json
{
  "id": "{{CONNECTED_ACCOUNT_ID}}",
  "object": "v2.core.account",
  "defaults": {
    "payout_methods": {
      "usd": "usba_test_..."
    }
  }
  . . .
}
```

## Considerations

Your business is responsible for all interactions with your recipients and for collecting all the necessary information to verify them. Stripe updates recipient verification requirements as laws and regulations change around the world.

Plan to review and update onboarding requirements on a regular basis to avoid payout failures. To learn when a recipient needs to provide more information, listen for the [v2.core.account[requirements].updated](https://docs.stripe.com/api/v2/core/accounts/event-types.md#v2_accounts_event_types-v2.core.account%5Brequirements%5D.updated) webhook.
