# payout.failed: read the failure code, fix the destination, then act

Stripe tried to send money to a bank account and could not. The money is still with Stripe; nothing is lost. But nothing will move until the underlying problem is fixed.

## What to do on receipt

1. Read `failure_code` and `failure_message` on the Payout object. Common codes: `account_closed`, `no_account`, `invalid_account_number`, `debit_not_authorized`. Each one names the fix.
2. `account_closed` / `no_account`: the bank account is gone. Ask the recipient for new bank details and update the external account. Do not retry to the old one.
3. `debit_not_authorized` / verification issues: the account needs re-verification. Walk the recipient through it.
4. Only after the destination is fixed, the funds are typically included in the next automatic payout. You do not need to recreate the payout manually in most cases; confirm this in the Dashboard rather than double-sending.
5. Notify the recipient promptly. They are waiting for money. Return 200.

## The trap

Blind retry. Every failed payout attempt is a delay and, with some banks, a return fee. The fix is always on the destination side first. The other trap: silence toward the recipient. A failed payout with no communication reads as theft; a quick "your bank rejected the transfer, here is how to fix it" reads as competence.

## Checklist

- For Connect platforms, this event arrives on the platform for the connected account's payout. Route the notification to the connected account holder, not your own ops inbox.
- Track consecutive payout failures per destination. Two in a row means stop automatic payouts to that destination until a human confirms the details.