# Gestionar preautorizaciones y confirmaciones

El flujo de Preautorización te permite reservar fondos en la tarjeta de un cliente (Retención) y capturarlos más tarde (Confirmar). Esto es distinto de una "Venta" (Sale) estándar donde los fondos se capturan inmediatamente.

Este proceso implica dos operaciones de API distintas:

1. **Preautorización (`/preautorizacion`):** El terminal verifica la tarjeta y retiene los fondos.  
2. **Confirmación (`/confirmacion`):** Capturas explícitamente los fondos (total o parcialmente) para completar la transacción.

## Fase 1: Crear la preautorización

El primer paso es iniciar la retención. Esto es muy similar a una petición de pago estándar, pero utiliza un endpoint diferente.

* **Endpoint:** `/preautorizacion`
* **Método:** `POST`

### Paso 1.1: Enviar la petición

Envía el importe que quieres retener. Debes proporcionar una `factura` (ID de factura) única que servirá como referencia para la futura confirmación.

```json
{
  "info": {
    "comercio": "777888991",
    "terminal": 1,
    "timestamp": "20250428 120000",
    "notificacion": {
      "urlNotificacion": "https://your-server.com/api/webhooks/preauth",
      "correoNotificacion": "admin@merchant.com"
    },
    "datosOperacion": {
      "importe": "100.00",
      "factura": "RES-Hotel-001"
    }
  },
  "signature": "YOUR_CALCULATED_SIGNATURE"
}
```

### Paso 1.2: Recibir la notificación

Al igual que un pago estándar, la interacción con el terminal físico es asíncrona. Recibirás una notificación en tu `urlNotificacion`.

* `tipoPago`: Será `PREAUTORIZACION`.  
* `resultado`: Busca `Autorizada`.  
* **Acción**: **No** consideres el dinero como recibido. Considera únicamente que los fondos están "reservados" o "retenidos".

## Fase 2: Confirmar la transacción

Cuando estés listo para cobrar al cliente (p. ej., check-out de un huésped, devolución de un coche de alquiler), debes enviar una petición de confirmación.

> **Referencias coincidentes**: La `factura` (ID de factura) utilizada en la confirmación **debe** coincidir con la `factura` utilizada en la preautorización original. Así es como el sistema enlaza la captura con la retención.

* **Endpoint:** `/confirmacion`  
* **Método:** `POST`

### Paso 2.1: Enviar la petición de confirmación

Se especifica el importe a capturar.

```json
{
  "info": {
    "comercio": "777888991",
    "terminal": 1,
    "timestamp": "20250429 080000",
    "datosOperacion": {
      "importe": "100.00",
      "factura": "RES-Hotel-001"
    }
  },
  "signature": "YOUR_CALCULATED_SIGNATURE"
}
```

### Paso 2.2: Gestionar la respuesta

A diferencia de la interacción inicial, la Confirmación a menudo se procesa de servidor a servidor (server-to-server) sin requerir que el titular de la tarjeta vuelva a insertar su tarjeta.

Recibirás una notificación confirmando la captura:

* `resultado`: `Autorizada`.

## Consideraciones importantes

* **Gestión de errores:** Si intentas confirmar una operación que no existe o que ya ha sido confirmada, puedes recibir códigos de error específicos.  
  * `TPVPC0094`: "No es posible realizar más confirmaciones sobre la preautorización original".

## Próximos pasos

* [**Devolver un pago**](/es/get-smart/get-smart-api-cloud/integration-guides/refund-a-payment)**:** Aprende a devolver fondos si se realizó una confirmación por error.  
* [**Consultar el historial de transacciones**](/es/get-smart/get-smart-api-cloud/integration-guides/query-transaction-history)**:** Comprueba el estado de tus preautorizaciones si no estás seguro de si están confirmadas.