Servicios
Guía completa de servicios de cenotes y tours, incluyendo opciones de transporte.
Vista General
Los servicios son ofertas adicionales que pueden ser:
| Tipo | Descripción | Precio |
|---|---|---|
included | Incluido en precio base | $0 |
optional | Se puede agregar por costo extra | Variable |
not_available | No disponible para este item | N/A |
Categorías de Servicio
| Categoría | Ejemplos |
|---|---|
transportation | Recogida en hotel, transporte privado |
equipment | Snorkel, chaleco, traje de neopreno |
guide | Guía bilingüe, instructor de buceo |
food | Desayuno, almuerzo, snacks |
photo | Fotos profesionales, video |
other | Casillero, ducha, toalla |
Obtener Servicios de Cenote
GET /cenotes/:id/services
Listar todos los servicios disponibles para un cenote específico.
curl -X GET "https://service-gateway.loscenotes.com/cenotes/cenote-uuid/services" \
-H "Content-Type: application/json" \
-H "Accept-Language: es"
Parámetros de Consulta:
| Parámetro | Tipo | Descripción |
|---|---|---|
bookableOnly | boolean | Solo mostrar servicios reservables por separado |
Respuesta:
{
"success": true,
"message": "cenote_services.list_retrieved_successfully",
"data": [
{
"id": "service-uuid-1",
"serviceId": "global-service-uuid",
"name": {
"es": "Chaleco salvavidas",
"en": "Life jacket"
},
"description": {
"es": "Chaleco salvavidas para todas las edades",
"en": "Life jacket for all ages"
},
"category": "equipment",
"inclusionType": "included",
"price": 0,
"isBookable": false,
"isActive": true,
"displayOrder": 1
},
{
"id": "service-uuid-2",
"serviceId": "global-service-uuid-2",
"name": {
"es": "Equipo de snorkel",
"en": "Snorkel equipment"
},
"description": {
"es": "Máscara, snorkel y aletas",
"en": "Mask, snorkel and fins"
},
"category": "equipment",
"inclusionType": "optional",
"price": 5000,
"isBookable": true,
"isActive": true,
"displayOrder": 2
},
{
"id": "service-uuid-3",
"serviceId": "global-service-uuid-3",
"name": {
"es": "Transporte desde hotel",
"en": "Hotel pickup"
},
"description": {
"es": "Recogida y regreso a tu hotel en la zona hotelera",
"en": "Pickup and return to your hotel in the hotel zone"
},
"category": "transportation",
"inclusionType": "included",
"price": 0,
"isBookable": false,
"isActive": true,
"displayOrder": 3,
"transportConfig": {
"vehicleTypes": ["van", "bus"],
"maxCapacity": 15,
"pricePerKm": 150
}
}
],
"currency": {
"code": "MXN",
"symbol": "$"
}
}
Puntos de Encuentro de Tours (Patrón Unificado)
GET /booking/tours/:tourId/meeting-points
Obtener puntos de encuentro de un tour. Mismo patrón que cenotes (/cenotes/:cenoteId/meeting-points).
Precio de transporte: zone-only vía POST /pricing/calculate-complete con pickupCoordinates.
curl -X GET "https://service-gateway.loscenotes.com/booking/tours/tour-uuid/meeting-points" \
-H "Content-Type: application/json"
Tipos de Transporte
meeting_point
El huésped llega al punto de encuentro designado por su cuenta.
- Precio: Generalmente gratis
- Requiere: Sin info adicional
hotel_pickup
Recogida y regreso al hotel del huésped.
- Precio: Fijo o basado en distancia
- Requiere:
pickupLocation- Nombre del hotelpickupLatitude- LatitudpickupLongitude- Longitud
private_transfer
Vehículo exclusivo para el grupo.
- Precio: Basado en tipo de vehículo
- Requiere: Igual que hotel_pickup más selección de vehículo
Tipos de Inclusión de Servicio
included
El servicio ya está incluido en el precio base. Sin cargo adicional.
{
"inclusionType": "included",
"price": 0,
"isBookable": false
}
optional
El servicio puede agregarse por un costo adicional. Debe seleccionarse explícitamente.
{
"inclusionType": "optional",
"price": 5000,
"isBookable": true
}
not_available
El servicio no está disponible para este cenote/tour.
{
"inclusionType": "not_available",
"price": null,
"isBookable": false
}
Usando Servicios en Precios
Al llamar /pricing/calculate-complete, incluye los IDs de servicios opcionales:
{
"itemType": "cenote",
"itemId": "cenote-uuid",
"ageBreakdown": {
"adult": 2,
"child": 1
},
"selectedServices": [
"optional-service-uuid-1",
"optional-service-uuid-2"
],
"transportationType": "hotel_pickup",
"pickupLocation": "Hotel Xcaret",
"pickupLatitude": 20.4567,
"pickupLongitude": -87.1234
}
La respuesta incluirá:
services.included- Lista de servicios incluidos (sin cargo extra)services.selected- Lista de servicios opcionales seleccionados (con costos)services.totalServicesCost- Costo total de servicios opcionales
Códigos de Error
| Código | Mensaje | Descripción |
|---|---|---|
SERVICE_NOT_FOUND | error.service.not_found | ID de servicio no encontrado |
SERVICE_NOT_AVAILABLE | error.service.not_available | Servicio no disponible para este item |
SERVICE_NOT_BOOKABLE | error.service.not_bookable | El servicio no puede reservarse por separado |