# Manage payouts

Learn how to monitor payout statuses and reports.

After you create a payout, you can view its status, receive events when the status changes, cancel or reverse the payout, investigate returned payouts or a missing trace ID, and view reporting.

The PayoutIntents API is in private preview. [Request access](https://docs.stripe.com/global-payouts/manage-payouts.md#payout_intents_preview).

### Get 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/manage-payouts" \
  -d '{"email": "EMAIL", "preview": "payout_intents_preview"}'
```

## 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`

## Monitor payouts

### View payout status

You can view a payout’s status in the Dashboard or with the API by inspecting its status.

#### Dashboard

1. In the Stripe Dashboard, go to [Global Payouts](https://dashboard.stripe.com/global-payouts/payouts).
2. Use the filter buttons to sort payouts by `processing`, `posted`, `failed`, `returned`, `canceled`, or `scheduled`.

You can also view an itemized receipt that includes details of the payout.

#### API

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

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

To inspect individual payout attempts, call the [Outbound Payments API](https://docs.stripe.com/api/v2/money-management/outbound-payments/retrieve.md?api-version=preview) with the OutboundPayment ID. For a PayoutIntent, get the ID of its most recent OutboundPayment from `latest_payout.outbound_payment`.

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

For an OutboundPayment, to retrieve an itemized receipt for the details of the payout, use the URL provided in the `receipt_url` parameter.

#### PayoutIntent statuses

The following table describes the possible statuses for a PayoutIntent.

| Status | Description |
| --- | --- |
| pending | The PayoutIntent is awaiting execution. If `schedule_options.execute_on` is set, the payout is scheduled for a future date and the Dashboard labels it **Scheduled**. Stripe doesn’t hold funds for a scheduled payout. On the scheduled send date, it moves to `processing`. |
| processing | Stripe has started processing the payout. If the `cancelable` parameter is set to `true`, you can cancel the payout. |
| requires_action | The payout requires user action before it can proceed. Review `next_action` to understand the issue and take corrective action. Update the payout using the [Payout Intents API](https://docs.stripe.com/api/v2/money-management/payout-intents/update.md?api-version=preview) after resolving the issue. |
| posted | The payout posts and funds leave the FinancialAccount. A posted status doesn’t guarantee that your recipient has received money, because their bank might delay the release of funds. If a payout is posted but the recipient hasn’t received money, instruct them to wait several business days or to inquire with their bank. |
| canceled | The payout was canceled before it posted. Stripe voids the pending transaction and returns the funds to you. |

#### OutboundPayment statuses

The following table describes the possible statuses for an OutboundPayment.

| Status | Description |
| --- | --- |
| processing | The starting state of the payout. Funds are reserved for the payout while the associated transaction is pending. A payout held for Stripe review remains in this status with `status_details.processing.reason: under_review`. If `cancelable` is `true`, you can cancel the payout. |
| failed | The payout failed. Stripe voids the pending transaction and returns the funds to you. |
| canceled | The payout was canceled before it posted. Stripe voids the pending transaction and returns the funds to you. |
| posted | The payout posts and funds leave the FinancialAccount. A posted status doesn’t guarantee that your recipient has received money, because their bank might delay the release of funds. If a payout is posted but the recipient hasn’t received money, instruct them to wait several business days or to inquire with their bank. |
| returned | The payout failed to arrive at the destination. Stripe returns the funds to you in a separate transaction (`returned_details[transaction]`).

To see the return reason, on the [Global Payouts](https://dashboard.stripe.com/global-payouts/payouts) page, click the payout in the list view and see the return reason listed in the **Timeline** section.

You can also view return reasons in [OutboundPayments](https://docs.stripe.com/api/v2/money-management/outbound-payments/create.md?api-version=preview#v2_create_outbound_payments-response-status_details-returned). Payouts are typically returned within 2-3 business days, but might take longer depending on the recipient country. |

### View changes in payout state

You can view changes in payout state in the Dashboard or by receiving events to your webhook endpoint.

#### Dashboard

1. In the Dashboard, go to [Global Payouts](https://dashboard.stripe.com/global-payouts/payouts).
2. Find the payout that you want to inspect, and select it.
3. View the **Timeline** section to see a record of state changes.

#### API

If you use PayoutIntents, Stripe sends the following payout events to your webhook endpoint:

- `v2.money_management.payout_intent.created` when a PayoutIntent is created.
- `v2.money_management.payout_intent.processing` when a PayoutIntent starts processing.
- `v2.money_management.payout_intent.posted` when a PayoutIntent posts and funds leave the FinancialAccount.
- `v2.money_management.payout_intent.canceled` when a PayoutIntent is canceled.
- `v2.money_management.payout_intent.requires_action` when a PayoutIntent requires user action.
- `v2.money_management.payout_intent.updated` when a PayoutIntent is updated.

Stripe also sends the following events for each payout attempt, whether you create the OutboundPayment directly or through a PayoutIntent:

- `v2.money_management.outbound_payment.created` when an OutboundPayment is created.
- `v2.money_management.outbound_payment.under_review` when Stripe places a payout on hold for review. This doesn’t change its `processing` status.
- `v2.money_management.outbound_payment.posted` when an OutboundPayment posts.
- `v2.money_management.outbound_payment.failed` when an OutboundPayment fails.
- `v2.money_management.outbound_payment.canceled` when an OutboundPayment is canceled.
- `v2.money_management.outbound_payment.returned` when an OutboundPayment is returned.

Verify webhook signatures to confirm that events came from Stripe. See [verify events](https://docs.stripe.com/webhooks.md#verify-events).

### Payout risk review

Stripe can review a payout before sending funds to your recipient. Stripe might reject the payout before creating it or hold it for review. Reviews typically take up to 2 business days and can delay the payout’s arrival.

If Stripe rejects a payout before creating it, the API returns the `outbound_payment_cannot_be_processed` error code and doesn’t create an OutboundPayment.

If Stripe holds a payout for review, its status remains `processing`, and `status_details.processing.reason` is set to `under_review`. Creating an OutboundPayment doesn’t mean that Stripe has sent the funds. Funds are reserved for the payout while the associated transaction is pending. The `expected_arrival_date` isn’t available during the review.

After the review:

- **Approved**: Stripe releases the hold and resumes normal payout processing.
- **Rejected**: The payout’s status changes to `failed`, and `status_details.failed.reason` is set to `review_rejected`. Stripe voids the pending transaction and returns the funds to you. Contact [Stripe Support](https://support.stripe.com/) for more information before retrying.
- **Exchange rate changed**: If the payout requires currency conversion, it can fail after approval if the exchange rate changes beyond the allowed limit. The payout’s status changes to `failed`, and `status_details.failed.reason` is set to `fx_rate_drift_exceeded_after_review`. Stripe returns the funds to you.

To test payouts that Stripe rejects or holds for review, see [Test payout risk review](https://docs.stripe.com/global-payouts/testing.md#test-payout-risk-review).

### View payout trace ID

If a payout has status `posted` but the recipient hasn’t received the payout, you can provide the trace ID to the recipient. The recipient can provide the trace ID to the bank to investigate the specific status of the payout.

#### Dashboard

1. In the Stripe Dashboard, go to the [Global Payouts](https://dashboard.stripe.com/global-payouts/payouts) page.
2. Select the payout that you want to inspect.
3. View the **Trace ID** section. If the trace ID exists, you can click the ID to copy it.

#### API

The trace ID is in the OutboundPayment’s `trace_id` field. To get it, pass the OutboundPayment ID to the [Outbound Payments API](https://docs.stripe.com/api/v2/money-management/outbound-payments/retrieve.md?api-version=preview). If you use PayoutIntents, get the OutboundPayment ID from the PayoutIntent’s `latest_payout.outbound_payment` field.

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

### View reports and transactions

You can use the Dashboard and API to view your account balance and reports, view transactions to and from the balance, and withdraw funds.

#### Dashboard

Navigate to **Payouts** and click **Export** to export a CSV file of historical payout information. You can select your preferred time zone, date range, and desired columns. You can also download reports from **Balances**. Fees can take up to 96 hours and other activity up to 24 hours to appear in these reports.

You can also view a summary of payouts activity in **Reports**. Click **Financial account balance summary** and download the `Balance summary` or the `Balance change from activity`. You can select your preferred time zone, date range, and desired columns.

#### API

To list all transactions for your account, use the [Transactions API](https://docs.stripe.com/api/v2/money-management/transactions.md?api-version=preview). Include additional parameters to filter the results returned. In addition to the [standard set of list parameters](https://docs.stripe.com/api/pagination.md), you can filter transactions by:

- Type of money movement. Each money movement, such as OutboundPayments or ReceivedCredits, has one or more Transactions that describe how the flow impacted your balance.
- Created date or posted date

The following request retrieves the three most recent transactions created for a Financial Account:

```curl
curl -G https://api.stripe.com/v2/money_management/transactions \
  -H "Authorization: Bearer <<YOUR_SECRET_KEY>>" \
  -H "Stripe-Version: 2026-09-30.preview" \
  -d "financial_account={{FINANCIALACCOUNTID_ID}}" \
  -d limit=3
```

A Transaction aggregates immutable TransactionEntries that record funds moving between availability states. Pending Transactions can gain entries until they become posted or void. If you need a more detailed view of money movement, use the Transaction Entries API v2 to list transaction entries. Include additional parameters to filter the results returned. In addition to the [standard set of list parameters](https://docs.stripe.com/api/pagination.md), you can filter transaction entries by:

- transaction
- created

The following request retrieves the transaction entries created on a specific Transaction:

```curl
curl -G https://api.stripe.com/v2/money_management/transaction_entries \
  -H "Authorization: Bearer <<YOUR_SECRET_KEY>>" \
  -H "Stripe-Version: 2026-09-30.preview" \
  -d transaction={{TRANSACTION_ID}}
```

> Sigma or Stripe Data Pipeline reporting with Global Payouts is in private preview. If you’re interested in getting access, [enter your email](https://docs.stripe.com/global-payouts/manage-payouts.md#sigma_reporting_payouts_preview).

### Request to join the preview for Sigma or Stripe Data Pipeline reporting with Global 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/manage-payouts" \
  -d '{"email": "EMAIL", "preview": "sigma_reporting_payouts_preview"}'
```

## Manage payouts

### Cancel or reverse a payout

If you unintentionally send a payout, you might be able to cancel it using the Dashboard or API while it’s still cancelable.

#### Dashboard

1. In the Dashboard, go to [Global Payouts](https://dashboard.stripe.com/global-payouts/payouts).
2. Find and select the payout that you want to cancel.
3. If **Cancel payout** is available on the payout details page, click it, then confirm the cancellation.

#### API

If you use PayoutIntents, [cancel the PayoutIntent](https://docs.stripe.com/api/v2/money-management/payout-intents/cancel.md?api-version=preview) with its PayoutIntent ID. You can cancel a `PayoutIntent` with status `pending` or `requires_action`. You can cancel a `processing` PayoutIntent only while its underlying payout remains cancelable.

```curl
curl -X POST https://api.stripe.com/v2/money_management/payout_intents/poi_1234/cancel \
  -H "Authorization: Bearer <<YOUR_SECRET_KEY>>" \
  -H "Stripe-Version: 2026-09-30.preview"
```

For payouts that you created directly as OutboundPayments, [cancel the OutboundPayment](https://docs.stripe.com/api/v2/money-management/outbound-payments/cancel.md?api-version=preview) with its OutboundPayment ID. The `OutboundPayment` must have status `processing` and its `cancelable` property must be `true`. See [View payout status](https://docs.stripe.com/global-payouts/manage-payouts.md#view-payout-status) to retrieve and inspect the payout.

```curl
curl -X POST https://api.stripe.com/v2/money_management/outbound_payments/obp_1234/cancel \
  -H "Authorization: Bearer <<YOUR_SECRET_KEY>>" \
  -H "Stripe-Version: 2026-09-30.preview"
```

If the cancellation succeeds, the payout’s status changes to `canceled`. A payout can become ineligible for cancellation before Stripe processes your request, even if it was cancelable when you checked.

If the payout posts, you can still request a reversal by emailing Stripe Support if your payout method supports it. Stripe makes an attempt to reverse the payout and return the funds to your account. Stripe can’t guarantee a reversal, and some payout methods aren’t reversible.

| Payout type | Reversal support |
| --- | --- |
| US domestic payouts (local bank transfer) | You must request a reversal within 24 hours of creating the payout. |
| US domestic payouts (wire) | You must request a reversal within 24 hours of creating the payout. |
| UK domestic payouts (local bank transfer) | No |
| Cross-border payouts | No |

### Manage returned payouts

Incorrect destination information causes most returned payouts (for example, the provided bank account is closed, or the account holder’s details don’t match the recipient’s information). If a payout has been returned:

1. Read the failure or return reason. You can view it in the Dashboard by selecting the payout in the list view and reading through the **Timeline** section. You can also view failure details in the PayoutIntent’s `next_action.handle_failure.failure_reason` field, or view return reasons in OutboundPayments.
2. If the payout failed or returned because of incorrect destination information, confirm the details and ask the recipient to update their information if needed. Then retry the payout. See [Handle payouts that require action](https://docs.stripe.com/global-payouts/send-money.md?dashboard-or-api=api&payout-api=payout-intents#handle-payouts-that-require-action) for PayoutIntents, or [Handle failed and returned payouts](https://docs.stripe.com/global-payouts/send-money.md?dashboard-or-api=api&payout-api=outbound-payments#handle-failed-and-returned-outbound-payments) for OutboundPayments.
3. If the payout failed or returned for an unknown reason, confirm the details and ask the recipient to update their information if needed. Then, try sending the money again. If the payout still fails, [contact Stripe Support](https://support.stripe.com/).

### Configure payout settings

#### Set default payout methods (Optional)

You can choose the payout method for each payout, or set a global default method that applies across all recipients. Unlike per-recipient payout methods, default preferences apply to newly created payouts and newly created recipients. To set a default payout method:

1. Go to [Settings](https://dashboard.stripe.com/settings), then click **Global Payouts**.
2. Enable at least one payout method.
3. Click **Done**.

You can override these settings with the API or in the Dashboard.

#### Set your communication preference (Optional)

Global communication preferences determine how Stripe can communicate on your behalf with recipients. You can override these settings with the API or in the Dashboard.

To set default communication preferences for all recipients:

1. Go to [Settings](https://dashboard.stripe.com/settings), then click **Global Payouts**.
2. In **Recipient communication permissions**, choose whether you want Stripe to email recipients on your behalf or if you plan to handle communications with recipients yourself.
