Operaciones de alquileres
Consulta, crea, edita y borra alquileres y enlázalos al material que los respalda por API v1 o MCP.
Un alquiler en Buky es un producto vendible: lo que el cliente final reserva y paga, con su título, su impuesto y sus tarifas. Por debajo, ese producto no es el material en sí — referencia el material real que tienes en inventario (tablas, kayaks, neoprenos, un barco…), agrupado en variaciones. El material se gestiona aparte, con sus propias operaciones, y un alquiler solo lo enlaza: puedes crear el producto y, en otro paso, conectarlo con el material que ya existe. Esa parte vive en Operaciones de recursos y material. Si quieres el contexto completo, está también la página Qué son los alquileres y cómo funcionan de la base de conocimiento.
Operaciones de esta página: list-rentals, get-rental, create-rental, update-rental, delete-rental, link-rental-material (solo lectura: list-rentals, get-rental; escritura: el resto).
Las bases comunes (autenticación, GET frente a POST, prueba en seco, errores HTTP, límites) están en API v1 — Introducción y primeros pasos. Todas toman el centro de tu token salvo que uses uno multicuenta.
list-rentals: enumera los alquileres vendibles
Lista los productos de alquiler vendibles de tu cuenta: identificador, título y variaciones (no el material en sí). Es la forma de ver qué hay sin tener que provocar un error en get-rental para descubrirlo. Los alquileres borrados nunca aparecen. Es una operación de solo lectura: vale con cualquier token.
Cómo llamarla
curl "https://api.bukyapp.com/v1/ops/list-rentals?q=kayak" \
-H "Authorization: Bearer bk_TU_TOKEN"curl -X POST https://api.bukyapp.com/v1/ops/list-rentals \
-H "Authorization: Bearer bk_TU_TOKEN" \
-H "Content-Type: application/json" \
-d '{"detail": "descriptive", "disabled": false}'Por MCP: «¿Qué alquileres tengo configurados?».
Parámetros
| Parámetro | Tipo | Nivel | Qué hace |
|---|---|---|---|
q | texto | opcional | Busca por nombre, igual que el buscador del panel. |
disabled | booleano | opcional | true para ver solo los desactivados, false para solo los activos. Por defecto salen todos. |
detail | texto | opcional | compact (por defecto): identificador, título y variaciones. descriptive: la ficha a texto plano (descripción, requisitos, política de cancelación…) con las referencias ya resueltas a su título. |
full | booleano | opcional | true para los documentos completos tal cual los guarda Buky. Pesa más; gana a detail. |
limit | número | opcional | Corta el resultado a los primeros N, después de aplicar los demás filtros. |
Qué devuelve
Ejecución real: en esta cuenta todavía no hay ningún alquiler creado.
{
"success": true,
"detail": "compact",
"count": 0,
"total": 0,
"items": []
}| Campo | Significado |
|---|---|
items | Uno por alquiler, con _id, title, internalName, categories, is_disabled, private y los nombres de sus variaciones (vista compact). Con descriptive trae en su lugar la ficha a texto. |
count / total | count son las filas devueltas; total son las que cumplen los filtros antes de aplicar limit. Si count es menor que total, limit recortó resultados. |
Consejos
- Úsala primero para saber qué alquileres existen y con qué nombre exacto, antes de llamar a
get-rental,update-rentalodelete-rental. - Con un catálogo grande, combina
qconlimitpara no traer documentos de más.
get-rental: consulta un alquiler por nombre o identificador
Devuelve el documento completo y actualizado de un alquiler, tal como está en ese momento. Es la forma de comprobar cómo quedó tras crearlo o editarlo, y de obtener su identificador exacto. Es una operación de solo lectura: vale con cualquier token.
Cómo llamarla
curl "https://api.bukyapp.com/v1/ops/get-rental?rental=Alquiler%20de%20Tablas%20de%20Surf" \
-H "Authorization: Bearer bk_TU_TOKEN"curl -X POST https://api.bukyapp.com/v1/ops/get-rental \
-H "Authorization: Bearer bk_TU_TOKEN" \
-H "Content-Type: application/json" \
-d '{"rental": "Alquiler de Tablas de Surf"}'Por MCP: «Enséñame el alquiler de Tablas de Surf».
Parámetros
| Parámetro | Tipo | Nivel | Qué hace |
|---|---|---|---|
rental | texto | recomendado | Nombre o identificador del alquiler a consultar. Se resuelve contra tu catálogo real; un identificador válido se consulta aunque el catálogo aún no lo liste. Alias: id, rental_id. |
Qué devuelve
En la cuenta demo no hay ningún alquiler creado todavía, así que la ejecución real devuelve esto:
{
"success": false,
"error": "rental_unresolved",
"details": "el customer no tiene ninguna entidad de este tipo configurada",
"candidates": [],
"hint": "El customer no tiene ningún producto de alquiler vendible configurado todavía."
}| Campo | Significado |
|---|---|
candidates | Coincidencias parciales con el nombre que diste, para que elijas. Vacío aquí porque no hay ningún alquiler en la cuenta. |
hint | Pista en texto plano de qué falta o qué hacer. |
Cuando el nombre sí resuelve a un alquiler, la respuesta trae además _id (el identificador exacto), resolved (qué se eligió y por qué) e item: el documento completo, con título, impuesto, variaciones y tarifas.
Errores propios
| Situación | Respuesta |
|---|---|
| Nombre que no coincide con ningún alquiler | success: false, error: "rental_unresolved", con candidates listando lo que sí existe (vacío si no hay ninguno). |
Consejos
- Úsala después de un
create-rentaloupdate-rentalpara confirmar cómo quedó el alquiler de verdad, no lo que pediste. - Si
candidatesviene vacío, en esa cuenta todavía no se ha creado ningún alquiler. Conlist-rentalscompruebas el catálogo entero sin tener que adivinar un nombre.
create-rental: crea el producto de alquiler vendible
Crea el producto que el cliente final reserva: título, impuesto y variaciones que agrupan el material. No lleva precio al crearlo — el precio se añade después con update-rental. El material que referencies en las variaciones debe existir ya (créalo antes en Operaciones de recursos y material); aquí solo se enlaza. Es una operación de escritura.
Cómo llamarla
curl -X POST https://api.bukyapp.com/v1/ops/create-rental \
-H "Authorization: Bearer bk_TU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "Alquiler de Kayaks",
"variations": [{ "name": "Personas", "resources": [{ "resource": "Kayaks", "quantity": 1 }] }],
"dry_run": true
}'Por MCP: «Crea un alquiler llamado Alquiler de Kayaks que use el material Kayaks».
Parámetros
| Parámetro | Tipo | Nivel | Qué hace |
|---|---|---|---|
title | texto | obligatorio | Título público del producto. |
tax | texto | recomendado | Impuesto a aplicar: "default" (el primero configurado en tu cuenta), un nombre como "21%" o un identificador. Si tu cuenta no tiene impuestos configurados, se omite. |
description | texto | opcional | Descripción pública. |
variations | lista | recomendado | Variaciones de venta del producto. Cada una: nombre, modo (single o group), rango de personas, máximo, y el material que consume (resources: material por nombre o identificador, más cantidad). Si no indicas ninguna, se crea una variación por defecto llamada «Personas». |
Qué devuelve
Prueba en seco, con un material que sí existe en la cuenta demo (una camiseta de alquiler):
{
"dry_run": true,
"success": true,
"resolved_tax": { "id": "69a181ce5d6272575493bcfd", "reason": "default (primer tax del customer)" },
"resolved_variations": [
{ "name": "Personas", "mode": "single", "materials": [{ "resource": "6a37e7cb5c498030c4a194cf", "quantity": 1 }] }
],
"payload_preview": {
"type": "Rental",
"title": { "es": "Alquiler de Kayaks" },
"rentals_timeslot_day": true,
"rentals_variations": [
{ "name": { "es": "Personas" }, "mode": "single", "pax": { "from": 1, "to": 1 }, "max": -1,
"resources": [{ "resource": "6a37e7cb5c498030c4a194cf", "quantity": 1 }] }
],
"taxes": ["69a181ce5d6272575493bcfd"]
},
"price_hint": "El producto se crea SIN precio (el front bloquea Tarifas hasta guardar). Añade las tarifas con un update posterior."
}| Campo | Significado |
|---|---|
resolved_tax | Qué impuesto se aplicaría y por qué. |
resolved_variations | El material que quedaría enlazado a cada variación, ya resuelto a su identificador real. |
payload_preview | El producto tal como se crearía: título, variaciones e impuesto. Los idiomas que no rellenes se completan con un valor provisional hasta que los traduzcas. |
price_hint | Recordatorio de que el alquiler nace sin precio. |
La prueba en seco no llega a crear nada, así que no trae identificador. Al crear de verdad (fuera de una prueba en seco), la respuesta añade _id: el identificador del alquiler recién creado, el que necesitas para las siguientes llamadas.
Errores propios
| Situación | Respuesta |
|---|---|
El material indicado en resources no existe | success: false, error: "resource_unresolved", con resource_candidates listando el material real de tu cuenta para que elijas uno. |
Consejos
- Crea primero el material (tablas, kayaks…) y después el alquiler que lo referencia: el orden inverso falla.
- En cuanto lo crees, ponle precio con
update-rental: sin tarifas, el producto no se puede vender.
update-rental: edita el producto de alquiler
Edita el alquiler ya creado: título, impuesto, tarifas, variaciones, modo de pago, disponibilidad por día/hora/semana/mes, categorías y extras. Importante: rates, variations, categories y extras reemplazan el conjunto entero, no lo completan — pasa siempre la lista completa que quieres que quede, no solo lo que cambia. Es una operación de escritura.
Cómo llamarla
curl -X POST https://api.bukyapp.com/v1/ops/update-rental \
-H "Authorization: Bearer bk_TU_TOKEN" \
-H "Content-Type: application/json" \
-d '{"rental": "Alquiler de Kayaks", "rates": [{"variation": "Personas", "price_eur": 25}], "dry_run": true}'Por MCP: «Ponle precio de 25 euros al Alquiler de Kayaks».
Parámetros
| Parámetro | Tipo | Nivel | Qué hace |
|---|---|---|---|
rental | texto | obligatorio | Alquiler a editar, por nombre o identificador. |
title | texto | recomendado | Nuevo título público. No toca las demás lenguas. |
tax | texto | opcional | Nuevo impuesto. Solo disponible si tu cuenta tiene activado el cambio de impuesto por producto. |
rates | lista | recomendado | Tarifas del producto: variación, precio en euros, franja temporal (por defecto «día») y cantidad. Reemplaza todas las tarifas existentes. |
variations | lista | opcional | Conjunto completo de variaciones: nombre, modo, rango de personas, máximo y material asociado. Reemplaza todas las variaciones. |
thumb | texto | opcional | Imagen destacada del producto: identificador de una imagen que hayas subido antes (el que te da el chat al adjuntarla) o una URL pública. Ver Operaciones de imágenes. |
gallery | array | opcional | Galería del producto: lista de imágenes, cada una identificador de una imagen que hayas subido antes o URL pública. Reemplaza la galería entera. Ver Operaciones de imágenes. |
payment_mode, payment_advance_percent, payment_advance_fixed_eur | texto / número | opcional | Modo de pago (full, advance, none) y, si es con anticipo, el porcentaje o el importe fijo (uno de los dos, no ambos). |
timeslot_day, timeslot_hour, timeslot_week, timeslot_month | booleano | opcional | En qué unidades de tiempo se puede alquilar el producto. |
categories, extras | lista | opcional | Categorías y extras asociados, por nombre o identificador. Reemplazan el conjunto entero. |
También acepta ajustes menos frecuentes: precio «desde», texto de aviso, descripción, granularidad de la disponibilidad, antelación mínima para reservar, nombre interno, exigir datos de cada participante, modo de check-in online y horario de apertura por franjas. Todos opcionales; están en el manual si los necesitas.
Qué devuelve
En la cuenta demo, sin ningún alquiler creado, la prueba en seco da:
{
"dry_run": true,
"success": false,
"error": "rental_unresolved",
"details": "el customer no tiene productos rental (vendibles) configurados",
"candidates": [],
"hint": "Especifica el PRODUCTO Rental (nombre/título o _id). Para el MATERIAL usa update-resource."
}Con un alquiler existente, la prueba en seco devuelve en su lugar changes: el detalle de lo que cambiaría, sin llegar a guardarlo. Al editar de verdad, la respuesta trae también _id: el identificador del alquiler editado.
| Campo | Significado |
|---|---|
changes | Solo con éxito: qué campos cambian y a qué valor, antes de aplicarlo de verdad. |
candidates | Alquileres existentes que coinciden, cuando el nombre no resuelve a uno solo. |
Errores propios
| Situación | Respuesta |
|---|---|
| El nombre no resuelve a ningún alquiler de la cuenta | success: false, error: "rental_unresolved". |
Consejos
- Antes de tocar
rates,variations,categoriesoextras, consulta el alquiler conget-rentalpara saber qué hay y no perder nada al reemplazar la lista. - Para editar el material en sí (tablas, barco…) usa las operaciones de recursos, no esta.
delete-rental: borra el producto de alquiler
Borra el producto vendible: no toca el material que referencia, que sigue existiendo de forma independiente. El producto deja de verse en el panel y en la tienda. No puedes deshacerlo desde la API ni desde el asistente, pero el soporte de Buky puede recuperarlo si lo necesitas. Es una operación de escritura.
Cómo llamarla
curl -X POST https://api.bukyapp.com/v1/ops/delete-rental \
-H "Authorization: Bearer bk_TU_TOKEN" \
-H "Content-Type: application/json" \
-d '{"rental": "Alquiler de Kayaks", "confirm": true, "dry_run": true}'Por MCP: «Borra el alquiler de Kayaks».
Parámetros
| Parámetro | Tipo | Nivel | Qué hace |
|---|---|---|---|
rental | texto | obligatorio | Alquiler a borrar, por nombre o identificador. |
confirm | booleano | recomendado | Tiene que ser true para borrar de verdad. Sin él, la operación no borra nada aunque no sea una prueba en seco. |
Qué devuelve
Prueba en seco real, sin alquileres en la cuenta:
{
"dry_run": true,
"success": false,
"error": "rental_unresolved",
"details": "el customer no tiene productos rental (vendibles) configurados",
"candidates": [],
"hint": "Especifica el PRODUCTO Rental (nombre/título o _id) entre candidates. Para el MATERIAL usa delete-resource."
}Con un alquiler real, un borrado confirmado devuelve _id (el identificador del alquiler borrado), soft_deleted: true y reversible.
| Campo | Significado |
|---|---|
_id | Identificador del alquiler borrado. |
soft_deleted | true si el borrado se aplicó. |
reversible | true: el soporte de Buky puede recuperarlo si lo pides. |
Errores propios
| Situación | Respuesta |
|---|---|
| El nombre no resuelve a ningún alquiler | success: false, error: "rental_unresolved". |
Consejos
- Si te equivocas, el soporte de Buky puede recuperarlo.
- Borrar el alquiler no borra el material: las tablas, kayaks o el barco siguen disponibles para otro producto.
link-rental-material: enlaza material a un alquiler
Conecta un material ya existente (una tabla, un kayak, un neopreno…) con el alquiler que lo vende, añadiéndolo a una de sus variaciones. No crea nada nuevo: relaciona dos cosas que ya existen, el producto y el material. Es una operación de escritura.
Cómo llamarla
curl -X POST https://api.bukyapp.com/v1/ops/link-rental-material \
-H "Authorization: Bearer bk_TU_TOKEN" \
-H "Content-Type: application/json" \
-d '{"parent": "Alquiler de Kayaks", "material": "Kayaks", "quantity": 2, "dry_run": true}'Por MCP: «Enlaza el material Kayaks al alquiler de Kayaks, con 2 unidades».
Parámetros
| Parámetro | Tipo | Nivel | Qué hace |
|---|---|---|---|
parent | texto | obligatorio | El alquiler (producto vendible) al que se enlaza el material. |
material | texto | obligatorio | El material a vincular, por nombre o identificador. Alias: child. |
quantity | número | opcional | Unidades de ese material que consume la variación. Por defecto 1. |
variation | texto | opcional | Variación destino del alquiler. Si solo tiene una, se usa esa; si tiene varias, hay que indicarla. |
Qué devuelve
Prueba en seco real, sin alquileres creados en la cuenta:
{
"dry_run": true,
"success": false,
"error": "parent_unresolved",
"details": "el customer no tiene productos rental (vendibles) configurados",
"parent_candidates": [],
"hint": "Especifica el producto rental PADRE (nombre/título o _id) entre parent_candidates."
}Con un alquiler y un material reales, la respuesta trae parent_id, material_id, variation_id y already_linked (si el material ya estaba enlazado, no lo duplica).
| Campo | Significado |
|---|---|
already_linked | true si ese material ya estaba en la variación; entonces solo actualiza la cantidad si la pediste distinta. |
Errores propios
| Situación | Respuesta |
|---|---|
El alquiler indicado en parent no existe | success: false, error: "parent_unresolved", con parent_candidates. |
Consejos
- El alquiler debe tener ya al menos una variación (la crea
create-rental); si no tiene ninguna, esta operación no puede enlazar nada. - Es idempotente: puedes repetir la llamada sin miedo a duplicar el material en la variación.
