Operaciones de duplicados
Duplica una actividad, pack, alquiler, bono o automatización existente para crear otra a partir de ella por API v1 o MCP.
Duplicar una entidad es crear una copia completa de un documento existente — textos en todos los
idiomas, tarifas, configuración — sin rehacerlo desde cero. El manual admite duplicar actividades,
packs, alquileres, bonos y automatizaciones; sirve para lanzar variantes de un producto que ya tienes
montado, por ejemplo una nueva temporada o tarifa de una actividad — ver
Operaciones de esta página: duplicate-entity (escritura).
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.
Los ejemplos de esta página toman customer_id del token; solo hace falta indicarlo con tokens
multicuenta.
duplicate-entity: clona una actividad, pack, alquiler, automatización o bono
Copia un documento entero de tu cuenta — textos en todos los idiomas, tarifas, configuración — y le
antepone «Copia de» al nombre. Es una operación de escritura: solo puedes duplicar dentro de tu
propia cuenta, nunca desde otra.
Cómo llamarla
curl -X POST https://api.bukyapp.com/v1/ops/duplicate-entity \
-H "Authorization: Bearer bk_TU_TOKEN" \
-H "Content-Type: application/json" \
-d '{"entity": "activity", "source_id": "6aa3db20f4b405ea4e3dfc20", "dry_run": true}'Por MCP: «Duplica la actividad Surf Principiante en piscina» o «Haz una copia de mi pack Surf Camp».
El asistente primero resuelve el nombre a un identificador (con get-activity u otra operación de
lectura del catálogo correspondiente, ver Operaciones de actividades)
y luego duplica.
El manual completo, siempre actualizado, está en GET https://api.bukyapp.com/v1/ops/duplicate-entity/manual.
Parámetros
| Parámetro | Tipo | Nivel | Qué hace |
|---|---|---|---|
entity | texto | obligatorio | Tipo de entidad a clonar: activity, pack, rental, automation o bonoclass. Los alojamientos (accommodation) no están soportados: sus habitaciones son documentos aparte. |
source_id | texto | obligatorio | Identificador (24 caracteres hexadecimales) del documento a clonar. Tiene que pertenecer a tu cuenta. |
overrides | objeto | opcional | Campos de nivel superior que quieres fijar en la copia (por ejemplo {"internalName": "Curso Surf (variante)"}), en vez del «Copia de…» automático. |
Qué devuelve
Prueba en seco real, duplicando la actividad «Surf Principiante en piscina»:
{
"success": true,
"operation": "duplicate-entity",
"dry_run": true,
"entity": "activity",
"source_id": "6aa3db20f4b405ea4e3dfc20",
"applied": {
"stripped": ["_id", "__v", "createdAt", "isDisabled", "children", "externalCals", "activities_useSessionsFrom"],
"reset": ["channel_getyourguide_active", "channel_getyourguide_variations"],
"renamed": ["title"]
},
"remap_count": 2,
"payload_preview": {
"title": { "es": "Copia de Surf Principiante en piscina", "en": "Copia de New" },
"rates": [
{ "description": { "name": "Adulto", "color": "#eeeeee" }, "price": 6000, "_id": "6aa95adb7771d7f7a797f43d" }
]
},
"warnings": []
}| Campo | Significado |
|---|---|
applied.stripped | Campos del original que la copia no hereda: identificador, fecha de creación, estado activo/inactivo, hijos y las sesiones enlazadas. |
applied.reset | Campos que vuelven a su valor por defecto en la copia; aquí, la conexión con el canal GetYourGuide se desactiva. |
applied.renamed | Campos a los que se antepone «Copia de…» (el título, en todos los idiomas). |
remap_count | Cuántas referencias internas (por ejemplo, el identificador de cada tarifa) se regeneran para que la copia no comparta subdocumentos con el original. |
payload_preview | El documento que se crearía. En una importación real, la respuesta añade además clone_id con el identificador del nuevo documento (no aparece en la prueba en seco). |
warnings | Avisos que no bloquean la copia. |
Con overrides, el internalName que pases sustituye al «Copia de…» automático; el resto del
documento se copia igual.
Errores propios
| Situación | Respuesta |
|---|---|
entity no soportado (accommodation, o cualquier valor que no sea activity, pack, rental, automation, bonoclass) | 200 con success: false, error: "operation_not_covered" y la lista covered_entities. |
source_id que no existe en tu cuenta | 200 con success: false, error: "source_not_found". |
Falta entity o source_id | 400 con error: "invalid_params" y el campo que falta en details. |
Consejos
- Duplicar es el atajo para crear variantes de un mismo producto (temporada, idioma, tarifa distinta)
sin rehacer la ficha entera. Ajusta después el clon con update-activity u otro update-* de su
catálogo, en Operaciones de actividades o la página equivalente.
- El estado activo/inactivo no se copia (
isDisabledqueda fuera del clon): el nuevo documento nace
con el valor por defecto del sistema, no con el del original.
- Según el manual, las imágenes no se duplican: el clon comparte los mismos ficheros que el original
(misma cuenta), con un aviso en warnings cuando el original tiene imágenes. Para subir o borrar
imágenes, ver Operaciones de imágenes.
