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

# Mover dinero a través de una billetera

> El ciclo de vida completo del libro mayor: crea una cuenta de gasto, deposita en ella, transfiere entre cuentas, retira de vuelta y verifica cada saldo.

Este Quickstart mueve dinero a través del ciclo de vida completo de la billetera: abre una cuenta de gasto diseñada para un propósito, fúndela, mueve fondos entre cuentas, envíalos de vuelta a una cuenta externa y verifica el libro mayor en cada paso: la plomería debajo de cada tarjeta y flujo de compra.

<Info>
  **Requisitos previos**

  * Una **cuenta de Fluz con una aplicación de staging**: Pasos 1–2 de cualquier quickstart, o consulta [Prepara tus cuentas](/get-started/prepare-accounts) y [Credenciales de API](/get-started/api-credentials).
  * Una **cuenta bancaria de prueba vinculada** para las etapas de depósito y retiro: tu sandbox viene con fuentes de fondos de prueba, o agrega más desde [Cuentas bancarias de prueba](/test-bank-accounts).
  * Cada mutación que mueva dinero necesita una `idempotencyKey` única: consulta [Idempotencia](/concepts/idempotency).
</Info>

## El flujo completo

<Steps>
  <Step title="Genera un token con los cuatro alcances de la billetera" icon="key">
    Este flujo toca cuatro alcances — uno por capacidad:

    ```json theme={null}
        {
          "scopes": ["MANAGE_PAYMENT", "LIST_PAYMENT", "MAKE_INTERNAL_TRANSFER", "MAKE_WITHDRAWAL"]
        }
    ```

    `MANAGE_PAYMENT` crea cuentas y depósitos, `LIST_PAYMENT` los lee, `MAKE_INTERNAL_TRANSFER` mueve fondos entre tus cuentas, y `MAKE_WITHDRAWAL` envía fondos hacia afuera. Detalles para generar: [Credenciales de API](/get-started/api-credentials).
  </Step>

  <Step title="Crea una cuenta de gasto" icon="wallet">
    Las cuentas de gasto son sublibros con nombre — "Viajes del equipo", "Operaciones", "Marketing" — que mantienen los presupuestos separados mientras viven bajo una sola cuenta de Fluz.

    <CodeGroup>
      ```graphql Mutation theme={null}
          mutation createUserCashBalance($input: CreateUserCashBalanceInput!) {
            createUserCashBalance(input: $input) {
              userCashBalanceId
              nickname
              availableCashBalance
              status
            }
          }
      ```

      ```json Variables theme={null}
          { "input": { "nickname": "Team Travel" } }
      ```

      ```json Response theme={null}
          {
            "data": {
              "createUserCashBalance": {
                "userCashBalanceId": "f8a3c9e1-7b2d-4f5e-9c8a-1d2e3f4a5b6c",
                "nickname": "Team Travel",
                "availableCashBalance": "0",
                "status": "ACTIVE"
              }
            }
          }
      ```
    </CodeGroup>

    Guarda el `userCashBalanceId`: cada paso posterior direcciona la cuenta con él. Tu cuenta también ya tiene una cuenta de gasto **predeterminada**; transferirás entre ambas en el Paso 4.
  </Step>

  <Step title="Deposita en ella" icon="banknote-arrow-down">
    Fondea la nueva cuenta desde una fuente vinculada con `depositCashBalance`, apuntando a ella mediante `userCashBalanceId`:

    <CodeGroup>
      ```graphql Mutation theme={null}
          mutation depositCashBalance($input: DepositCashBalanceInput!) {
            depositCashBalance(input: $input) {
              cashBalanceDeposits { depositAmount status }
              balances {
                cashBalance { availableBalance totalBalance pendingBalance }
              }
            }
          }
      ```

      ```json Variables theme={null}
          {
            "input": {
              "idempotencyKey": "3c9e1f8a-2b7d-4e5f-8c9a-6b5a4f3e2d1c",
              "amount": 100.00,
              "depositType": "CASH_BALANCE",
              "userCashBalanceId": "<TEAM_TRAVEL_ACCOUNT_ID>",
              "bankAccountId": "<YOUR_TEST_BANK_ACCOUNT_ID>"
            }
          }
      ```
    </CodeGroup>

    Los depósitos pueden liquidarse al instante o dentro de 2–5 días hábiles según la fuente; los `balances` devueltos reflejan lo que está disponible ahora mismo. Los IDs de las fuentes de fondos provienen de `getWallet`: consulta [Ver fuentes de fondos](/features/view-funding-sources).
  </Step>

  <Step title="Transfiere entre tus cuentas" icon="arrow-left-right">
    Mueve \$25 desde la cuenta nueva a tu cuenta predeterminada con `transferInternalBalance`. Internamente se registra como dos movimientos vinculados: un retiro desde el origen y un depósito en el destino, y la respuesta devuelve ambos:

    <CodeGroup>
      ```graphql Mutation theme={null}
          mutation transferInternalBalance($input: TransferInternalBalanceInput!) {
            transferInternalBalance(input: $input) {
              withdraw { withdrawId amount status userCashBalanceId }
              cashBalanceDeposit { cashBalanceDepositId depositAmount status }
            }
          }
      ```

      ```json Variables theme={null}
          {
            "input": {
              "idempotencyKey": "1f1df3e7-5d43-4e3d-83de-31922d4aefb7",
              "amount": 25.00,
              "sourceUserCashBalanceId": "<TEAM_TRAVEL_ACCOUNT_ID>",
              "destinationUserCashBalanceId": "<DEFAULT_ACCOUNT_ID>"
            }
          }
      ```
    </CodeGroup>

    Ambos IDs deben ser tus propias cuentas de gasto, deben ser diferentes, y la cuenta origen necesita saldo disponible suficiente. Enviar a un **usuario de Fluz diferente** es una operación distinta: [Transferir a otra billetera de Fluz](/features/transfer-to-another-fluz-wallet).
  </Step>

  <Step title="Retira de vuelta" icon="banknote-arrow-up">
    Completa el viaje de ida y vuelta enviando fondos a una cuenta externa con `withdrawCashBalance` — aquí vía ACH:

    <CodeGroup>
      ```graphql Mutation theme={null}
          mutation withdrawCashBalance($input: WithdrawCashBalanceInput!) {
            withdrawCashBalance(input: $input) {
              withdraws { withdrawId amount status displayStatus withdrawMethod }
            }
          }
      ```

      ```json Variables theme={null}
          {
            "input": {
              "idempotencyKey": "550e8400-e29b-41d4-a716-446655440000",
              "amount": 50.00,
              "method": "BANK_ACH",
              "source": "CASH_BALANCE",
              "cashBalanceId": "<TEAM_TRAVEL_ACCOUNT_ID>",
              "bankAccountId": "<YOUR_TEST_BANK_ACCOUNT_ID>"
            }
          }
      ```
    </CodeGroup>

    `method` también acepta `BANK_CARD` (push-to-card, `bankCardId`), `PAYPAL` (`paypalVaultId`) y `VENMO` (`venmoAccountId`); cada uno requiere su campo de ID correspondiente. ACH típicamente liquida en 1–3 días hábiles, así que espera `PENDING` / `PROCESSING` al principio. Referencia completa: [Retirar a cuenta externa](/features/withdraw-to-external-account).
  </Step>

  <Step title="Verifica el libro mayor" icon="list-checks">
    Cierra el ciclo leyendo nuevamente las cuentas con `getUserCashBalances`:

    ```graphql theme={null}
        query {
          getUserCashBalances {
            userCashBalances {
              userCashBalanceId
              nickname
              availableCashBalance
              totalCashBalance
              lifetimeCashBalance
              isDefault
              status
            }
            totalCount
          }
        }
    ```

    Deberías ver la historia en los números: "Team Travel" con `lifetimeCashBalance` de 100.00 y un saldo disponible reducido (25 transferidos afuera, 50 retirándose), y tu cuenta predeterminada arriba 25.00. `lifetimeCashBalance` solo crece — es la pista de auditoría de todo lo que alguna vez se depositó.
  </Step>
