Operaciones de localizaciones
Consulta, crea, edita y borra las localizaciones de tus actividades por API v1 o MCP.
Una localización es el sitio físico donde ocurre algo: el punto de encuentro de una actividad, la
playa donde arranca una clase, el mostrador donde se recoge un alquiler. Buky la usa para que el
cliente sepa adónde ir y para que la asignes a las sesiones de tus actividades.
Sobre cómo se gestionan desde el panel, ver Gestionar localizaciones
en la base de conocimiento.
Operaciones de esta página: list-locations, get-location, create-location,
update-location, delete-location (solo lectura: list-locations, get-location; 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. En
las cinco, customer_id se toma de tu token salvo que uses uno multicuenta.
list-locations: enumera las localizaciones de la cuenta
Devuelve las localizaciones del negocio: identificador, título y si está desactivada. Es una
operación de solo lectura: vale con cualquier token. Es la forma de ver qué localizaciones
existen sin tener que provocar un error en get-location.
Cómo llamarla
curl "https://api.bukyapp.com/v1/ops/list-locations" \
-H "Authorization: Bearer bk_TU_TOKEN"Por MCP: «Enséñame las localizaciones que tengo».
Parámetros
| Parámetro | Tipo | Nivel | Qué hace |
|---|---|---|---|
q | texto | opcional | Filtra por texto en el nombre (sin tildes), como el buscador del panel. |
disabled | booleano | opcional | true: solo desactivadas. false: solo activas. Sin filtro, salen todas. |
created_from / created_to | fecha (ISO) | opcional | Acotan por fecha de creación. |
detail | texto | opcional | compact (por defecto): identificador, título y estado. descriptive: añade la descripción. |
lang | texto | opcional | Solo con detail: "descriptive": devuelve los textos en ese idioma en vez de por idioma. |
full | booleano | opcional | Documentos completos del servidor. Pesado; gana a detail. |
limit | número | opcional | Máximo de resultados a devolver. |
Qué devuelve
Ejecución real, con las dos localizaciones de la cuenta demo:
{
"success": true,
"operation": "list-locations",
"customer_id": "5a55fff67e9fe0036a541d15",
"detail": "compact",
"count": 2,
"total": 2,
"items": [
{ "_id": "645cdcea660cbe47fe65b750", "title": "nueva", "internalName": null, "is_disabled": false },
{ "_id": "6a357472a0cc4a3ec763b9a8", "title": "playa de prueba", "internalName": null, "is_disabled": false }
],
"warnings": []
}| Campo | Significado |
|---|---|
items | Una fila por localización: _id, title, internalName y is_disabled. Con detail: "descriptive" suma la descripción. |
count / total | count son las filas devueltas; total las que cumplen el filtro antes de aplicar limit. Si count es menor que total, limit recortó la lista. |
Consejos
- Antes de crear una localización, mira aquí si ya existe con otro nombre.
get-location: consulta una localización por nombre o identificador
Devuelve el documento completo y actualizado de una localización: la forma de comprobar cómo quedó
tras crearla o editarla. Es una operación de solo lectura: vale con cualquier token.
Cómo llamarla
curl "https://api.bukyapp.com/v1/ops/get-location?location=Playa%20de%20Somo" \
-H "Authorization: Bearer bk_TU_TOKEN"Por MCP: «Enséñame la localización Playa de Somo».
Parámetros
| Parámetro | Tipo | Nivel | Qué hace |
|---|---|---|---|
location | texto | obligatorio | Nombre o identificador de la localización. El manual lo marca como recomendado, pero sin él la operación responde location_intent_required. Alias: id, location_id. |
Qué devuelve
Ejecución real, con una localización ya existente en la cuenta demo:
{
"success": true,
"operation": "get-location",
"customer_id": "5a55fff67e9fe0036a541d15",
"_id": "6a357472a0cc4a3ec763b9a8",
"resolved": { "id": "6a357472a0cc4a3ec763b9a8", "reason": "match por título 'playa de prueba'" },
"item": {
"_id": "6a357472a0cc4a3ec763b9a8",
"type": "Location",
"title": { "es": "playa de prueba" },
"description": { "es": "" },
"isDisabled": false,
"children": [],
"gallery": [],
"createdAt": "2026-06-19T16:55:14.795Z"
},
"warnings": []
}| Campo | Significado |
|---|---|
resolved | Qué localización se eligió a partir del nombre que diste y por qué. Compruébalo cuando el nombre sea ambiguo. |
item | El documento completo. Además de title, description e isDisabled trae de fábrica muchos campos internos de configuración de reservas que no aplican a una localización (son comunes a toda la familia de recursos de Buky); ignóralos. |
location_candidates | Solo si el nombre no se resolvió a una única localización: lista de coincidencias con identificador y título, para que elijas. |
Errores propios de esta operación
| Situación | Respuesta |
|---|---|
Falta location | success: false, error: "location_intent_required". |
| El nombre no coincide con ninguna localización | success: false, error: "location_unresolved" y location_candidates con las localizaciones disponibles. |
Consejos
- Consulta
get-locationcon un nombre aproximado antes de crear una nueva: si no hay match exacto,
la respuesta trae location_candidates con todas las localizaciones existentes y evitas duplicar
una que ya tienes con otro nombre.
create-location: crea una localización nueva
Es de escritura. El ejemplo de esta página se ejecutó en modo prueba: el sistema valida y muestra
qué pasaría, pero no llega a crear nada.
Cómo llamarla
curl -X POST https://api.bukyapp.com/v1/ops/create-location \
-H "Authorization: Bearer bk_TU_TOKEN" \
-H "Content-Type: application/json" \
-d '{"title": "Muelle de Poniente", "dry_run": true}'Por MCP: «Crea la localización Muelle de Poniente».
Parámetros
| Parámetro | Tipo | Nivel | Qué hace |
|---|---|---|---|
title | texto | obligatorio | Nombre de la localización. |
location_capacity | número | recomendado | Personas máximas al año. Número ≥ 0; si lo omites, se guarda como 0. |
description | texto | opcional | Descripción de la localización. |
Qué devuelve
Prueba en seco, mínima:
{
"success": true,
"dry_run": true,
"operation": "create-location",
"applied_defaults": { "type": "Location", "location_capacity_default": 0 },
"payload_preview": {
"title": { "es": "Muelle de Poniente", "en": "New", "…": "…" },
"description": { "es": "", "…": "…" },
"type": "Location"
}
}| Campo | Significado |
|---|---|
applied_defaults | Valores que pone Buky si no los das: el tipo (Location) y el aforo anual (0). |
payload_preview | Lo que se enviaría a crear: el título ya convertido a todos los idiomas (el que no rellenas queda como New). Si pasas location_capacity, aparece aquí; en la prueba en seco con las dos localizaciones reales de la cuenta demo, ninguna de las dos lo tenía guardado. |
En la prueba en seco no hay _id: como no se llega a crear nada, no existe todavía. En una
creación real la respuesta trae el _id de la localización creada en su lugar.
Errores propios de esta operación
| Situación | Respuesta |
|---|---|
Falta title | 400 con error: "invalid_params" y el campo que falta en details. |
Consejos
- Si solo quieres el nombre, no mandes
location_capacitynidescription: es la variante mínima y
la más habitual.
update-location: cambia el nombre o el aforo anual
Es de escritura, con edición parcial: solo cambia lo que le pasas, el resto de la localización
queda igual.
Cómo llamarla
curl -X POST https://api.bukyapp.com/v1/ops/update-location \
-H "Authorization: Bearer bk_TU_TOKEN" \
-H "Content-Type: application/json" \
-d '{"location": "Playa de Somo", "title": "Playa de Somo (norte)", "dry_run": true}'Por MCP: «Cambia el nombre de la localización Playa de Somo a "Playa de Somo (norte)"».
Parámetros
| Parámetro | Tipo | Nivel | Qué hace |
|---|---|---|---|
location | texto | obligatorio | Localización a editar: nombre o identificador. |
title | texto | recomendado | Nuevo nombre. |
location_capacity | número | opcional | Nuevo aforo anual (número ≥ 0). |
Tienes que pasar al menos uno de title o location_capacity: si no aportas ningún cambio, la
operación responde no_changes (ver más abajo).
Qué devuelve
Prueba en seco cambiando el nombre:
{
"success": true,
"dry_run": true,
"operation": "update-location",
"_id": "6a357472a0cc4a3ec763b9a8",
"changes": { "title": { "es": "Playa de Somo (norte)" } }
}| Campo | Significado |
|---|---|
_id | Identificador de la localización resuelta a partir de location. |
changes | Solo los campos que de verdad van a cambiar; el nombre se guarda por idioma y no toca las otras lenguas. |
Errores propios de esta operación
| Situación | Respuesta |
|---|---|
Falta location | 400 con error: "invalid_params". |
No pasas ni title ni location_capacity | success: false, error: "no_changes" y una pista con los campos aceptados. |
| El nombre no coincide con ninguna localización | success: false, error: "location_unresolved" y location_candidates con las existentes. |
delete-location: borra una localización
La localización 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 recuperarla si lo necesitas. Es una operación de escritura. No borra en cascada, así que si
alguna sesión de tus actividades sigue
apuntando a la localización, esa referencia queda colgando sin más efecto.
Cómo llamarla
curl -X POST https://api.bukyapp.com/v1/ops/delete-location \
-H "Authorization: Bearer bk_TU_TOKEN" \
-H "Content-Type: application/json" \
-d '{"location": "Muelle de Poniente", "confirm": true, "dry_run": true}'Por MCP: «Borra la localización Muelle de Poniente».
Parámetros
| Parámetro | Tipo | Nivel | Qué hace |
|---|---|---|---|
location | texto | obligatorio | Localización a borrar: nombre o identificador. |
confirm | booleano | recomendado | Debe ser true para que el borrado real se ejecute; es la salvaguarda contra un borrado accidental. |
Qué devuelve
Prueba en seco:
{
"success": true,
"dry_run": true,
"operation": "delete-location",
"would_delete": { "_id": "645cdcea660cbe47fe65b750", "name": "nueva" },
"soft_deleted": false,
"reversible": true,
"warnings": ["las sesiones que referencian esta location quedarán con la ref colgando (impacto menor)"]
}| Campo | Significado |
|---|---|
would_delete | Localización que se borraría (en un borrado real, este bloque se sustituye por la confirmación del borrado). |
reversible | true: el soporte de Buky puede recuperarla si lo pides. |
Errores propios de esta operación
| Situación | Respuesta |
|---|---|
Falta location | 400 con error: "invalid_params". |
| El nombre no coincide con ninguna localización | success: false, error: "location_unresolved" y location_candidates con las existentes. |
Consejos
- Si te equivocas, el soporte de Buky puede recuperarla.
