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

# Solicitar Aprobación de Transferencia de Cuenta

`requestAccountTransfer`

Envía una solicitud de aprobación de gerente para una transferencia de cuenta a cuenta. Cuando se aprueba, Fluz ejecuta la transferencia utilizando la misma semántica que `createTransfer`.

Usa esto cuando un usuario o una aplicación necesiten la firma de un gerente antes de mover fondos entre cuentas de Fluz. Para transferencias entre cuentas de gasto dentro de la misma cuenta, usa `requestInternalTransfer` en su lugar.

## Alcances

| Acción             | Scope                      |
| ------------------ | -------------------------- |
| Crear solicitud    | `REQUEST_ACCOUNT_TRANSFER` |
| Listar solicitudes | `LIST_APPROVALS`           |
| Aprobar o rechazar | `MANAGE_APPROVALS`         |

## Identificadores de Webhook

| Campo          | Valor    |
| -------------- | -------- |
| `approvalType` | `PAYOUT` |
| `approvalCode` | `500402` |

Eventos de webhook: `APPROVAL_CREATE`, `APPROVAL_APPROVE`, `APPROVAL_DECLINE` y `APPROVAL_HANDLER_ERROR` en caso de falla de ejecución.

> Las transferencias internas y las transferencias de cuenta comparten el mismo `approvalType` y `approvalCode`. Usa la mutación de solicitud original o inspecciona el payload de la aprobación en tu integración para distinguirlas.

## Crear una Solicitud

La entrada refleja [Transferir a otra billetera de Fluz](/features/transfer-to-another-fluz-wallet). El remitente se determina a partir de la autenticación; el destino y las fuentes de fondos siguen las mismas reglas que `createTransfer`.

### RequestAccountTransferInput

| Campo                 | Tipo                | Requerido | Descripción                                                                                      |
| --------------------- | ------------------- | --------- | ------------------------------------------------------------------------------------------------ |
| `idempotencyKey`      | UUID                | Sí        | Clave única para evitar transferencias duplicadas al aprobar                                     |
| `amount`              | Float               | Sí        | Monto a transferir. Debe ser mayor que cero                                                      |
| `destination`         | TransferDestination | Depende   | Cuenta receptora. Requerida para Basic Auth; opcional para Bearer (predetermina a tu aplicación) |
| `bankCardId`          | UUID                | No        | Fondos de una tarjeta bancaria vinculada. Solo token Bearer                                      |
| `bankAccountId`       | UUID                | No        | Fondos vía ACH. Solo token Bearer                                                                |
| `paypalVaultId`       | UUID                | No        | Fondos desde PayPal. Solo token Bearer                                                           |
| `memo`                | String              | No        | Memo de la transacción                                                                           |
| `transactionCategory` | String              | No        | Etiqueta de categoría; se crea automáticamente en el primer uso                                  |
| `attachmentId`        | String              | No        | ID de un adjunto de transacción cargado previamente                                              |

### TransferDestination

| Campo                 | Tipo   | Descripción                                                |
| --------------------- | ------ | ---------------------------------------------------------- |
| `accountId`           | UUID   | ID de la cuenta de Fluz receptora                          |
| `externalReferenceId` | String | ID de referencia externa del destinatario desde tu sistema |
| `userCashBalanceId`   | UUID   | Cuenta de gasto de destino opcional en la cuenta receptora |

Proporciona `accountId` o `externalReferenceId`, no ambos.

### Notas de Autenticación

| Método       | Remitente           | Notas                                                                          |
| ------------ | ------------------- | ------------------------------------------------------------------------------ |
| Bearer token | Usuario autenticado | Se permiten fuentes de fondos; destino opcional (predetermina a tu aplicación) |
| Basic Auth   | Tu aplicación       | Destino requerido; no se permiten fuentes de fondos                            |

### Mutación de Ejemplo — Usuario a Aplicación

```graphql theme={null}
mutation {
  requestAccountTransfer(
    input: {
      idempotencyKey: "550e8400-e29b-41d4-a716-446655440000"
      amount: 100.00
    }
  ) {
    success
    messageId
    error {
      code
      message
    }
  }
}
```

### Mutación de Ejemplo — Aplicación a Usuario

```graphql theme={null}
mutation {
  requestAccountTransfer(
    input: {
      idempotencyKey: "550e8400-e29b-41d4-a716-446655440001"
      amount: 50.00
      destination: {
        accountId: "c3d4e5f6-a7b8-9012-cdef-345678901234"
      }
    }
  ) {
    success
    messageId
    error {
      code
      message
    }
  }
}
```

### Respuesta de Ejemplo

```json theme={null}
{
  "data": {
    "requestAccountTransfer": {
      "success": true,
      "messageId": "1234567890"
    }
  }
}
```

El `idempotencyKey` se conserva y se utiliza cuando la transferencia se ejecuta tras la aprobación.

## Aprobar una Solicitud

Llama a `approveApprovalRequest` con el `approvalId`. Requiere `MANAGE_APPROVALS`.

```graphql theme={null}
mutation {
  approveApprovalRequest(approvalId: "07df5653-43a8-4532-9881-3ab5857bbe12") {
    success
    approvalId
    action
  }
}
```

Al aprobar, Fluz ejecuta la transferencia de cuenta.

## Rechazar una Solicitud

Llama a `declineApprovalRequest` con el `approvalId`. Requiere `MANAGE_APPROVALS`.

```graphql theme={null}
mutation {
  declineApprovalRequest(approvalId: "07df5653-43a8-4532-9881-3ab5857bbe12") {
    success
    approvalId
    action
  }
}
```

No se ejecuta ninguna transferencia cuando se rechaza una solicitud.
