> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fluz.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Send money to a saved bank account

> Send money from a Fluz cash balance to a saved bank account over ACH with createExternalPayout.

Send money from a Fluz cash balance to a bank account you already added. The money goes out over standard ACH.

### Overview

This moves money **out of Fluz** to a US bank account that belongs to someone else, for example a contractor, a vendor, or a friend. The recipient does not need a Fluz account.

Why use it:

* **Pay anyone with a US bank account.** The recipient only needs a routing and account number. They do not sign up for Fluz.
* **Pay from your Fluz balance.** The money comes from one of the account's cash balances, so there is no separate funding step.
* **Safe to retry.** Every payment carries an idempotency key, so a network retry never sends the money twice.
* **Clear cost up front.** The response shows the fee and the total debited from the balance.

How it works:

1. Add the recipient's bank account with [`createExternalPayee`](https://docs.fluz.app/features/add-a-bank-account).
2. Call `createExternalPayout` with the saved bank account, the source cash balance, and the amount.
3. Fluz debits the cash balance right away and returns the payment with status `PENDING`.
4. The money is sent to the recipient's bank in the next standard ACH file.

One operation sends money:

* `createExternalPayout` - Send money to a saved bank account

> [!NOTE]
>
> This is for sending money to **someone else's** bank account. To move money to the user's own bank account, use [withdrawals](https://docs.fluz.app/features/withdraw-to-external-account.md). To send money to another Fluz account, see [Send money to a Fluz account](https://docs.fluz.app/features/send-money-overview#1-send-money-to-a-fluz-account). To pay someone by email or phone, use [`sendMoney`](https://docs.fluz.app/features/send-money).

***

### createExternalPayout

Send money from one of the authenticated user's cash balances to a saved bank account over ACH.

#### Mutation (CreateExternalPayoutInput)

```graphql theme={null}
createExternalPayout(input: CreateExternalPayoutInput!): ExternalPayoutResult
```

**Requires**: `MAKE_PAYOUT_TRANSFER_SEND` scope.

#### Input

| Field | Type | Required | Description |
| :- | :- | :- | :- |
| idempotencyKey | UUID! | Yes | A unique key for this payment. Reuse the same key only when retrying the same request. |
| externalPayeeId | UUID! | Yes | The saved bank account to pay. Must belong to the authenticated user's account. |
| sourceCashBalanceId | UUID! | Yes | The cash balance to debit. Must belong to the authenticated user's account and be active. |
| amount | Float! | Yes | The amount the recipient receives, in USD. Greater than 0, at most two decimal places. The fee is charged on top. |
| acknowledgeReview | Boolean | No | Set to `true` to send to a bank account whose `status` is `REVIEW`, after the user confirms. Without it, the payment is refused with `PT-0009`. Has no effect on a bank account that is not under review. |

#### Response (ExternalPayoutResult)

| Field | Type | Description |
| :- | :- | :- |
| transferId | ID! | The payment ID |
| externalPayeeId | ID! | The bank account that was paid |
| amount | Float! | The amount the recipient receives |
| fee | Float! | The fee charged on top of the amount |
| totalDebited | Float! | `amount + fee`. The total taken from the source cash balance. |
| status | ExternalPayoutStatus! | Always `PENDING` when the payment is created |

#### Example

```graphql theme={null}
mutation {
	createExternalPayout(
	  input: {
	    idempotencyKey: "550e8400-e29b-41d4-a716-446655440020"
	    externalPayeeId: "3f1c2b7e-8d4a-4c1e-9f2a-6b5d4e3c2a10"
	    sourceCashBalanceId: "aaaaaaaa-bbbb-4ccc-8ddd-eeeeeeeeeeee"
	    amount: 100.00
	  }
	) {
	  transferId
	  externalPayeeId
	  amount
	  fee
	  totalDebited
	  status
	}
}
```

**Success:**

```json theme={null}
{
	"data": {
	  "createExternalPayout": {
	    "transferId": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
	    "externalPayeeId": "3f1c2b7e-8d4a-4c1e-9f2a-6b5d4e3c2a10",
	    "amount": 100,
	    "fee": 1.5,
	    "totalDebited": 101.5,
	    "status": "PENDING"
	  }
	}
}
```

*The fee in this example is for illustration only. Always use the `fee` and `totalDebited` values returned in the response.*

**Insufficient balance:**

```json theme={null}
{
	"errors": [
	  {
	    "message": "The sender does not have sufficient balance to complete this transfer.",
	    "extensions": { "code": "PT-0007" }
	  }
	]
}
```

#### Error Codes

| Code | Description |
| :- | :- |
| ARG-0002 | A required field is missing, or `amount` is not greater than 0 |
| ARG-0001 | Invalid input. For example: `idempotencyKey` is not a UUID, the bank account was not found or cannot be paid, the source cash balance is not active, or the idempotency key was already used for a different request. |
| PT-0001 | Daily limit exceeded |
| PT-0002 | Weekly limit exceeded |
| PT-0003 | Monthly limit exceeded |
| PT-0004 | Yearly limit exceeded |
| PT-0005 | Amount is below the minimum |
| PT-0006 | Amount is above the maximum |
| PT-0007 | Not enough balance to cover the amount plus the fee |
| PT-0008 | Part of the balance is still clearing. Lower the amount and try again. |
| PT-0009 | The bank account is under review. Confirm with the user, then resend with `acknowledgeReview: true`. |
| G-0003 | Sending money to bank accounts is not enabled on this account, or the payment could not be authorized |
| G-0004 | The payment could not be completed |
| G-0001 | Server error |

***

### Payment status

`ExternalPayoutStatus` lists the possible states of a payment.

| Status | Description |
| :- | :- |
| PENDING | The payment was created and the balance was debited. The money has not left Fluz yet. |
| PROCESSING | The payment is being processed |
| COMPLETED | The payment is complete |
| FAILED | The payment failed |
| FAILED\_INITIAL | The payment failed when it was first submitted |
| CANCELED | The payment was cancelled before it was sent |
| REFUNDED | The amount was returned to the cash balance |
| RETURNED | The recipient's bank returned the payment |

`createExternalPayout` always returns `PENDING`. The API does not currently provide a query to check a payment's status after it is created.

***

### Important Notes

#### Which balance pays

* The payment is debited from the cash balance you pass as `sourceCashBalanceId`.
* Rewards balance and prepayment / gift card balance can't fund it.

#### Funds and timing

* The cash balance is debited the `totalDebited` amount immediately when the mutation succeeds.
* Payments use standard ACH. Same-day and expedited ACH are not available.
* Money leaves Fluz in the next ACH file. Arrival time depends on ACH processing and the recipient's bank.

#### Fees and limits

* The fee is set by Fluz and is added on top of `amount`. The recipient receives the full `amount`.
* Daily, weekly, monthly, and yearly limits, plus minimum and maximum amounts, apply per account. When a limit is reached, the request fails with a `PT-` error code.
* Funds that are still clearing cannot be sent.

#### Idempotency

* Send a new UUID for each new payment.
* If a request times out, retry with the **same** key and the same input. You get the original result back and the money is not sent twice.
* A key used with a different amount, source balance, or bank account is rejected.
* Idempotency keys are shared across all transfer types. A key already used for another kind of transfer cannot be reused here.

#### Saved bank accounts

* The bank account must still be saved on the account. Removed bank accounts cannot be paid.
* A bank account with `status: REVIEW` can be paid only with `acknowledgeReview: true`.
* Some bank accounts cannot receive payments. In that case the request fails with `ARG-0001`.

#### Returned payments

* If the recipient's bank rejects the payment, for example because the account is closed, the money is returned to the source cash balance.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.