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

# Fund account transfers with rewards

> Pass useRewardsBalance on createTransfer and requestAccountTransfer to fund a send from rewards, or from rewards plus the sender's spend account.

Set `useRewardsBalance` on the GraphQL account-to-account mutations to fund a transfer from the sender's **rewards balance**. You can combine rewards with the sender's resolved spend account in the same request. Prepayment / gift-card balance is not a field on these inputs and cannot fund the transfer.

This page covers the TGS GraphQL surface only:

* [`createTransfer`](/api-reference/mutations/create-transfer) (`CreateTransferInput`)
* [`requestAccountTransfer`](/api-reference/mutations/request-account-transfer) (`RequestAccountTransferInput`)

Destination, auth, scopes, and idempotency are unchanged from [Transfer to Another Fluz Account](/features/transfer-to-another-fluz-wallet).

<Note>
  **Not `withdrawCashBalance`.**

  [Withdraw to an external account](/features/withdraw-to-external-account) uses `source: CASH_BALANCE | REWARDS_BALANCE` and is XOR (one source per request). Account-to-account send uses `useRewardsBalance` on `createTransfer` / `requestAccountTransfer` and can combine rewards with one spend account.
</Note>

***

## Mutations and scopes

| Mutation                 | Input                         | Scope                       | Auth                                                   |
| ------------------------ | ----------------------------- | --------------------------- | ------------------------------------------------------ |
| `createTransfer`         | `CreateTransferInput`         | `MAKE_PAYOUT_TRANSFER_SEND` | Bearer, or Basic Auth on a public `ACTIVE` application |
| `requestAccountTransfer` | `RequestAccountTransferInput` | `REQUEST_ACCOUNT_TRANSFER`  | Same auth rules as `createTransfer`                    |

`useRewardsBalance` is optional on both inputs. Omit it or pass `false` for cash-only — the default, so existing clients do not change behavior.

***

## Input field

### `useRewardsBalance: Boolean`

When `true`, fund the transfer from the sender's rewards balance **in addition to** the spend account TGS already resolves from the access token (or application operator for Basic Auth).

| Value             | What TGS does                                                                                                                    |
| ----------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| omitted / `false` | Cash-only. Full `amount` from the sender's spend account.                                                                        |
| `true`            | Take available cash first (up to `amount`); remainder from rewards. If available cash is `0`, the full `amount` is rewards-only. |

The recipient is still credited on a spend account (`destination.userCashBalanceId`, or the automatically resolved cash balance). There is no GraphQL field to send rewards into another account's rewards balance.

`CreateTransferInput` / `RequestAccountTransferInput` still have **no** `usePrepaymentBalance` (or equivalent). Do not copy FluzPay purchase flags onto these mutations.

***

## createTransfer

```graphql theme={null}
mutation {
  createTransfer(input: {
    idempotencyKey: "550e8400-e29b-41d4-a716-446655440010"
    amount: 25.00
    useRewardsBalance: true
    destination: {
      accountId: "b2c3d4e5-f6a7-8901-bcde-f23456789012"
    }
  }) {
    success
    message
    transferId
  }
}
```

```text theme={null}
Authorization: Bearer <user-oauth-token>
```

Same shape as a cash-only send — the only addition is `useRewardsBalance: true`.

### With an external funding source

`bankCardId`, `bankAccountId`, and `paypalVaultId` remain Bearer-token only, at most one per request. They deposit into the sender's spend account first; `useRewardsBalance` still applies to the transfer itself.

***

## requestAccountTransfer

Mirrors `createTransfer`. Pass `useRewardsBalance` on the request; it is included in the payload that executes after `approveApprovalRequest`.

```graphql theme={null}
mutation {
  requestAccountTransfer(input: {
    idempotencyKey: "550e8400-e29b-41d4-a716-446655440011"
    amount: 25.00
    useRewardsBalance: true
    destination: {
      accountId: "b2c3d4e5-f6a7-8901-bcde-f23456789012"
    }
  }) {
    success
    messageId
    error {
      code
      message
    }
  }
}
```

Approve and decline are unchanged: `approveApprovalRequest` / `declineApprovalRequest` with `MANAGE_APPROVALS`. See [Request Account Transfer Approval](/features/request-account-transfer-approval).

***

## Errors

Failures use the standard GraphQL error envelope. `createTransfer` returns `createTransfer: null` when the send cannot complete.

```json theme={null}
{
  "data": {
    "createTransfer": null
  },
  "errors": [
    {
      "message": "Insufficient funds",
      "extensions": {
        "code": "WDR-0001",
        "name": "InsufficientBalanceError",
        "status_code": 400
      }
    }
  ]
}
```

| Code                             | When                                                                                      |
| -------------------------------- | ----------------------------------------------------------------------------------------- |
| `WDR-0001`                       | Combined cash + rewards (or rewards alone) cannot cover `amount`. No transfer is created. |
| Existing `createTransfer` errors | Destination, auth, idempotency, and single-external-funding-source rules still apply.     |

See [Transfer to Another Fluz Account](/features/transfer-to-another-fluz-wallet) for the rest of `CreateTransferInput` and [createTransfer](/api-reference/mutations/create-transfer) / [CreateTransferInput](/api-reference/types/create-transfer-input) in the API reference.
