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

`requestReimbursement`

Envía una solicitud de aprobación de un gerente para reembolsar a un usuario moviendo fondos entre cuentas de gasto dentro de la misma cuenta. Cuando se aprueba, Fluz procesa el reembolso.

## Scopes

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

## Identificadores de Webhook

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

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

## Crear una solicitud

### RequestReimbursementInput

| Campo                          | Tipo   | Requerido | Descripción                                                                                     |
| ------------------------------ | ------ | --------- | ----------------------------------------------------------------------------------------------- |
| `amount`                       | Float  | Sí        | Monto del reembolso. Debe ser mayor que cero                                                    |
| `sourceUserCashBalanceId`      | UUID   | Sí        | Cuenta de gasto desde la que se retirarán fondos (típicamente un saldo de empresa o compartido) |
| `destinationUserCashBalanceId` | UUID   | Sí        | Cuenta de gasto a la que se acreditarán fondos (típicamente el saldo del solicitante)           |
| `memo`                         | String | No        | Memo de la transacción                                                                          |
| `categoryId`                   | UUID   | No        | ID de la categoría de la transacción                                                            |

El origen y el destino deben ser cuentas de gasto diferentes.

### Mutación de ejemplo

```graphql theme={null}
mutation {
  requestReimbursement(
    input: {
      amount: 75.00
      sourceUserCashBalanceId: "6d1b4b19-deef-42f5-80d7-ec34804ce090"
      destinationUserCashBalanceId: "bb584e49-d030-4a6e-a5a9-1c34368cbaed"
      memo: "Client dinner reimbursement"
    }
  ) {
    success
    messageId
    error {
      code
      message
    }
  }
}
```

### Respuesta de ejemplo

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

## 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 aprobarse, Fluz procesa la transferencia del reembolso.

## 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 procesa ningún reembolso cuando una solicitud es rechazada.