</Steps>

## Listo 🎉

Has ejecutado el ciclo de vida completo del libro mayor: crear, fondear, mover, pagar, verificar. Estas cuentas son el sustrato del que se alimenta todo lo demás:

<CardGroup cols={2}>
  <Card title="Fondea una tarjeta virtual desde esta cuenta" icon="credit-card" href="/quickstart/create-and-spend-with-a-virtual-card">
    Apunta `userCashBalanceId` a tu nueva cuenta para un gasto con tarjeta por presupuesto, limpio.
  </Card>

  <Card title="Envía fondos a otro usuario de Fluz" icon="send" href="/features/account-to-account-transfers">
    Busca un destinatario y mueve dinero de billetera a billetera.
  </Card>

  <Card title="Administra cuentas de gasto" icon="settings" href="/features/edit-spend-accounts">
    Cambia el nombre, cierra y administra cuentas con el tiempo.
  </Card>

  <Card title="Actividad de transacciones" icon="receipt" href="/features/get-all-transactions">
    Cada movimiento anterior, en un solo feed filtrable con notas y categorías.
  </Card>
</CardGroup>

<Note>
  **¿Quieres saber más?** Contáctanos en [support@fluz.app](mailto:support@fluz.app) para hablar con nuestros expertos o solicitar una demo.
</Note>
