Services
Complete guide for cenote and tour services, including transportation options.
Overview
Services are additional offerings that can be:
| Type | Description | Price |
|---|---|---|
included | Included in base price | $0 |
optional | Can be added for extra cost | Variable |
not_available | Not available for this item | N/A |
Service Categories
| Category | Examples |
|---|---|
transportation | Hotel pickup, private transfer |
equipment | Snorkel, life vest, wetsuit |
guide | Bilingual guide, diving instructor |
food | Breakfast, lunch, snacks |
photo | Professional photos, video |
other | Locker, shower, towel |
Get Cenote Services
GET /cenotes/:id/services
List all available services for a specific cenote.
curl -X GET "https://service-gateway.loscenotes.com/cenotes/cenote-uuid/services" \
-H "Content-Type: application/json" \
-H "Accept-Language: es"
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
bookableOnly | boolean | Only show separately bookable services |
Response:
{
"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": "$"
}
}
Tour Transportation Options
GET /booking/tours/:tourId/transportation-options
Get available transportation options for a tour.
curl -X GET "https://service-gateway.loscenotes.com/booking/tours/tour-uuid/transportation-options" \
-H "Content-Type: application/json"
Response:
{
"success": true,
"message": "tour_transportation_options.retrieved_successfully",
"data": {
"tourId": "tour-uuid",
"options": [
{
"type": "meeting_point",
"name": {
"es": "Punto de encuentro",
"en": "Meeting point"
},
"description": {
"es": "Llega directamente al punto de encuentro",
"en": "Arrive directly at the meeting point"
},
"price": 0,
"available": true,
"meetingPoints": [
{
"id": "mp-1",
"name": "Entrada principal del cenote",
"address": "Carretera Tulum-Coba km 15",
"latitude": 20.2345,
"longitude": -87.4567
}
]
},
{
"type": "hotel_pickup",
"name": {
"es": "Recogida en hotel",
"en": "Hotel pickup"
},
"description": {
"es": "Te recogemos en el lobby de tu hotel",
"en": "We pick you up at your hotel lobby"
},
"price": 15000,
"available": true,
"zones": ["Cancun", "Playa del Carmen", "Riviera Maya"],
"pickupTimes": ["07:00", "07:30", "08:00"]
},
{
"type": "private_transfer",
"name": {
"es": "Transporte privado",
"en": "Private transfer"
},
"description": {
"es": "Vehículo exclusivo para tu grupo",
"en": "Exclusive vehicle for your group"
},
"price": 45000,
"available": true,
"vehicles": [
{
"type": "suv",
"capacity": 6,
"price": 45000
},
{
"type": "van",
"capacity": 12,
"price": 65000
}
]
}
]
}
}
Transportation Types
meeting_point
Guest arrives at the designated meeting point on their own.
- Price: Usually free
- Requires: No additional info
hotel_pickup
Pickup and drop-off at the guest's hotel.
- Price: Fixed or distance-based
- Requires:
pickupLocation- Hotel namepickupLatitude- LatitudepickupLongitude- Longitude
private_transfer
Exclusive vehicle for the group.
- Price: Based on vehicle type
- Requires: Same as hotel_pickup plus vehicle selection
Service Inclusion Types
included
Service is already included in the base price. No additional charge.
{
"inclusionType": "included",
"price": 0,
"isBookable": false
}
optional
Service can be added for an additional cost. Must be explicitly selected.
{
"inclusionType": "optional",
"price": 5000,
"isBookable": true
}
not_available
Service is not available for this cenote/tour.
{
"inclusionType": "not_available",
"price": null,
"isBookable": false
}
Using Services in Pricing
When calling /pricing/calculate-complete, include optional service IDs:
{
"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
}
The response will include:
services.included- List of included services (no extra charge)services.selected- List of selected optional services (with costs)services.totalServicesCost- Total cost of optional services
Error Codes
| Code | Message | Description |
|---|---|---|
SERVICE_NOT_FOUND | error.service.not_found | Service ID not found |
SERVICE_NOT_AVAILABLE | error.service.not_available | Service not available for this item |
SERVICE_NOT_BOOKABLE | error.service.not_bookable | Service cannot be booked separately |