Reservas
Endpoints para crear y gestionar reservas.
POST
/api/v1/reservas/crear/
Crea una nueva reserva.
Autenticacion
Este endpoint puede usarse sin JWT para reservas de invitados, o con JWT para clientes autenticados.
Body parameters
| Parametro | Tipo | Requerido | Descripcion |
|---|---|---|---|
servicio_ids |
array | Si | Array de IDs de servicios |
peluquero_id |
integer | Si | ID del profesional |
fecha |
string | Si | Fecha (YYYY-MM-DD) |
hora_inicio |
string | Si | Hora de inicio (HH:MM) |
nombre |
string | Si* | Nombre del cliente (*si no JWT) |
email |
string | Si* | Email del cliente (*si no JWT) |
telefono |
string | Si* | Telefono (*si configurado como requerido) |
notas |
string | No | Notas adicionales |
usar_puntos |
boolean | No | Pagar con puntos de fidelidad |
Ejemplo de peticion
cURL
curl -X POST "https://app.salonbookit.com/api/v1/reservas/crear/" \
-H "X-API-Key: hh_live_abc123..." \
-H "Content-Type: application/json" \
-d '{
"servicio_ids": [15],
"peluquero_id": 5,
"fecha": "2024-01-20",
"hora_inicio": "10:30",
"nombre": "Juan Perez",
"email": "juan@email.com",
"telefono": "+34612345678",
"notas": "Primera visita"
}'
Respuesta (201 Created)
JSON
{
"success": true,
"data": {
"id": 12345,
"codigo": "ABC123XY",
"fecha": "2024-01-20",
"hora_inicio": "10:30",
"hora_fin": "11:00",
"servicios": [
{
"id": 15,
"nombre": "Corte Clasico",
"precio": 25.00,
"duracion_minutos": 30
}
],
"profesional": {
"id": 5,
"nombre": "Carlos Garcia"
},
"cliente": {
"id": 456,
"nombre": "Juan Perez",
"email": "juan@email.com",
"telefono": "+34612345678"
},
"subtotal": 25.00,
"descuento": 0.00,
"total": 25.00,
"moneda": "EUR",
"estado": "confirmada",
"pago_requerido": false,
"pago_pendiente": true,
"puntos_ganados": 25,
"created_at": "2024-01-15T14:30:00Z"
}
}
GET
/api/v1/cliente/reservas/
Lista las reservas del cliente autenticado.
Requiere JWTQuery parameters
| Parametro | Tipo | Descripcion |
|---|---|---|
estado |
string | Filtrar: pendiente, confirmada, completada, cancelada |
desde |
string | Fecha desde (YYYY-MM-DD) |
hasta |
string | Fecha hasta (YYYY-MM-DD) |
Respuesta (200 OK)
JSON
{
"success": true,
"data": {
"reservas": [
{
"id": 12345,
"codigo": "ABC123XY",
"fecha": "2024-01-20",
"hora_inicio": "10:30",
"hora_fin": "11:00",
"servicios": [...],
"profesional": {...},
"total": 25.00,
"estado": "confirmada",
"puede_cancelar": true
}
],
"proxima_reserva": {
"id": 12345,
"fecha": "2024-01-20",
"hora_inicio": "10:30"
},
"total": 15
}
}
GET
/api/v1/reservas/{id}/
Obtiene el detalle de una reserva.
Path parameters
| Parametro | Tipo | Descripcion |
|---|---|---|
id |
integer | ID de la reserva |
Consulta por codigo
Tambien puedes consultar usando el codigo: /reservas/codigo/{codigo}/
POST
/api/v1/reservas/{id}/cancelar/
Cancela una reserva existente.
Body parameters
| Parametro | Tipo | Requerido | Descripcion |
|---|---|---|---|
motivo |
string | No | Razon de la cancelacion |
Ejemplo de peticion
cURL
curl -X POST "https://app.salonbookit.com/api/v1/reservas/12345/cancelar/" \
-H "X-API-Key: hh_live_abc123..." \
-H "Authorization: Bearer eyJhbG..." \
-H "Content-Type: application/json" \
-d '{"motivo": "Cambio de planes"}'
Respuesta (200 OK)
JSON
{
"success": true,
"data": {
"id": 12345,
"estado": "cancelada",
"cancelada_en": "2024-01-15T16:00:00Z",
"reembolso": {
"aplica": true,
"monto": 25.00,
"estado": "pendiente"
}
}
}
Errores
| Codigo | HTTP | Descripcion |
|---|---|---|
BOOKING_NOT_FOUND |
404 | Reserva no encontrada |
CANNOT_CANCEL |
400 | La reserva no puede cancelarse (ya paso o ya cancelada) |
CANCELLATION_DEADLINE_PASSED |
400 | Paso el plazo de cancelacion (ej: 24h antes) |
Estados de reserva
| Estado | Descripcion |
|---|---|
pendiente |
Reserva creada, pendiente de confirmacion |
confirmada |
Reserva confirmada por el negocio |
completada |
Servicio realizado |
cancelada |
Cancelada por cliente o negocio |
no_show |
Cliente no se presento |