Dashboard

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 JWT

Query 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