Reprogramar una reserva
POST /api/v1/bookings/{bookingId}/reschedule
Mueve una reserva por horas por fecha/hora/duración, o una estancia por noches por fechas de llegada y de salida.
El precio se mantiene. Si priceAmount no está en el cuerpo, no se escribe — el precio fijado se queda.
Enviarlo es una renegociación explícita.
La reserva queda excluida de su propia comprobación de colisiones: moverla una hora en la misma villa no es un conflicto. Mover al pasado está permitido — registrar una franja que se desplazó ayer es trabajo real — y el horario de apertura y las colisiones se siguen aplicando.
Autorización
| Rol en la organización | Este endpoint |
|---|---|
owner | Permitido |
admin | Permitido |
member | Permitido |
Cuerpo de la petición
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
propertyId | uuid | sí | Villa de destino, activa, en la misma organización |
date | cadena | SHOOT | Día local YYYY-MM-DD |
startMinute | entero | SHOOT | Minutos desde la medianoche local |
durationMinutes | entero | SHOOT | Debe tener precio en la villa de destino |
checkInDay | cadena | OVERNIGHT | Día de llegada YYYY-MM-DD |
checkOutDay | cadena | OVERNIGHT | Día de salida, estrictamente posterior a la llegada |
priceAmount | entero o null | no | Nuevo precio explícito; ausente/null conserva el precio fijado |
Ejemplo
curl -X POST -H "x-api-key: $VILLASLOT_API_KEY" -H "content-type: application/json" \
-d '{"propertyId":"1f0a…","date":"2026-09-13","startMinute":600,"durationMinutes":120}' \
"https://villaslot.app/api/v1/bookings/5b2c…/reschedule"Para una estancia por noches existente, envía:
{
"propertyId": "<target-villa-uuid>",
"checkInDay": "2026-09-10",
"checkOutDay": "2026-09-12"
}El servidor lee el tipo de reserva y los checkInMinute /
checkOutMinute actuales de la villa de destino. Una villa en 14:00 / 11:00 produce dos noches naturales, del día 10 a las
14:00 al día 12 a las 11:00, en la zona horaria de la organización. Se aplican la regla de noches mínimas y
las comprobaciones de conflicto de estancias; las estancias por noches conservan un margen cero y no necesitan tarifa
por horas. Las horas históricas no cambian hasta que una reprogramación tiene éxito. La misma
transacción conserva el registro de pagos y anota el historial de antes/después.
Mezclar las dos formas de cuerpo, o enviar una para el otro tipo de reserva, se rechaza.
Respuesta
200 OK— la reserva movida.
Qué rechaza
409 Conflict— la franja de destino, o su margen, está ocupada;detailindica lo que bloquea.422 Unprocessable Entity— la reserva no es ni provisional ni confirmada, la villa de destino no se puede reservar, la duración no tiene tarifa en ella, las fechas no son válidas o son más cortas que la estancia mínima, o el cuerpo no corresponde al tipo de reserva guardado.401 Unauthorized— clave ausente o no válida, o clave cuyo portador ha dejado la organización.404 Not Found— identificador desconocido, o identificador que pertenece a otra organización. Los dos son deliberadamente indistinguibles.429 Too Many Requests— más de 120 peticiones en un minuto para esta clave.