> ## 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 Tarjeta Virtual

`requestVirtualCard`

Envía una solicitud de aprobación de un gerente para crear una tarjeta virtual. Cuando se aprueba, Fluz crea la tarjeta utilizando los parámetros enviados.

## Scopes

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

## Identificadores de Webhook

| Campo          | Valor                   |
| -------------- | ----------------------- |
| `approvalType` | `VIRTUAL_CARD_CREATION` |
| `approvalCode` | `600003`                |

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

## Crear una Solicitud

### RequestVirtualCardInput

| Campo                | Tipo                          | Requerido | Descripción                                                                                |
| -------------------- | ----------------------------- | --------- | ------------------------------------------------------------------------------------------ |
| `seatId`             | UUID                          | Sí        | Asiento asociado con el solicitante                                                        |
| `offerId`            | UUID                          | Sí        | ID de la oferta de tarjeta virtual. Usa `getVirtualCardOffers` para listar ofertas activas |
| `purchaseAmount`     | Float                         | Sí        | Monto de compra para la tarjeta                                                            |
| `channel`            | SourcePlatformChannel         | Sí        | Canal de origen de la solicitud (por ejemplo, `API`)                                       |
| `fluzpayAmount`      | Float                         | Sí        | Monto a fondear desde el saldo de Fluz                                                     |
| `spendLimitDuration` | VirtualCardSpendLimitDuration | Sí        | Duración del límite: `DAILY`, `WEEKLY`, `MONTHLY`, `ANNUAL`, o `LIFETIME`                  |
| `virtualCardPIN`     | String                        | No        | PIN opcional de la tarjeta                                                                 |
| `brandLocked`        | Boolean                       | No        | Bloquear la tarjeta a una marca de comercio específica                                     |
| `mccId`              | String                        | No        | Restricción por categoría de comercio                                                      |
| `shareWith`          | \[String]                     | No        | IDs de usuario con quienes compartir la tarjeta                                            |
| `pinAuthToken`       | String                        | No        | Token de autorización de PIN cuando sea requerido                                          |

### Mutación de Ejemplo

```graphql theme={null}
mutation {
  requestVirtualCard(
    input: {
      seatId: "db11ec6c-c371-4184-ab6a-3dfb2c92c4d3"
      offerId: "b23630f6-8d91-43df-84aa-a541e7691197"
      purchaseAmount: 100.00
      channel: API
      fluzpayAmount: 100.00
      spendLimitDuration: MONTHLY
    }
  ) {
    success
    messageId
    error {
      code
      message
    }
  }
}
```

### Respuesta de Ejemplo

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

## Aprobar una Solicitud

Llama a `approveApprovalRequest` con el `approvalId` de `approvalRequests` o del webhook `APPROVAL_CREATE`. Requiere `MANAGE_APPROVALS`.

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

Al aprobar, Fluz crea la tarjeta virtual con los parámetros de la solicitud original.

## 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 crea ninguna tarjeta virtual cuando una solicitud es rechazada.
