# Send money

Learn how to send money in local currency to recipients in more than 160 countries and domestically.

You can use the Dashboard or the API to send payouts. Speed and cost of [payout methods](https://docs.stripe.com/global-payouts/payout-methods.md) vary.

## Before you begin

- Make sure you have access to [Treasury](https://docs.stripe.com/treasury.md).
- Activate a financial account.
- [Add funds to the financial account](https://docs.stripe.com/treasury/add-funds.md).
- [Create recipients](https://docs.stripe.com/global-payouts/recipient-creation.md) and select their payout methods.

### Interested in getting early access to cross-border payouts?

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/send-money" \
  -d '{"email": "EMAIL", "preview": "cross_border_payouts_preview"}'
```

#### Dashboard

To send payouts to recipients directly from the Dashboard:

1. Go to Treasury > **[Payouts](https://dashboard.stripe.com/global-payouts/payouts)**.
2. Click **Send money**.
3. Search and choose from the recipient list, or click **Add new recipient**. Click **Continue**.
4. Choose the amount you want to send.
   - If you’re sending a cross-border payout and converting currencies, you can specify either the sending amount or the amount the recipient receives in the local currency.
5. Choose the payout method you want to use.
6. (Optional) You can add an internal note to reference when managing payouts. Notes are visible only to you and limited to 50 characters.
7. (Optional) If you want Stripe to send a confirmation email to your recipients on your behalf, select the box.
8. Click **Review**, then review the details and click **Send**.
   - If you’re sending a cross-border payout and converting currencies, the exchange rate might be updated. If so, the updated rate and the estimated payout amount and fees are shown. The rate on the review page is the finalized rate.

After you send the payout to the recipient, track your payout status on the [Payouts](https://dashboard.stripe.com/global-payouts/payouts) page. See [Monitor and manage payouts](https://docs.stripe.com/global-payouts/manage-payouts.md#view-payout-status) for more detail on payout statuses and how to view them.

## Schedule payouts (Public preview)

In the Dashboard, you can schedule payouts to be sent up to 180 days in the future. Stripe doesn’t hold funds for a scheduled payout. If there are insufficient funds on the scheduled payout date, the payout fails and you receive an email.

[Contact support](https://support.stripe.com/) to get access to this preview feature.

To schedule a future payout:

1. After clicking **Send money** and selecting the payout amount and recipient, click the calendar icon (:calendar:) in the **When** field.
2. In the calendar, select the date on which to send the payout.
3. Click **Continue**. After reviewing the payout details, click **Schedule**.

To view your scheduled payouts, go to the [Scheduled](https://dashboard.stripe.com/global-payouts/payouts?status%5B0%5D=pending&type%5B0%5D=payout_intent) tab.

#### API

You can send payouts using the OutboundPayments API, or the PayoutIntents API. PayoutIntents are in private preview. [Request access.](https://docs.stripe.com/global-payouts/send-money.md#payout_intents_preview)

### Interested in getting access to PayoutIntents?

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/send-money" \
  -d '{"email": "EMAIL", "preview": "payout_intents_preview"}'
```

With the OutboundPayments API, you choose the specific banking rail for each payout attempt, and you’re responsible for handling retries, rerouting, and any pre-payout compliance checks yourself.

If you have access to the PayoutIntents private preview, it guides you through selecting a payout method, lets you preview fees and timing before you send money, and automatically retries or reroutes a payout if the first attempt fails.

This guide covers both APIs and calls out where PayoutIntents-specific steps differ.

## Use API keys

You must use [restricted API keys](https://docs.stripe.com/keys/restricted-api-keys.md) to make live requests to the Global Payouts APIs. For a standard integration, [create a restricted key with the following permissions](https://dashboard.stripe.com/apikeys/create):

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

Grant additional permissions for these scenarios:

- For UK Confirmation of Payee or SEPA/Eurozone payments that require Recipient Verifications, grant **Money Management Recipient Verifications: Write**.
- If you use the gated Payout Intents API path, grant **Money Management Payout Intents: Write**.

If you haven’t set up a recipient, see [Create recipients](https://docs.stripe.com/global-payouts/recipient-creation.md).

## Look up your FinancialAccount and recipient IDs

First, get your FinancialAccount ID using the [FinancialAccount API v2](https://docs.stripe.com/api/v2/money-management/financial-accounts.md?api-version=preview) or from your [Dashboard Payout settings](https://dashboard.stripe.com/settings/payouts). The FinancialAccount API response includes your available funds in `balance.available`. If your business has multiple FinancialAccounts (for example, separate `storage` and `payments` accounts), filter using `types[]=payments` to retrieve the one you want to pay out from.

```curl
curl https://api.stripe.com/v2/money_management/financial_accounts \
  -H "Authorization: Bearer <<YOUR_SECRET_KEY>>" \
  -H "Stripe-Version: 2026-08-26.preview"
```

Then use the [Accounts v2 API](https://docs.stripe.com/api/v2/core/accounts.md) or the [Recipients](https://dashboard.stripe.com/global-payouts/recipients) page in the Dashboard to pull the recipient’s Account ID. Inspect the account status on the [Recipients](https://dashboard.stripe.com/global-payouts/recipients) page or in the `status` parameter in the API response in the `capabilities` array to confirm that `status` is set to `active`. This ensures you have all the required information to complete a payout. Otherwise, your payout might fail. If you haven’t created the recipient yet, see [Create a recipient](https://docs.stripe.com/global-payouts/recipient-creation.md#create-recipients-with-no-code).

You can optionally inspect a recipient’s available payout methods or set a default outbound destination. See [View all payout methods for a recipient](https://docs.stripe.com/global-payouts/recipient-creation.md#view-all-payout-methods-for-a-recipient) and [Set a default payout method for a recipient](https://docs.stripe.com/global-payouts/recipient-creation.md#set-a-default-payout-method-for-a-recipient).

### Select a payment network

If you use PayoutIntents, you can specify the payment network for a payout by setting `to.payout_method_options.bank_account.preferred_networks` when creating a payout. Stripe automatically selects the most appropriate network from the list you provide.

| Sender country | Available networks |
| --- | --- |
| United States (domestic) | `ach`, `fedwire`, `rtp` |
| United Kingdom (domestic) | `fps` |
| Eurozone (domestic) | `sepa`, `sepa_instant` |
| Cross-border | `local`, `swift` |

If you don’t specify `preferred_networks`, Stripe automatically selects the most appropriate network based on the recipient’s payout method and your capabilities. With the OutboundPayments API, Stripe always selects the network automatically based on the recipient’s payout method and your capabilities.

If your recipient doesn’t have any payout methods, you can create them using the API. Learn more about [creating payout methods for your recipients](https://docs.stripe.com/global-payouts/recipient-creation.md#create-payout-methods-for-your-recipients), and see [View all payout methods for a recipient](https://docs.stripe.com/global-payouts/recipient-creation.md#view-all-payout-methods-for-a-recipient) to retrieve them.

## Submit a payout

Use the [OutboundPayments API v2](https://docs.stripe.com/api/v2/money-management/outbound-payments.md?api-version=preview) to make a payout to a recipient. You must provide the following parameters to create a payout:

| Required information | API parameter |
| --- | --- |
| Financial Account ID | `financial_account` |
| Recipient ID | `recipient` |
| (Optional) Payout method | `to.payout_method` |
| Amount in minor units (for example, 100 = 1 USD) | `amount.value` |
| Currency | `amount.currency` |

```curl
curl -X POST https://api.stripe.com/v2/money_management/outbound_payments \
  -H "Authorization: Bearer <<YOUR_SECRET_KEY>>" \
  -H "Stripe-Version: 2026-08-26.preview" \
  --json '{
    "from": {
        "financial_account": "{{FINANCIALACCOUNTID_ID}}",
        "currency": "usd"
    },
    "to": {
        "recipient": "{{ACCOUNTIDGLOBALPAYOUTS_ID}}",
        "payout_method": "{{PAYOUTMETHODID_ID}}"
    },
    "amount": {
        "value": 1999,
        "currency": "usd"
    },
    "description": "Streamer earnings"
  }'
```

### Submit a payout with PayoutIntents (Private preview)

Use the [Payout Intents API](https://docs.stripe.com/api/v2/money-management/payout-intents/create.md?api-version=preview) to make a payout to a recipient. You must provide the following parameters to create a payout:

| Required information | API parameter |
| --- | --- |
| Financial Account ID | `from.financial_account` |
| From currency | `from.currency` |
| Recipient ID | `to.recipient` |
| (Optional) Payout method ID | `to.payout_method` |
| (Optional) Preferred payment network | `to.payout_method_options.bank_account.preferred_networks` |
| Amount in minor units (for example, 100 = 1 USD) | `amount.value` |
| Currency | `amount.currency` |

```curl
curl -X POST https://api.stripe.com/v2/money_management/payout_intents \
  -H "Authorization: Bearer <<YOUR_SECRET_KEY>>" \
  -H "Stripe-Version: 2026-08-26.preview" \
  --json '{
    "from": {
        "financial_account": "{{FINANCIALACCOUNTID_ID}}",
        "currency": "usd"
    },
    "to": {
        "recipient": "{{ACCOUNTIDGLOBALPAYOUTS_ID}}",
        "payout_method": "{{PAYOUTMETHODID_ID}}",
        "payout_method_options": {
            "bank_account": {
                "preferred_networks": [
                    "ach"
                ]
            }
        }
    },
    "amount": {
        "value": 1999,
        "currency": "usd"
    },
    "description": "Streamer earnings"
  }'
```

### Submit a paper check (Private preview)

To send a paper check, provide a signature in the `delivery_options.paper_check.signature` field. Optionally, provide a memo and specify a shipping speed in `delivery_options.paper_check.memo` and `delivery_options.paper_check.shipping_speed` fields respectively. You don’t need to use the `to.payout_method` field when submitting a paper check.

Both `delivery_options.paper_check.signature` and `delivery_options.paper_check.memo` are printed on the check.

```curl
curl -X POST https://api.stripe.com/v2/money_management/outbound_payments \
  -H "Authorization: Bearer <<YOUR_SECRET_KEY>>" \
  -H "Stripe-Version: 2026-08-26.preview" \
  --json '{
    "from": {
        "financial_account": "{{FINANCIALACCOUNTID_ID}}",
        "currency": "usd"
    },
    "to": {
        "recipient": "{{ACCOUNTIDGLOBALPAYOUTS_ID}}"
    },
    "amount": {
        "value": 1999,
        "currency": "usd"
    },
    "description": "Streamer earnings",
    "delivery_options": {
        "paper_check": {
            "signature": "Jenny Rosen",
            "memo": "Streamer earnings",
            "shipping_speed": "standard"
        }
    }
  }'
```

#### Add attachments to a paper check

You can include a PDF attachment with a paper check, such as an invoice or receipt. Stripe supports PDF files only. The maximum page count depends on the shipping speed: 5 pages for standard shipping and 50 pages for priority shipping.

Upload the file with the [Files API](https://docs.stripe.com/api/files.md) and set `purpose` to `paper_check_attachment`. You must include the `Stripe-Account` header and set it to the connected account ID that owns the financial account.

```bash
curl https://files.stripe.com/v1/files \
  -u "{{SECRET_KEY}}:" \
  -H "Stripe-Account: {{CONNECTED_ACCOUNT_ID}}" \
  -F purpose=paper_check_attachment \
  -F "file=@/path/to/document.pdf"
```

Pass the returned file ID in `delivery_options.paper_check.attachment` when you create the outbound payment.

```curl
curl -X POST https://api.stripe.com/v2/money_management/outbound_payments \
  -H "Authorization: Bearer <<YOUR_SECRET_KEY>>" \
  -H "Stripe-Version: 2026-08-26.preview" \
  --json '{
    "from": {
        "financial_account": "{{FINANCIALACCOUNTID_ID}}",
        "currency": "usd"
    },
    "to": {
        "recipient": "{{ACCOUNTIDGLOBALPAYOUTS_ID}}"
    },
    "amount": {
        "value": 1999,
        "currency": "usd"
    },
    "description": "Streamer earnings",
    "delivery_options": {
        "paper_check": {
            "signature": "Jenny Rosen",
            "memo": "Streamer earnings",
            "shipping_speed": "standard",
            "attachment": "{{FILE_ID}}"
        }
    }
  }'
```

## Inspect payout status

Call the OutboundPayments API v2 to inspect payouts, including their status. Specify using the `OutboundPaymentID` in the OutboundPayments API v2 call.

```curl
curl https://api.stripe.com/v2/money_management/outbound_payments \
  -H "Authorization: Bearer <<YOUR_SECRET_KEY>>" \
  -H "Stripe-Version: 2026-08-26.preview"
```

### Inspect a PayoutIntent (Private preview)

Call the [Payout Intents API](https://docs.stripe.com/api/v2/money-management/payout-intents/retrieve.md?api-version=preview) to inspect payouts, including their status. Specify the PayoutIntent ID in the request.

```curl
curl https://api.stripe.com/v2/money_management/payout_intents/poi_1234 \
  -H "Authorization: Bearer <<YOUR_SECRET_KEY>>" \
  -H "Stripe-Version: 2026-08-26.preview"
```

Learn more about [managing payouts](https://docs.stripe.com/global-payouts/manage-payouts.md).

## Send USD payouts to Link users (Private preview) 

USD payouts to Link are currently available to select businesses and countries. [Sign up for early access](https://docs.stripe.com/global-payouts/send-money.md#link_stablecoin_payouts_preview) or contact your Stripe account manager to register interest.

### Interested in previewing stablecoin payouts to Link users?

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/send-money" \
  -d '{"email": "EMAIL", "preview": "link_stablecoin_payouts_preview"}'
```

Use USD payouts to Link to:

- **Reach more recipients globally**: Pay recipients in USD stablecoins anywhere.
- **Avoid currency conversion and recipient onboarding**: Link handles both for you.
- **Send payouts instantly**: Recipients receive funds immediately into their Link account.

After receiving a payout, recipients can hold funds in Link, transfer funds to a bank account in their local currency, or send funds to a crypto wallet.

### Create a recipient

To send USD payouts to a Link recipient, first create (or retrieve) a recipient-configured v2 Account for the end user and request the `link` capability.

```curl
curl -X POST https://api.stripe.com/v2/core/accounts \
  -H "Authorization: Bearer <<YOUR_SECRET_KEY>>" \
  -H "Stripe-Version: 2026-08-26.preview" \
  --json '{
    "contact_email": "jenny.rosen@example.com",
    "display_name": "Jenny Rosen",
    "identity": {
        "country": "CO",
        "entity_type": "individual",
        "individual": {
            "given_name": "Jenny",
            "surname": "Rosen",
            "date_of_birth": {
                "year": 2000,
                "month": 1,
                "day": 1
            }
        }
    },
    "configuration": {
        "recipient": {
            "capabilities": {
                "link": {
                    "requested": true
                }
            }
        }
    },
    "include": [
        "identity",
        "configuration.recipient",
        "requirements"
    ]
  }'
```

### Create a Connection Session

Create a Connection Session to initiate the Link onboarding flow. Set `allowed_connection_types` to `link` and `requested_access` to `payout_methods`.

```curl
curl -X POST https://api.stripe.com/v2/core/connection_sessions \
  -H "Authorization: Bearer <<YOUR_SECRET_KEY>>" \
  -H "Stripe-Version: 2026-08-26.preview" \
  --json '{
    "account": "{{ACCOUNT_ID}}",
    "allowed_connection_types": [
        "link"
    ],
    "requested_access": [
        "payout_methods"
    ]
  }'
```

### Initiate Link onboarding on the client

Pass the `client_secret` from the Connection Session to `stripe.initLinkConnection()` in your front end. This launches a hosted webview that handles the full Link onboarding process.

```js
const stripe = Stripe('pk_live_...');

const { error, connectionSession } = await stripe.initLinkConnection({
  clientSecret: session.client_secret,
});

if (error) {
  console.error(error.message);
  return;
}

const connection = connectionSession.connection;

if (connection && connection.granted_access.includes('payout_methods')) {
  await internalApi.completePayoutSetup({ accountId: connection.account });
} else {
  // The user didn't complete the flow (for example, they closed the webview).
}
```

### Onboard in Link

When a recipient onboards, Stripe prompts them to create or connect a Link account. New Link users provide their name, date of birth, and residential address to onboard. Existing Link users with saved identity information onboard faster.

### Retrieve the Link payout method

After onboarding completes, Stripe automatically creates a payout method with `type: link` on the recipient’s account. Retrieve it on your server using the Payout Methods API.

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-08-26.preview" \
  -H "Stripe-Context: {{CONTEXT_ID}}"
```

After you have the payout method, send the payout the same way as any other Global Payouts recipient. See [Submit a payout](https://docs.stripe.com/global-payouts/send-money.md#submit-a-payout) for how to create the `OutboundPayment`.

### Store and withdraw the payout

Recipients receive funds in their Link account instantly. Funds are held in USD stablecoins within Link. Recipients can withdraw funds to their local bank account or a crypto wallet.

## Statement descriptors

Statement descriptors explain charges or payments on bank statements. By default, a payout recipient sees [your account’s statement descriptor](https://docs.stripe.com/get-started/account/statement-descriptors.md#static).

### Customize statement descriptors (Public preview)

You can customize the descriptor for each payout when you create it.

#### Dashboard

When creating a payout in the Dashboard, enter a custom statement descriptor in the **Statement descriptor** field.

#### API

When creating an OutboundPayment, set `statement_descriptor` to a custom statement descriptor.

```curl
curl -X POST https://api.stripe.com/v2/money_management/outbound_payments \
  -H "Authorization: Bearer <<YOUR_SECRET_KEY>>" \
  -H "Stripe-Version: 2026-08-26.preview" \
  --json '{
    "from": {
        "financial_account": "{{FINANCIALACCOUNTID_ID}}",
        "currency": "usd"
    },
    "to": {
        "recipient": "{{ACCOUNTIDGLOBALPAYOUTS_ID}}"
    },
    "amount": {
        "value": 1999,
        "currency": "usd"
    },
    "description": "Streamer earnings",
    "statement_descriptor": "Payment for streaming"
  }'
```

For minimum and maximum payout amounts by country, see [Payout amounts](https://docs.stripe.com/global-payouts/payout-methods.md#payout-amounts).

## NACHA payroll compliance

When sending funds for payroll purposes to recipients in the US with ACH, NACHA rules require the originator to explicitly identify the payouts as such. When sending an OutboundPayment, set the `purpose` parameter to `payroll` to ensure compliance with this requirement.
