# Estado de una reserva hecha por la API

> GET /api/v1/reservas/{compraId}

`GET /api/v1/reservas/{compraId}`

Scope `reservas:leer`, solo clave secreta. Solo reservas creadas por la API v1 de este negocio.

> Autenticación: `Authorization: Bearer <clave>`. Ver [Autenticación](https://turnovapp.com/docs/autenticacion.md).

## Parámetros

| Nombre | En | Tipo | Obligatorio | Descripción |
| --- | --- | --- | --- | --- |
| `compraId` | path | string | Sí |  |

## Ejemplo

curl:

```bash
curl "https://turnovapp.com/api/v1/reservas/cmh4k2n9x0001" \
  -H "Authorization: Bearer $TURNOVA_CLAVE_SECRETA"
```

JavaScript:

```js
// Solo desde tu servidor (Node 18+): la clave secreta no va al navegador.
const res = await fetch("https://turnovapp.com/api/v1/reservas/cmh4k2n9x0001", {
  headers: {
    Authorization: `Bearer ${process.env.TURNOVA_CLAVE_SECRETA}`,
  },
});
const r = await res.json();
if (!r.ok) throw new Error(`${r.error.codigo}: ${r.error.mensaje}`);
```

## Respuestas

| HTTP | Qué significa |
| --- | --- |
| 200 | Estado |
| 401 | Clave faltante, inválida o revocada. |
| 403 | Origen no permitido, permiso faltante, clave secreta desde un navegador o plan sin la API (`PLAN_SIN_API`). |
| 404 | No existe o no es de este negocio. |
| 429 | Demasiados pedidos (`LIMITE_USO`): esperá `Retry-After` segundos. |
| 500 | Error técnico: reintentá con los mismos datos (y la misma `Idempotency-Key`). |

### Respuesta 200

```json
{
  "version": 1,
  "ok": true,
  "progreso": {
    "principal": "CONSULTADO"
  },
  "requiereRevision": false,
  "datos": {
    "compraId": "cmh4k2n9x0001",
    "total": 25000,
    "estadoPago": "SIN_SENA",
    "sena": {
      "monto": 6250,
      "checkoutUrl": "https://www.mercadopago.com.ar/checkout/v1/redirect?pref_id=123456-abcd"
    },
    "turnos": [
      {
        "turnoId": "cmh4k2pa10003",
        "estado": "CONFIRMADO"
      }
    ]
  }
}
```

| Campo | Tipo | Obligatorio | Descripción |
| --- | --- | --- | --- |
| `datos.compraId` | string | No |  |
| `datos.total` | number | No |  |
| `datos.estadoPago` | `SIN_SENA`, `PAGADA`, `PENDIENTE`, `VENCIDA`, `EN_EL_LOCAL`, `EN_REVISION` | No |  |
| `datos.sena` | object o null | No |  |
| `datos.sena.monto` | number | No |  |
| `datos.sena.checkoutUrl` | string o null | No | Solo mientras la seña está PENDIENTE. |
| `datos.turnos` | array de object | No |  |
| `datos.turnos[].turnoId` | string | No |  |
| `datos.turnos[].estado` | string | No |  |

Los errores siguen el formato común: ver [Errores](https://turnovapp.com/docs/errores.md).
