Centro de ayuda›Desarrolladores›Operaciones de formularios

Operaciones de formularios

Consulta, crea, edita y borra los formularios de campos extra de reserva y check-in por API v1 o MCP.

Los formularios son los campos extra que Buky le pide a tu cliente al reservar o durante el check-in online: nombre, nivel, alergias, si acepta unas condiciones… Un mismo formulario puede ir suelto, ser un paso del check-in online o mostrarse como contexto de cada sesión (ver Crear formularios personalizados). Estas operaciones enumeran, crean, leen, editan, borran y recuperan el formulario en sí; no gestionan lo que responde cada cliente.

Operaciones de esta página: list-forms, get-form, create-form, update-form, delete-form (solo lectura: list-forms, get-form; escritura: create-form, update-form, delete-form).

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.

list-forms: enumera los formularios del centro

Devuelve los formularios del centro: identificador, título, si son un paso del check-in online o del contexto de sesión, y cuántos campos tienen. Es una operación de solo lectura: vale con cualquier token.

Cómo llamarla

curl "https://api.bukyapp.com/v1/ops/list-forms" \
  -H "Authorization: Bearer bk_TU_TOKEN"

Por MCP: «¿Qué formularios tengo creados?».

Parámetros

ParámetroTipoNivelQué hace
qtextoopcionalFiltra por nombre (contiene, sin tildes). Es el mismo buscador del panel.
detailtextoopcionalcompact (por defecto): lo justo para identificar y enumerar. descriptive: textos en claro y productos resueltos a su título, sin tarifas ni etiquetas internas.
langtextoopcionalSolo con detail: descriptive: cada texto llega en ese idioma (si falta, cae a español). Sin lang, cada texto llega como {idioma: texto}.
fullbooleanoopcionalDevuelve los documentos completos del servidor (pesado). Tiene prioridad sobre detail.
created_from / created_tofechaopcionalRango de fecha de creación (igual que el filtro del panel).
limitnúmeroopcionalMáximo de resultados devueltos, tras aplicar los filtros.

Qué devuelve

Ejemplo real de la cuenta demo:

{
  "success": true,
  "detail": "compact",
  "count": 1,
  "total": 1,
  "items": [
    {
      "_id": "67e57cb572327d54c19cd904",
      "title": "Checkin Surf",
      "checkin_online": true,
      "session_context": false,
      "components_count": 3
    }
  ]
}
CampoSignificado
itemsLos formularios: _id, título, si son un paso del check-in online o del contexto de sesión, y cuántos campos tienen (components_count). Con detail: descriptive cada uno trae además descripción, productos afectados y el detalle de los campos.
totalFormularios que cumplen los filtros, antes de aplicar limit.
countFormularios realmente devueltos en items. Si es menor que total, limit recortó la lista.

Consejos

Usa detail: descriptive cuando quieras revisar un formulario sin pedir el documento completo: te da los productos afectados por su título (no solo el identificador) y el detalle de los campos.

get-form: consulta un formulario completo

Devuelve el documento completo y actualizado de un formulario: título, descripción, campos y configuración de rol. Es una operación de solo lectura: vale con cualquier token.

Cómo llamarla

curl "https://api.bukyapp.com/v1/ops/get-form?form=Checkin%20Surf" \
  -H "Authorization: Bearer bk_TU_TOKEN"

Por MCP: «Enséñame el formulario de check-in de surf».

Parámetros

ParámetroTipoNivelQué hace
form (o sus alias id, form_id)textoobligatorio*Nombre, título o identificador del formulario. Se resuelve contra el catálogo real; si no hay un único match, la respuesta trae los candidatos.

\* El manual lo marca como «recomendado», pero en la práctica es obligatorio: sin él, la operación responde con error: "form_intent_required".

Qué devuelve

Ejemplo real, recortado, del formulario «Checkin Surf» de la cuenta demo:

{
  "success": true,
  "_id": "67e57cb572327d54c19cd904",
  "resolved": { "id": "67e57cb572327d54c19cd904", "reason": "match exacto 'Checkin Surf'" },
  "item": {
    "_id": "67e57cb572327d54c19cd904",
    "title": { "es": "Checkin Surf", "en": "Surf Checkin" },
    "checkin_online": true,
    "checkin_online_mode": "always",
    "checkin_online_needDocument": false,
    "checkin_online_needSign": false,
    "session_context": false,
    "components": [
      { "label": { "es": "Nombre completo" }, "type": "text", "required": true },
      { "label": { "es": "Nivel de surf" }, "type": "select", "required": true,
        "options": [{ "label": { "es": "Principiante" } }, "..."] },
      "..."
    ]
  }
}
CampoSignificado
_idEl identificador del formulario, para usarlo en el resto de operaciones.
resolvedQué formulario se eligió a partir del nombre que diste y por qué (id y reason).
itemEl documento completo: título y descripción por idioma, components (los campos que ve el cliente) y la configuración de rol.
item.componentsLos campos en orden, con su tipo (text, select…), si son obligatorios y, en los select, sus opciones.
item.checkin_online / _mode / _resourcesSi el formulario es un paso del check-in online, en qué modo (always, someProducts, exceptSomeProducts) y a qué productos afecta.
item.session_context (y los mismos _mode/_resources)Lo mismo para el contexto de sesión.

Errores propios de esta operación

SituaciónRespuesta
Falta form200 con success: false y error: "form_intent_required".
Nombre que no coincide con ningún formulario200 con success: false, error: "form_unresolved" y la lista form_candidates con los formularios disponibles.

Consejos

Usa get-form después de create-form o update-form para comprobar cómo quedó de verdad el formulario: la operación de escritura confirma los cambios enviados, pero get-form te da el documento completo y fresco.

create-form: crea un formulario o paso de check-in

Crea un formulario nuevo: suelto, como paso del check-in online o como contexto de sesión. Es una operación de escritura: solo un token con permiso de escritura puede ejecutarla, y aquí siempre en modo de prueba (dry_run: true).

Cómo llamarla

curl -X POST https://api.bukyapp.com/v1/ops/create-form \
  -H "Authorization: Bearer bk_TU_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Checkin buceo",
    "role": "checkin_online",
    "need_document": true,
    "components": ["Número de documento"],
    "dry_run": true
  }'

Por MCP: «Crea un formulario de check-in que pida el número de documento y una foto del DNI».

Parámetros

ParámetroTipoNivelQué hace
titletextoobligatorioTítulo del formulario.
componentslistaobligatorioLos campos que se piden al cliente. Cada uno es un texto simple (campo de texto corto) o un objeto {label, type, required, options}. Al menos uno.
descriptiontextoopcionalDescripción del formulario. Vacía por defecto.
roletextorecomendadoplain (formulario suelto, por defecto), checkin_online (paso del check-in online) o session_context (dato visible en el contexto de cada sesión).
resource_modetextoopcionalSolo si role no es plain: always (todos los productos, por defecto), someProducts o exceptSomeProducts.
resourceslistaopcional*Productos incluidos o excluidos, por nombre o identificador.
need_documentbooleanoopcionalSolo role: checkin_online. Pide una foto del documento de identidad. Por defecto false.
need_signbooleanoopcionalSolo role: checkin_online. Pide firma. Por defecto false.
need_reviewbooleanoopcionalSolo role: checkin_online. Fuerza que el check-in pase siempre por revisión manual. Por defecto false.

\* Obligatorio si resource_mode es someProducts o exceptSomeProducts; sin él la operación no crea nada.

Qué devuelve

Prueba en seco real, con rol checkin_online:

{
  "success": true,
  "dry_run": true,
  "applied_defaults": { "role": "checkin_online", "resource_mode": "always" },
  "resolved_role": { "role": "checkin_online", "checkinOnline": true, "sessionContext": false },
  "resolved_resources": [],
  "payload_preview": {
    "title": { "es": "Checkin prueba Kraken", "en": "New", "..." : "..." },
    "components": [
      { "label": { "es": "<p>Nivel de surf</p>" }, "type": "select",
        "options": [{ "label": { "es": "<p>Principiante</p>" } }, "..."] }
    ],
    "checkin_online": true,
    "checkin_online_needDocument": true,
    "checkin_online_needSign": true
  }
}
CampoSignificado
applied_defaultsLos valores que se aplican si no los indicas (role: plain, resource_mode: always).
resolved_roleEl rol final y por qué se eligió.
resolved_resourcesLos productos ya resueltos, si usaste resource_mode: someProducts o exceptSomeProducts.
payload_previewEl formulario tal y como se guardaría: título traducido a los idiomas de la cuenta y cada campo (y cada opción, en los select) con su identificador.

Al crearlo de verdad (fuera de la prueba en seco), la respuesta trae además el _id del formulario nuevo.

Errores propios de esta operación

