Reservas
Endpoints para crear y gestionar reservas.
POST
/api/v1/reservas/crear/
Crea una nueva reserva.
Autenticaci贸n
Este endpoint puede usarse sin JWT para reservas de invitados, o con JWT para clientes autenticados.
Body parameters
| Par谩metro | Tipo | Requerido | Descripci贸n |
|---|---|---|---|
servicio_ids |
array | S铆 | Array de IDs de servicios |
peluquero_id |
integer | S铆 | ID del profesional |
fecha |
string | S铆 | Fecha (YYYY-MM-DD) |
hora_inicio |
string | S铆 | Hora de inicio (HH:MM) |
nombre |
string | S铆* | Nombre del cliente (*si no JWT) |
email |
string | S铆* | Email del cliente (*si no JWT) |
telefono |
string | S铆* | Tel茅fono (*si configurado como requerido) |
notas |
string | No | Notas adicionales |
usar_puntos |
boolean | No | Pagar con puntos de fidelidad |
Ejemplo de petici贸n
cURL
curl -X POST "https://app.salonbookit.com/api/v1/reservas/crear/" \
-H "X-API-Key: hh_pub_live_abc123..." \
-H "Content-Type: application/json" \
-d '{
"servicio_ids": [15],
"peluquero_id": 5,
"fecha": "2024-01-20",
"hora_inicio": "10:30",
"nombre": "Juan P茅rez",
"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 Cl谩sico",
"precio": 25.00,
"duracion_minutos": 30
}
],
"profesional": {
"id": 5,
"nombre": "Carlos Garc铆a"
},
"cliente": {
"id": 456,
"nombre": "Juan P茅rez",
"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
| Par谩metro | Tipo | Descripci贸n |
|---|---|---|
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
| Par谩metro | Tipo | Descripci贸n |
|---|---|---|
id |
integer | ID de la reserva |
Consulta por c贸digo
Tambi茅n puedes consultar usando el c贸digo: /reservas/codigo/{codigo}/
POST
/api/v1/reservas/{id}/cancelar/
Cancela una reserva existente.
Body parameters
| Par谩metro | Tipo | Requerido | Descripci贸n |
|---|---|---|---|
motivo |
string | No | Raz贸n de la cancelaci贸n |
Ejemplo de petici贸n
cURL
curl -X POST "https://app.salonbookit.com/api/v1/reservas/12345/cancelar/" \
-H "X-API-Key: hh_pub_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
| C贸digo | HTTP | Descripci贸n |
|---|---|---|
BOOKING_NOT_FOUND |
404 | Reserva no encontrada |
CANNOT_CANCEL |
400 | La reserva no puede cancelarse (ya pas贸 o ya cancelada) |
CANCELLATION_DEADLINE_PASSED |
400 | Pas贸 el plazo de cancelaci贸n (ej: 24h antes) |
Estados de reserva
| Estado | Descripci贸n |
|---|---|
pendiente |
Reserva creada, pendiente de confirmaci贸n |
confirmada |
Reserva confirmada por el negocio |
completada |
Servicio realizado |
cancelada |
Cancelada por cliente o negocio |
no_show |
Cliente no se present贸 |