Skip to main content

Services

Complete guide for cenote and tour services, including transportation options.


Overview

Services are additional offerings that can be:

TypeDescriptionPrice
includedIncluded in base price$0
optionalCan be added for extra costVariable
not_availableNot available for this itemN/A

Service Categories

CategoryExamples
transportationHotel pickup, private transfer
equipmentSnorkel, life vest, wetsuit
guideBilingual guide, diving instructor
foodBreakfast, lunch, snacks
photoProfessional photos, video
otherLocker, 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:

ParameterTypeDescription
bookableOnlybooleanOnly 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 name
    • pickupLatitude - Latitude
    • pickupLongitude - 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

CodeMessageDescription
SERVICE_NOT_FOUNDerror.service.not_foundService ID not found
SERVICE_NOT_AVAILABLEerror.service.not_availableService not available for this item
SERVICE_NOT_BOOKABLEerror.service.not_bookableService cannot be booked separately