Appearance
🚢 Solnow Booking Engine API ​
API pública para integrar el motor de reservas de Solnow en sitios web y aplicaciones.
Flujo Básico ​
El flujo tÃpico para crear una reserva desde una web externa consta de 6 pasos:
Buscar → Detalle → Disponibilidad → Calcular Precio → Sesión → Pago| Paso | Endpoint | Descripción |
|---|---|---|
| 1 | POST /website/search | Buscar experiencias con filtros |
| 2 | GET /website/experiences/detail | Obtener detalle completo |
| 3 | GET /website/experiences/{id}/availability | Consultar disponibilidad mensual |
| 4 | POST /website/calculate-price | Calcular precio con extras |
Paso 1: Buscar Experiencias (POST /website/search) ​
Encuentra embarcaciones disponibles según ubicación, fechas y capacidad.
bash
curl -X POST "https://app.nautisync.com/website/search?organization_id=123" \
-H "Content-Type: application/json" \
-d '{
"organization_id": 123,
"common_filters": {
"adults": 4,
"children": 2,
"city": "Valencia",
"start_date": "2025-04-01T00:00:00Z",
"end_date": "2025-04-30T00:00:00Z"
},
"experience_filters": {
"exclusivity_type": "private"
},
"boat_filters": {
"types": ["vela", "motor"]
},
"pagination": {
"page": 1,
"page_size": 20
}
}'json
{
"experiences": [
{
"experience_id": 456,
"title": "Paseo en Velero por Valencia",
"description": "Disfruta de un paseo de 2 horas...",
"boat_name": "Mar Azul",
"boat_model": "Beneteau Oceanis 40",
"boat_type": "Velero",
"exclusivity_type": "private",
"booking_type": "rental",
"capacity": {
"max_adults": 8,
"max_children": 4,
"max_passengers": 12
},
"location": {
"city": "Valencia",
"country": "España"
},
"pricing_hint": {
"from_price": 150,
"currency": "EUR",
"hourly_from": 75,
"price_type": "hourly"
},
"slots": [
{
"start_time": "2025-04-15T10:00:00Z",
"end_time": "2025-04-15T12:00:00Z",
"duration": {"value": 2, "unit": "hours"},
"estimated_price": 150,
"price_per_unit": 75,
"booking_policy_id": 12
}
],
"picture": "https://cdn.solnow.io/exp/456-thumb.jpg",
"images": ["https://cdn.solnow.io/exp/456.jpg"],
"link_to_website": "https://chartervalencia.solnow.io/experience/paseo-velero-valencia"
}
],
"total": 87,
"page": 1,
"page_size": 20,
"total_pages": 5
}Guarda el experience_id (ej: 456) para los siguientes pasos.
Paso 2: Obtener Detalle de la Experiencia (GET /website/experiences/detail) ​
Obtén información completa de una experiencia especÃfica.
bash
curl "https://app.nautisync.com/website/experiences/detail?id=456&organization_id=123"bash
curl "https://app.nautisync.com/website/experiences/detail?slug=paseo-velero-valencia&organization_id=123"json
{
"id": 456,
"url_slug": "paseo-velero-valencia",
"title": "Paseo en Velero por Valencia",
"description": "Disfruta de un paseo de 2 horas por la costa de Valencia...",
"boat_name": "Mar Azul",
"boat_model": "Beneteau Oceanis 40",
"boat_type": "Velero",
"exclusivity_type": "shared",
"booking_type": "rental",
"is_multi_boat_pool": false,
"pool_boat_count": 1,
"total_pool_capacity": 8,
"max_units_bookable": 1,
"capacity": {
"max_adults": 8,
"max_children": 4,
"max_passengers": 12
},
"location": {
"city": "Valencia",
"country": "España",
"harbor": "Puerto de Valencia",
"latitude": 39.4667,
"longitude": -0.3667,
"google_maps_link": "https://maps.google.com/..."
},
"equipment": ["GPS", "VHF", "Chalecos salvavidas", "Nevera"],
"amenities": ["Solarium", "Escalera de baño", "Toldo"],
"picture": "https://cdn.solnow.io/exp/456.jpg",
"video_url": "https://cdn.solnow.io/exp/456-video.mp4",
"images": [
"https://cdn.solnow.io/exp/456-1.jpg",
"https://cdn.solnow.io/exp/456-2.jpg",
"https://cdn.solnow.io/exp/456-3.jpg"
],
"pricing_hint": {
"from_price": 150,
"currency": "EUR",
"hourly_from": 75,
"daily_from": 0,
"price_type": "hourly"
},
"fuel_included": true,
"requires_license": false,
"min_age": 0,
"allow_children": true,
"with_captain": "optional",
"booking_policies": [
{
"id": 12,
"name": "Temporada Alta",
"pricing_hint": {
"from_price": 150,
"currency": "EUR"
}
}
],
"extras": [
{
"id": 101,
"name": "Catering Premium",
"description": "Selección de tapas y bebidas",
"price": 45.00,
"price_per_day": false,
"price_per_pax": true,
"mandatory": false,
"optionality": "Optional",
"payment_type": "Online",
"price_tiers": []
},
{
"id": 102,
"name": "Patrón Profesional",
"description": "Patrón experimentado incluido",
"price": 80.00,
"price_per_day": true,
"price_per_pax": false,
"mandatory": false,
"optionality": "Optional",
"payment_type": "Online",
"price_tiers": []
}
],
"deposit": 300.00,
"widget_config": {
"badge": {
"image_url": "https://cdn.solnow.io/badges/popular.png",
"position": "top_right",
"size": "medium"
}
},
"has_real_time_updates": true,
"is_shared": true,
"custom_html": null,
"boats": [
{
"name": "Mar Azul",
"type": "Velero",
"ship_model": "Beneteau Oceanis 40",
"manufacturer": "Beneteau",
"length": 12.5,
"width": 4.2,
"year": "2018",
"capacity": 8,
"cabins": 2,
"beds": 4,
"bathrooms": 1,
"max_speed": 12.5,
"engine": "Yanmar 40cv",
"consumption": 5.5,
"night_capacity": 4,
"location": {
"city": "Valencia",
"country": "España"
}
}
],
"cancellation_policy": {
"id": 5,
"name": "Flexible",
"description": "Cancelación gratuita hasta 48h antes",
"default_penalty_percent": 0,
"rules": [
{
"days_in_advance": 7,
"refund_percent": 100
},
{
"days_in_advance": 2,
"refund_percent": 50
}
]
}
}Paso 3: Consultar Disponibilidad (GET /website/experiences/{id}/availability) ​
Obtén los dÃas disponibles del mes para la experiencia seleccionada.
bash
curl "https://app.nautisync.com/website/experiences/456/availability?year=2025&month=4&organization_id=123"json
{
"experience_id": 456,
"year": 2025,
"month": 4,
"available_days": [
{
"date": "2025-04-15T00:00:00Z",
"has_slots": true,
"slot_count": 2,
"check_in_available": true,
"check_out_available": true,
"units_available": 3,
"total_units": 5,
"is_shared": false
},
{
"date": "2025-04-16T00:00:00Z",
"has_slots": false,
"slot_count": 0,
"is_shared": false
}
],
"slots_by_policy": [
{
"booking_policy_id": 12,
"policy_name": "Temporada Alta",
"policy_type": "daily",
"is_overnight": false,
"min_duration": 2,
"max_duration": 8,
"pricing_hint": {
"from_price": 150,
"currency": "EUR"
},
"slots": [
{
"start_time": "2025-04-15T10:00:00Z",
"end_time": "2025-04-15T12:00:00Z",
"duration": {"value": 2, "unit": "hours"},
"date": "2025-04-15",
"available_boats": 3,
"total_boats": 5,
"available_capacities": [6, 8, 10]
},
{
"start_time": "2025-04-15T18:00:00Z",
"end_time": "2025-04-15T20:00:00Z",
"duration": {"value": 2, "unit": "hours"},
"date": "2025-04-15",
"available_boats": 2,
"total_boats": 5,
"instance_id": 789,
"available_spots": 4,
"occupied_spots": 2,
"total_capacity": 6,
"is_full": false
}
]
}
],
"unavailable_periods": [
{
"start_time": "2025-04-20T00:00:00Z",
"end_time": "2025-04-25T00:00:00Z"
}
]
}Para experiencias compartidas (shared): Guarda el instance_id del slot elegido (aparece en slots_by_policy[].slots[].instance_id).
Para experiencias privadas (private): No necesitas instance_id, las fechas son flexibles.
TIP
El campo instance_id es obligatorio solo para experiencias compartidas. Para privadas, el sistema asigna automáticamente los barcos disponibles.
Paso 4: Calcular Precio (POST /website/calculate-price) ​
Obtén el desglose completo del precio incluyendo extras e impuestos.
bash
curl -X POST "https://app.nautisync.com/website/calculate-price?organization_id=123" \
-H "Content-Type: application/json" \
-d '{
"experience_id": 456,
"booking_policy_id": 12,
"adults": 4,
"children": 2,
"start_date": "2025-04-15T10:00:00Z",
"end_date": "2025-04-15T12:00:00Z",
"start_time": "10:00",
"end_time": "12:00",
"units_needed": 1,
"extra_ids": [101]
}'json
{
"available": true,
"price_breakdown": {
"base_price": 150.00,
"price_per_unit": 75.00,
"extras": [
{
"id": 101,
"name": "Catering Premium",
"description": "Selección de tapas y bebidas",
"unit_price": 45.00,
"quantity": 6,
"subtotal": 270.00,
"unit": "person",
"payment_type": "Online"
}
],
"extras_total": 270.00,
"subtotal": 420.00,
"tax_rate": 21.00,
"tax_amount": 88.20,
"grand_total": 508.20,
"prices_include_iva": false,
"pay_at_pickup_extras": [],
"deposit": 152.46,
"advance_payment_percentage": 30.00,
"advance_amount": 152.46,
"remaining_amount": 355.74,
"currency": "EUR",
"duration": 2.00,
"duration_unit": "hours",
"check_in_time": "10:00",
"check_out_time": "12:00",
"is_overnight": false
}
}Guarda el booking_policy_id que devuelve el cálculo (se necesita para crear la sesión).
Referencia de Endpoints ​
Autenticación ​
Todas las peticiones requieren identificar la organización mediante el query param:
?organization_id=123Ejemplo:
GET /website/search?organization_id=123GET /website/config ​
Obtiene la configuración pública del booking engine.
Query params:
| Campo | Requerido | Descripción |
|---|---|---|
organization_id | No | ID de la organización |
Response 200:
json
{
"checkout_form_id": 42,
"allow_children": true,
"prices_include_iva": true,
"whatsapp_phone": "+34612345678",
"show_mooring": true
}GET /website/experiences/detail ​
Obtiene el detalle completo de una experiencia.
Query params:
| Campo | Requerido | Descripción |
|---|---|---|
id | SÃ* | ID de la experiencia |
slug | SÃ* | URL slug de la experiencia |
organization_id | No | ID de la organización |
* Debes enviar id o slug
Response 200:
json
{
"id": 456,
"url_slug": "paseo-velero-valencia",
"title": "Paseo en Velero por Valencia",
"description": "Disfruta de un paseo de 2 horas por la costa de Valencia...",
"boat_name": "Mar Azul",
"boat_model": "Beneteau Oceanis 40",
"boat_type": "Velero",
"exclusivity_type": "shared",
"booking_type": "rental",
"is_multi_boat_pool": false,
"pool_boat_count": 1,
"total_pool_capacity": 8,
"max_units_bookable": 1,
"capacity": {
"max_adults": 8,
"max_children": 4,
"max_passengers": 12
},
"location": {
"city": "Valencia",
"country": "España",
"harbor": "Puerto de Valencia",
"latitude": 39.4667,
"longitude": -0.3667,
"google_maps_link": "https://maps.google.com/..."
},
"equipment": ["GPS", "VHF", "Chalecos salvavidas", "Nevera"],
"amenities": ["Solarium", "Escalera de baño", "Toldo"],
"picture": "https://cdn.solnow.io/exp/456.jpg",
"video_url": "https://cdn.solnow.io/exp/456-video.mp4",
"images": [
"https://cdn.solnow.io/exp/456-1.jpg",
"https://cdn.solnow.io/exp/456-2.jpg",
"https://cdn.solnow.io/exp/456-3.jpg"
],
"pricing_hint": {
"from_price": 150,
"currency": "EUR",
"hourly_from": 75,
"daily_from": 0,
"price_type": "hourly"
},
"fuel_included": true,
"requires_license": false,
"min_age": 0,
"allow_children": true,
"with_captain": "optional",
"booking_policies": [
{
"id": 12,
"name": "Temporada Alta",
"pricing_hint": {
"from_price": 150,
"currency": "EUR"
}
}
],
"extras": [
{
"id": 101,
"name": "Catering Premium",
"description": "Selección de tapas y bebidas",
"price": 45.00,
"price_per_day": false,
"price_per_pax": true,
"mandatory": false,
"optionality": "Optional",
"payment_type": "Online",
"price_tiers": []
}
],
"deposit": 300.00,
"widget_config": {
"badge": {
"image_url": "https://cdn.solnow.io/badges/popular.png",
"position": "top_right",
"size": "medium"
}
},
"has_real_time_updates": true,
"is_shared": true,
"custom_html": null,
"boats": [
{
"name": "Mar Azul",
"type": "Velero",
"ship_model": "Beneteau Oceanis 40",
"manufacturer": "Beneteau",
"length": 12.5,
"width": 4.2,
"year": "2018",
"capacity": 8,
"cabins": 2,
"beds": 4,
"bathrooms": 1,
"max_speed": 12.5,
"engine": "Yanmar 40cv",
"consumption": 5.5,
"night_capacity": 4,
"location": {
"city": "Valencia",
"country": "España"
}
}
],
"cancellation_policy": {
"id": 5,
"name": "Flexible",
"description": "Cancelación gratuita hasta 48h antes",
"default_penalty_percent": 0,
"rules": [
{
"days_in_advance": 7,
"refund_percent": 100
},
{
"days_in_advance": 2,
"refund_percent": 50
}
]
}
}POST /website/search ​
Busca experiencias con filtros avanzados.
INFO
Usa filtros anidados: common_filters (fechas, ciudad, adultos), experience_filters (tipo de experiencia, presupuesto), y boat_filters (tipo de barco, categorÃas).
Body (UnifiedFilterRequest):
json
{
"organization_id": 123,
"boat_filters": {
"types": ["vela", "motor", "catamaran"],
"categories": ["boat", "kayak", "paddle_board", "jet_ski"],
"tag_ids": [1, 2, 3]
},
"experience_filters": {
"experience_ids": [456, 457],
"exclusivity_type": "private",
"booking_type": "rental",
"requires_license": false,
"with_captain": "optional",
"budget": 500,
"min_budget": 100
},
"common_filters": {
"city": "Valencia",
"start_date": "2025-04-01T00:00:00Z",
"end_date": "2025-04-30T00:00:00Z",
"start_time": "10:00",
"end_time": "18:00",
"duration_days": 1,
"duration_hours": 4,
"search_mode": "exact",
"adults": 4,
"children": 2,
"tags": [1, 2, 3]
},
"pagination": {
"page": 1,
"page_size": 20
}
}Parámetros disponibles:
| Campo | Requerido | Descripción |
|---|---|---|
organization_id | Sà | ID de la organización |
common_filters.adults | Sà | Número de adultos |
common_filters.city | No | Ciudad |
common_filters.start_date | No | Fecha inicio |
common_filters.end_date | No | Fecha fin |
common_filters.children | No | Número de niños |
experience_filters.exclusivity_type | No | private o shared |
experience_filters.booking_type | No | rental o packaged |
experience_filters.budget | No | Presupuesto máximo en EUR |
boat_filters.types | No | Tipos de embarcación |
boat_filters.categories | No | CategorÃas: boat, kayak, etc. |
pagination.page | No | Número de página |
pagination.page_size | No | Items por página |
Response 200:
json
{
"experiences": [
{
"experience_id": 456,
"title": "Paseo en Velero por Valencia",
"description": "Disfruta de un paseo...",
"boat_name": "Mar Azul",
"boat_model": "Beneteau Oceanis 40",
"boat_type": "Velero",
"exclusivity_type": "private",
"booking_type": "rental",
"capacity": {
"max_adults": 8,
"max_children": 4,
"max_passengers": 12
},
"location": {
"city": "Valencia",
"country": "España"
},
"pricing_hint": {
"from_price": 150,
"currency": "EUR",
"hourly_from": 75,
"price_type": "hourly"
},
"slots": [...],
"picture": "https://...",
"images": ["https://..."],
"link_to_website": "https://..."
}
],
"total": 87,
"page": 1,
"page_size": 20,
"total_pages": 5
}GET /website/filter-options ​
Obtiene las opciones de filtro disponibles para una organización.
Query params:
| Campo | Requerido | Descripción |
|---|---|---|
organization_id | No | ID de la organización |
Response 200:
json
{
"locations": ["Valencia", "Alicante", "Denia"],
"boat_types": ["vela", "motor", "catamaran"],
"max_price": 1500.00,
"min_price": 50.00,
"max_capacity": 20
}GET /website/experiences/{id}/availability ​
Consulta la disponibilidad mensual de una experiencia.
Path params:
| Campo | Requerido | Descripción |
|---|---|---|
id | SÃ | ID de la experiencia |
Query params:
| Campo | Requerido | Descripción |
|---|---|---|
year | Sà | Año |
month | SÃ | Mes (1-12) |
organization_id | No | ID de la organización |
policy_id | No | Filtrar por polÃtica de precios especÃfica |
include_pricing | No | Incluir precios en la respuesta (true o false) |
TIP
Usa policy_id para filtrar por una polÃtica de precios especÃfica, o include_pricing=true para incluir información detallada de precios.
Response 200:
json
{
"experience_id": 456,
"year": 2025,
"month": 4,
"available_days": [
{
"date": "2025-04-15T00:00:00Z",
"has_slots": true,
"slot_count": 2,
"check_in_available": true,
"check_out_available": true,
"units_available": 3,
"total_units": 5,
"is_shared": false
},
{
"date": "2025-04-16T00:00:00Z",
"has_slots": false,
"slot_count": 0,
"is_shared": false
}
],
"slots_by_policy": [
{
"booking_policy_id": 12,
"policy_name": "Temporada Alta",
"policy_type": "daily",
"is_overnight": false,
"min_duration": 2,
"max_duration": 8,
"pricing_hint": {
"from_price": 150,
"currency": "EUR"
},
"slots": [
{
"start_time": "2025-04-15T10:00:00Z",
"end_time": "2025-04-15T12:00:00Z",
"duration": {"value": 2, "unit": "hours"},
"date": "2025-04-15",
"available_boats": 3,
"total_boats": 5,
"available_capacities": [6, 8, 10]
},
{
"start_time": "2025-04-15T18:00:00Z",
"end_time": "2025-04-15T20:00:00Z",
"duration": {"value": 2, "unit": "hours"},
"date": "2025-04-15",
"available_boats": 2,
"total_boats": 5,
"instance_id": 789,
"available_spots": 4,
"occupied_spots": 2,
"total_capacity": 6,
"is_full": false
}
]
}
],
"unavailable_periods": [
{
"start_time": "2025-04-20T00:00:00Z",
"end_time": "2025-04-25T00:00:00Z"
}
]
}POST /website/calculate-price ​
Calcula el precio completo incluyendo extras e impuestos.
TIP
Si necesitas calcular el precio para un horario especÃfico del dÃa, usa los campos opcionales start_time y end_time .
Body:
json
{
"experience_id": 456,
"booking_policy_id": 12,
"adults": 4,
"children": 2,
"start_date": "2025-04-15T10:00:00Z",
"end_date": "2025-04-15T12:00:00Z",
"start_time": "10:00",
"end_time": "12:00",
"extra_ids": [101, 102],
"boat_ids": [5],
"units_needed": 1
}Parámetros:
| Campo | Requerido | Descripción |
|---|---|---|
experience_id | SÃ | ID de la experiencia |
booking_policy_id | SÃ | ID de la polÃtica de reserva |
adults | Sà | Número de adultos |
start_date | SÃ | Fecha/hora de inicio |
end_date | SÃ | Fecha/hora de fin |
children | No | Número de niños |
start_time | No | Hora especÃfica de inicio |
end_time | No | Hora especÃfica de fin |
units_needed | No | Número de unidades para multi-boat |
boat_ids | No | IDs especÃficos de barcos |
extra_ids | No | IDs de extras a incluir |
Response 200:
json
{
"available": true,
"price_breakdown": {
"base_price": 150.00,
"price_per_unit": 75.00,
"extras": [
{
"id": 101,
"name": "Catering Premium",
"description": "Selección de tapas y bebidas",
"unit_price": 45.00,
"quantity": 6,
"subtotal": 270.00,
"unit": "person",
"payment_type": "Online"
}
],
"extras_total": 270.00,
"subtotal": 420.00,
"tax_rate": 21.00,
"tax_amount": 88.20,
"grand_total": 508.20,
"prices_include_iva": false,
"pay_at_pickup_extras": [],
"deposit": 152.46,
"advance_payment_percentage": 30.00,
"advance_amount": 152.46,
"remaining_amount": 355.74,
"currency": "EUR",
"duration": 2.00,
"duration_unit": "hours",
"check_in_time": "10:00",
"check_out_time": "12:00",
"is_overnight": false
}
}Códigos de Error ​
| Código | Significado | Cuándo ocurre |
|---|---|---|
| 400 | Bad Request | Parámetros inválidos o faltantes |
| 401 | Unauthorized | Falta autenticación de organización |
| 404 | Not Found | Experiencia, sesión o recurso no existe |
| 410 | Gone | Sesión expirada o ya completada |
| 500 | Server Error | Error interno del servidor |
Webhooks ​
El sistema envÃa webhooks para eventos importantes:
payment_intent.created- Cuando se crea un intento de pagopayment_intent.succeeded- Pago confirmado exitosamentepayment_intent.payment_failed- Pago fallidopayment_intent.canceled- Pago cancelado
Configura tu URL de webhook en el panel de administración de Solnow.