SituaciónRespuesta
Falta title o components400 con error: "invalid_params" y el campo que falta en details.
resource_mode: someProducts (o exceptSomeProducts) sin resources200 con success: false y error: "resources_required".

Consejos

Un campo (component) puede ser solo un texto ("Nombre completo") para un campo de texto corto, o un objeto si necesitas otro tipo: inputSmall, inputBig, select, checkbox, date, file, title o paragraph. Los select necesitan options (al menos una).

update-form: edita título, descripción o rol

Edita un formulario existente: título, descripción o rol. No toca los campos (components); para eso hay que crear el formulario de nuevo. Es una operación de escritura, siempre en modo de prueba aquí.

Cómo llamarla

curl -X POST https://api.bukyapp.com/v1/ops/update-form \
  -H "Authorization: Bearer bk_TU_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"form": "Checkin Surf", "title": "Checkin Surf (temporada 2026)", "dry_run": true}'

Por MCP: «Cambia el título del formulario Checkin Surf a "Checkin Surf (temporada 2026)"».

Parámetros

ParámetroTipoNivelQué hace
formtextoobligatorioFormulario a editar: nombre, título o identificador.
titletextorecomendadoNuevo título. Solo cambia el idioma que envíes; no toca los demás.
descriptiontextoopcionalNueva descripción. Mismo criterio que title.
roletextoopcionalCambia el rol: plain, checkin_online o session_context.
resource_modetextoopcionalSolo si el rol resultante no es plain: always, someProducts o exceptSomeProducts.
resourceslistaopcional*Reemplaza los productos incluidos o excluidos.
need_document, need_sign, need_reviewbooleanoopcionalIgual que en create-form. Requieren que el rol resultante sea checkin_online.

\* Obligatorio si resource_mode es someProducts o exceptSomeProducts.

Qué devuelve

Prueba en seco real, cambiando el título:

{
  "success": true,
  "dry_run": true,
  "_id": "67e57cb572327d54c19cd904",
  "changes": { "title": { "es": "Checkin Surf (prueba Kraken)" } },
  "note": "PUT parcial: solo estos campos cambian; customer/_id/__v nunca se envían. components NO se toca."
}
CampoSignificado
_idEl identificador del formulario editado.
changesExactamente lo que va a cambiar, ya en la estructura real (por ejemplo, title como objeto por idioma).
noteRecordatorio de que es una edición parcial y que no toca los campos del formulario.

Errores propios de esta operación

SituaciónRespuesta
Nombre que no coincide con ningún formulario200 con success: false, error: "form_unresolved" y form_candidates con los formularios disponibles.

Consejos

Los campos (components) no se editan con esta operación: para añadir, quitar o reordenar preguntas, crea el formulario de nuevo con create-form y borra el anterior con delete-form.

delete-form: borra un formulario

El formulario 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, siempre en modo de prueba aquí.

Cómo llamarla

curl -X POST https://api.bukyapp.com/v1/ops/delete-form \
  -H "Authorization: Bearer bk_TU_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"form": "Checkin Surf", "confirm": true, "dry_run": true}'

Por MCP: «Borra el formulario Checkin Surf» (el asistente te pedirá confirmar antes de ejecutarlo de verdad).

Parámetros

ParámetroTipoNivelQué hace
formtextoobligatorioFormulario a borrar: nombre, título o identificador.
confirmbooleanorecomendadoDebe ser true para borrar de verdad. Sin él, la operación solo muestra qué pasaría (salvaguarda ante un borrado accidental).

Qué devuelve

Prueba en seco real:

{
  "success": true,
  "dry_run": true,
  "would_delete": { "_id": "67e57cb572327d54c19cd904", "name": "Checkin Surf" },
  "soft_deleted": false,
  "reversible": true,
  "warnings": ["borrado limpio (sin cascada): posibles referencias colgando a este formulario son menores"]
}
CampoSignificado
would_deleteEl formulario que se borraría (_id y nombre).
soft_deletedSi de verdad se borró (false en toda prueba en seco).
reversibletrue: el soporte de Buky puede recuperarlo si lo pides.
warningsAvisos menores: el borrado no arrastra referencias desde otros sitios al formulario.

Errores propios de esta operación

SituaciónRespuesta
Nombre que no coincide con ningún formulario200 con success: false, error: "form_unresolved" y form_candidates con los formularios disponibles.

Consejos

Si te equivocas, el soporte de Buky puede recuperarlo.

¿Te ha resultado útil este artículo?