# Agregar telemetría (BETA) Source: https://developers.hubspot.es/docs/apps/developer-platform/add-features/add-telemetry Aprende a configurar la telemetría. Puedes configurar la telemetría para tu aplicación, que actúa como un colector de registros para canalizar los datos de registro a un proveedor externo de supervisión. Actualmente, solo [Honeycomb](https://www.honeycomb.io/) y [Sentry](https://sentry.io/welcome/) son compatibles como proveedores de terceros. ## Crear y configurar archivos de componentes de telemetría En el directorio `app/` de tu proyecto, crea un directorio `telemetry/`, y agrega en él un archivo de configuración `telemetry-hsmeta.json`. ```shell theme={null} └── src/ └── app/ └── telemetry/ └── telemetry-hsmeta.json ``` Edita el archivo `telemetry-hsmeta.json` para configurar tu proveedor, los ajustes del nivel de registro y mucho más. Abajo se proporciona un archivo de ejemplo, junto con una tabla que detalla cada uno de los campos disponibles. > [!WARNING] > > **Nota**: por defecto, todos los tipos y niveles de registro se sincronizarán con tu proveedor a través de los campos `logTypes` y `logLevels`, lo que puede provocar que se envíe un volumen muy elevado de datos. Se recomienda encarecidamente que empieces configurando solo los tipos de registro que te interesan y estableciendo los niveles de registro para filtrar solo los errores. ### telemetry-hsmeta.json ```json theme={null} { "uid": "telemetry", "type": "telemetry", "config": { "providerType": "SENTRY", "datasetName": "my-app-telemetry", "logTypes": ["API_CALL", "EXTENSION_LOG", "EXTENSION_RENDER", "DATA_FETCH"], "logLevels": ["ERROR", "WARN", "INFO"] } } ``` | Campo | Tipo | Descripción | | - | - | - | | `uid` | Cadena | Un identificador único para tu configuración de telemetría. Se puede establecer en cualquier valor, pero aparecerá en la configuración del proyecto en tu cuenta, por lo que debe ser diferente de otros valores de `uid` de otros componentes de la aplicación. | | `type` | Cadena | El tipo de componente, que en este caso debe ser `telemetry`. | | `config` | Objeto | Un objeto que contiene los detalles de la configuración. Consulta las subpropiedades enumeradas en las filas de abajo. | | `providerType` | Cadena | El nombre de tu proveedor de telemetría externo. Actualmente, solo son compatibles `SENTRY` y `HONEYCOMB`. | | `datasetName` | Cadena | Una etiqueta que se asociará a tus datos de registro, si tu proveedor admite esa opción. | | `logTypes` | Matriz | Lista de tipos de registro enviados a tu proveedor externo. Por defecto, todos los registros se propagan a tu proveedor. Los tipos de registro disponibles son: `["CRM_LEGACY_CARD", "CRM_EXTENSIBILITY_CARD", "WEBHOOKS", "API_CALL", "APP_SETTINGS", "SERVERLESS_EXECUTION", "PROXY_EXECUTION", "EXTENSION_RENDER", "EXTENSION_LOG", "SERVERLESS_GATEWAY_EXECUTION"]`. | | `logLevels` | Matriz | Lista de niveles de gravedad por los que filtrar los registros. Los niveles de registro admitidos son: `["ERROR", "WARNING", "INFO"]` | ## Agregar la autenticación externa como secreto a través de la CLI Además de crear el archivo de configuración `telemetry-hsmeta.json` anterior, también tendrás que agregar un secreto que corresponda a la clave de autenticación de tu proveedor: * Si utilizas Sentry, agregarás el DSN (Nombre Fuente de Datos) como secreto. * Si utilizas Honeycomb, agregarás una clave de API como secreto. ### Localizar un DSN de Sentry Si utilizas Sentry, sigue los pasos que se indican a continuación para obtener tu DSN: * Accede a tu [cuenta de Sentry](https://sentry.io/welcome/auth/login/). * Navega hasta la configuración de tu proyecto. * En la sección *Claves de cliente* o *DSN*, encontrarás un DSN único para tu proyecto. Debe parecerse a lo siguiente: ``` https://sentry-key@sentry-identifier.ingest.us.sentry.io/project-id ``` ### Localizar una clave de API de Honeycomb Si utilizas Honeycomb como proveedor externo de supervisión, se utiliza una clave de API para autenticar y reenviar los datos. Esta clave de API está asociada a tu cuenta y proyecto de Honeycomb específicos. Para generar una clave de API de Honeycomb: * Accede a tu [cuenta de Honeycomb](https://ui.honeycomb.io/login). * Navega hasta la configuración de tu proyecto. * Busca la sección *Claves de API* y genera una nueva clave. * Copia la clave de API generada. ### Agregar un secreto utilizando la CLI de HubSpot Una vez que hayas obtenido tu DSN de Sentry o tu clave de API de Honeycomb, ejecuta el siguiente comando para agregar el valor como secreto. Cuando se te pida el nombre del secreto, debes utilizar `TELEMETRY_SECRET` para que los datos de registro se sincronicen correctamente. ```shell theme={null} hs app secrets add ``` # Crear una herramienta de agente Source: https://developers.hubspot.es/docs/apps/developer-platform/add-features/agent-tools/create-an-agent-tool Sigue este tutorial para construir una herramienta de agente, que es una acción de workflow personalizada adaptada a los agentes de IA. En HubSpot, puedes crear un agente de IA que realizará diversas acciones basándose en tus instrucciones. Por ejemplo, puedes crear un agente que te envíe un correo electrónico cada mañana con notas sobre las próximas reuniones del día. Para realizar las tareas, los agentes se apoyan en las herramientas de agente. Las herramientas son como las funciones de un lenguaje de programación: tienen parámetros que pasas a la herramienta y la herramienta devuelve un output. Las herramientas en HubSpot son similares al concepto de herramientas en MCP (Protocolo de contexto del modelo). Una herramienta de agente incluirá las llamadas a la API, pasos para el LLM y otro contexto de apoyo para que la IA pueda hacer su función. Las herramientas están diseñadas para realizar tareas específicas y definidas, como consultar una base de datos, realizar operaciones CRUD (Crear, Leer, Actualizar, Eliminar) o utilizar la IA generativa para resumir contenido. En términos de implementación, una herramienta de agente es una versión mejorada de una acción de workflow personalizada, que crearás utilizando la estructura de proyectos para desarrolladores de HubSpot. Este tutorial te guiará sobre cómo empezar a crear una herramienta de agente. ## Requisitos previos Antes de empezar, necesitarás: * Instalar la última versión beta de la CLI de HubSpot ejecutando `npm i -g @hubspot/cli@next`. * Crear una [cuenta de prueba de desarrollador](/docs/getting-started/account-types#developer-test-accounts) desde la cuenta de desarrollador que está inscrita en la beta. * Autenticar la cuenta de prueba con la CLI ejecutando el [comando `hs auth` ](/docs/developer-tooling/local-development/hubspot-cli/reference#authenticate-an-account) en tu terminal. **1. Crear un proyecto** Si empiezas desde cero, primero tendrás que crear un nuevo proyecto. Alternativamente, si quieres utilizar un proyecto existente, puedes [pasar a la siguiente sección](#2.-add-an-agent-tool-to-the-project) (se requiere la versión del proyecto `2025.2`). Para crear un nuevo proyecto: 1. En la terminal, ejecuta el siguiente comando para crear un nuevo proyecto a partir de una de las plantillas de inicio rápido. ```shell theme={null} hs project create --platform-version 2025.2 ``` 2. Sigue las indicaciones de la terminal para configurar el nombre y la ubicación del proyecto y selecciona una plantilla. Se proporcionan varias opciones de plantillas dependiendo de cómo planees [distribuir](/docs/apps/developer-platform/build-apps/app-configuration#distribution) tu aplicación. A efectos de este tutorial, selecciona el proyecto **Comenzar el proyecto con la plantilla del mercado de aplicaciones**. 3. La plantilla del proyecto se descargará en tu directorio de trabajo, donde podrás ver su contenido. Esta plantilla de proyecto incluye todos los archivos necesarios para subir un proyecto con una aplicación que incluya algunas funciones de aplicación de ejemplo. Estas funciones incluyen una [tarjeta de aplicación](/docs/apps/developer-platform/add-features/ui-extensibility/app-cards/create-an-app-card), un [webhook](/docs/apps/developer-platform/add-features/configure-webhooks) y una [acción de workflow](/docs/apps/developer-platform/add-features/custom-workflow-actions). A efectos de este tutorial, estos componentes no son necesarios, pero puede ser útil repasarlos por si quieres experimentar con ellos más adelante. **2. Agregar una herramienta de agente al proyecto** Entre bastidores, las herramientas de agente son acciones de workflow personalizadas que se configuran específicamente para el contexto del agente. Para que un agente pueda ejecutar la herramienta, de forma similar a como un workflow ejecutaría una acción, tendrás que habilitar la acción para que esté disponible en los agentes mediante el campo `supportedClients`. * En el directorio `workflow-actions`, crea un nuevo archivo JSON para la configuración de la herramienta. El archivo puede tener cualquier nombre, pero debe terminar en `-hsmeta.json` (por ejemplo, `my-agent-tool-hsmeta.json`). * Crea la configuración de la acción utilizando la [documentación de referencia de las herramientas del agente](/docs/apps/developer-platform/add-features/agent-tools/reference). Asegúrate de incluir el cliente `AGENTS` en el campo `supportedClients`, como se muestra en el código de ejemplo de abajo. ```json theme={null} { "uid": "agent_tool_action", "type": "workflow-action", "config": { "actionUrl": "https://example.com", "toolType": "GET_DATA", "llmDescription": "A description that helps the LLM understand what this tool does.", "isPublished": false, "supportedClients": [ { "client": "AGENTS" }, { "client": "WORKFLOWS" } ], "inputFields": [ { "typeDefinition": { "name": "message", "type": "string", "fieldType": "textarea" }, "supportedValueTypes": ["STATIC_VALUE"], "isRequired": false } ], "labels": { "en": { "actionName": "My custom agent tool", "actionDescription": "A description of the tool.", "actionCardContent": "Send a notification", "inputFieldLabels": { "message": "Notification Message" }, "inputFieldDescriptions": { "message": "Enter the message to be sent in the notification" } } }, "objectTypes": ["CONTACT"] } } ``` Cuando crees tu herramienta, ten en cuenta lo siguiente: * Cuando estés desarrollando activamente, no debes establecer tus campos de entrada como obligatorios, ya que los campos obligatorios no pueden actualizarse ni eliminarse una vez subidos. * Las solicitudes a los endpoints públicos se realizarán como solicitudes a `POST`. Cuando estés listo para subirlos a tu cuenta de prueba, guarda los archivos y ejecuta `hs project upload`. Si has empezado con un proyecto nuevo, se te pedirá que pulses `y` para crear el proyecto en la cuenta. > [!WARNING] > > ### Nota: > > HubSpot sigue desarrollando activamente funciones para permitir pruebas de herramientas de agente. Esta página se actualizará con más instrucciones una vez que estas funciones de prueba estén disponibles. # Resumen de los agentes y las herramientas Source: https://developers.hubspot.es/docs/apps/developer-platform/add-features/agent-tools/overview Encuentra más información sobre cómo crear herramientas para agentes y personalizar la experiencia del agente en HubSpot. En HubSpot, puedes crear un agente de IA que realizará diversas acciones basándose en tus instrucciones. Por ejemplo, puedes crear un agente que te envíe un correo electrónico cada mañana con notas sobre las próximas reuniones del día. Para realizar las tareas, los agentes se apoyan en las herramientas de agente. Las herramientas son como las funciones de un lenguaje de programación: tienen parámetros que pasas a la herramienta y la herramienta devuelve un output. Las herramientas en HubSpot son similares al concepto de herramientas en MCP (Protocolo de contexto del modelo). Una herramienta de agente incluirá las llamadas a la API, pasos para el LLM y otro contexto de apoyo para que la IA pueda hacer su función. Las herramientas están diseñadas para realizar tareas específicas y definidas, como consultar una base de datos, realizar operaciones CRUD (Crear, Leer, Actualizar, Eliminar) o utilizar la IA generativa para resumir contenido. En términos de implementación, una herramienta de agente es una versión mejorada de una acción de workflow personalizada, que crearás utilizando la estructura de proyectos para desarrolladores de HubSpot. > [!NOTE] > > Ten en cuenta los siguientes límites (en este momento) de la beta: > > * El agente no tiene acceso a los datos del CRM a menos que se le den herramientas para obtener esos datos. > * el agente no podrá solicitar más datos al usuario después de ser activado, si no recibe suficiente información para completar la tarea. ## Herramientas de creación Para crear una herramienta, consulta la [guía para crear una herramienta de agente](/docs/apps/developer-platform/add-features/agent-tools/create-an-agent-tool) junto con la [documentación de referencia](/docs/apps/developer-platform/add-features/agent-tools/reference), que incluye información sobre opciones de configuración, prácticas recomendadas y validación de solicitudes. > [!WARNING] > > ### Nota: > > HubSpot sigue desarrollando constantemente características para permitir la prueba de la herramienta de agente. Esta página se actualizará con más instrucciones una vez que estas características de prueba estén disponibles. # Referencia de las herramientas del agente (BETA) Source: https://developers.hubspot.es/docs/apps/developer-platform/add-features/agent-tools/reference Aprende a crear herramientas de agente, que son acciones de workflow personalizadas que pueden utilizar los agentes de IA. Los agentes de HubSpot son asistentes de IA con los que los usuarios pueden chatear para realizar tareas. Cada agente incluye una serie de acciones, llamadas herramientas, que utilizará según las instrucciones del usuario. Como desarrollador, puedes crear herramientas de agente personalizadas para realizar tareas específicas y bien definidas en función del caso de uso previsto del agente. Entre bastidores, las herramientas son acciones de workflow personalizadas que se configuran para que estén disponibles en el contexto del agente. Las herramientas pueden utilizarse en varios agentes, y pueden configurarse para funcionar tanto en agentes como en workflows. A gran escala, crear una herramienta de agente consiste en: * Agregar un componente de acción de workflow a una aplicación incluyendo un [directorio `workflow-actions` en el proyecto](#project-setup), junto con un archivo de configuración `*-hsmeta.json` para la herramienta. Cada herramienta y acción de workflow que crees debe tener su propio archivo de configuración `*-hsmeta.json`. * [Configurar la acción](#agent-tool-definition) para que esté disponible en los agentes de IA a través del campo `supportedClients`. Al crear tus herramientas, también debes tener en cuenta una serie de [prácticas recomendadas](#best-practices) para garantizar un rendimiento de mayor calidad. ## Configuración del proyecto Para construir herramientas, tu `hsproject.json` debe tener su `platformVersion` ajustado a `2025.2`. Esta versión se establece automáticamente en todas las [plantillas de inicio rápido](/docs/apps/developer-platform/build-apps/create-an-app), pero deberá actualizarse manualmente en los proyectos de versiones anteriores. Ten en cuenta que, al actualizar un proyecto a la versión `2025.2`, tendrás que adherirte a las nuevas normas del archivo de configuración `*-hsmeta.json` para la [configuración de tu aplicación](/docs/apps/developer-platform/build-apps/app-configuration) y sus funciones. Tanto las herramientas de agente como las acciones de workflow personalizadas se encuentran en el directorio `workflow-actions` de la aplicación. ```shell theme={null} ├──src │ ├── hsproject.json │ ├── app/ │ │ └── app-hsmeta.json │ │ └── ... │ │ └── workflow-actions/ │ │ └── agent-tool-action-hsmeta.json └── ``` ## Definición de las herramienta de agente El archivo de configuración de tus herramientas debe estar en el directorio `workflow-actions` para que funcione. Las opciones de configuración para las herramientas de agente son las mismas que las [acciones de workflow personalizadas](/docs/apps/developer-platform/add-features/custom-workflow-actions#custom-workflow-action-definition), con el requisito añadido de que el campo `supportedClients` debe incluir el cliente `AGENTS`. ```json theme={null} { "uid": "agent_tool_action", "type": "workflow-action", "config": { "actionUrl": "https://example.com", "toolType": "GET_DATA", "llmDescription": "A description that helps the LLM understand what this tool does.", "isPublished": false, "supportedClients": [ { "client": "AGENTS" }, { "client": "WORKFLOWS" } ], "inputFields": [ { "typeDefinition": { "name": "message", "type": "string", "fieldType": "textarea" }, "supportedValueTypes": ["STATIC_VALUE"], "isRequired": true }, { "typeDefinition": { "name": "priority", "type": "enumeration", "fieldType": "select", "options": [ { "value": "high", "label": "High Priority" }, { "value": "normal", "label": "Normal Priority" }, { "value": "low", "label": "Low Priority" } ] }, "supportedValueTypes": ["STATIC_VALUE"], "isRequired": true } ], "labels": { "en": { "actionName": "My custom agent tool", "actionDescription": "A description of the tool.", "actionCardContent": "Send {{priority}} priority notification", "inputFieldLabels": { "message": "Notification Message", "priority": "Priority Level" }, "inputFieldDescriptions": { "message": "Enter the message to be sent in the notification", "priority": "Select the priority level for this notification" } } }, "objectTypes": ["CONTACT"] } } ``` Los campos marcados con \* son obligatorios | Campo | Tipo | Descripción | | - | - | - | | `uid`\* | Cadena | Un identificador único interno para la acción de workflow. | | `type`\* | Cadena | El tipo de componente, que en este caso debe ser `workflow-action`. | | `actionUrl`\* | Cadena | La URL a la que la herramienta hará una solicitud de `POST`. La URL debe ser un endpoint de acceso público y no puede ser una función sin servidor definida dentro del proyecto del desarrollador. | | `toolType`\* | Cadena | La categoría de funcionalidad de la herramienta. Puede ser una de las siguientes: | | `llmDescription`\* | Cadena | Una descripción que ayude al LLM a entender lo que hace la herramienta. | | `isPublished` | Booleano | Determina si la definición es visible en las cuentas que instalaron tu aplicación. Por defecto, está configurado como `false`. | | `supportedClients`\* | Matriz | Matriz de objetos que especifica los clientes a los que da asistencia la acción de workflow personalizada. Cada objeto de la matriz debe tener una clave `client` con un valor de cadena que indique el tipo de cliente. Los valores incluyen: | | `inputFields` | Matriz | Los valores de las entradas que el usuario ha rellenado. Más información sobre las [prácticas recomendadas de cantidad de campo](#be-mindful-of-the-number-of-input-fields). | | `typeDefinition.name` | Cadena | El nombre o clave del campo de entrada. | | `typeDefinition.type` | Cadena | El tipo de valor que debe esperar el campo de entrada. | | `typeDefinition.fieldType` | Cadena | El tipo de campo que aparece a los usuarios que crean el workflow. | | `typeDefinition.options` | Matriz | Para los tipos de enumeración, este campo proporciona una lista de opciones. Cada opción debe tener un `value`, basado en la entrada que proporciona el usuario, y un `label`, que identifica la opción en la herramienta workflows. | | `inputFieldDependencies` | Matriz | Una lista de reglas que definen las relaciones entre dos o más entradas, basándose en su `dependencyType`. Más información en [este ejemplo ](/docs/api-reference/automation-actions-v4-v4/guide#example-%233). | | `labels.`\* | Cadena | Clave de configuración regional que se asigna a la definición de configuración regional. Como mínimo, debe definirse una etiqueta en inglés (`en`) y su definición. | | `labels..inputFieldDescriptions` | Objeto | Un objeto que define los detalles de las entradas de tu acción. En el ejemplo de arriba, este objeto incluye los campos `message` y `priority`. | | `labels..inputFieldOptionLabels` | Objeto | Un objeto necesario si tus campos de entrada tienen opciones. Proporciona un mapa de las etiquetas de las opciones de los campos de entrada, codificadas por el valor o la etiqueta de la opción. | | `labels..outputFieldLabels` | Objeto | Objeto que asigna las definiciones de `outputFields` a las etiquetas correspondientes que aparecen en la herramienta de workflows. | | `labels..actionName`\* | Cadena | El nombre de la acción tal y como se muestra en el panel *Elegir una acción* del editor de workflows. | | `labels..appDisplayName`\* | Cadena | El nombre de la sección del panel *Elegir una acción* donde aparecen todas las acciones de la aplicación. Si se define `appDisplayName` para varias acciones, se utilizará la primera que se encuentre. | | `labels..actionCardContent` | Cadena | Una descripción resumida que aparece en la ficha de la acción. | | `labels..executionRules` | Objeto | Un objeto que asigna las definiciones de tus `executionRules` a los mensajes que aparecerán para los resultados de la ejecución en el historial del workflow. | | `objectTypes` | Matriz | Los tipos de objetos del CRM disponibles con los que se puede utilizar esta acción. Si está vacía, la acción estará disponible para todos los tipos de objetos. | | `outputFields` | Matriz | Los valores que se mostrarán en la acción y que pueden ser utilizados por acciones posteriores del agente o workflow. Una acción personalizada puede tener 0, 1 o muchas salidas. | | `executionRules` | Objeto | Una lista de definiciones que puedes especificar para mostrar los errores de tu servicio al usuario que crea el workflow. | ## Prácticas recomendadas Cuando construyas herramientas de agentes, ten en cuenta la siguiente lista de comprobación de prácticas recomendadas: * Empieza con campos opcionales, y luego ponlos como obligatorios solo cuando sean estables. * Etiqueta y describe los campos tanto para los humanos como para la IA. * Prueba con menos instrucciones de agente al principio para entender cómo interpreta la IA una herramienta. * Mantén las herramientas centradas y ten en cuenta la cantidad de campo. * Utiliza las descripciones de los campos para controlar la creatividad de los agentes. Más información sobre cada una de las prácticas recomendadas en las secciones de abajo. > [!WARNING] > > **Nota:** > > Aunque algunas de las orientaciones que aparecen abajo incluyen información sobre las herramientas de comprobación de los agentes, estas funciones de comprobación están aún en fase de desarrollo. La documentación de las herramientas del agente se actualizará cuando estén disponibles los métodos de prueba. ### Desarrollar con campos opcionales No establezcas campos de acción (`inputFields`) como obligatorios durante el desarrollo activo. Una vez que un campo se ha establecido como obligatorio y se ha subido el proyecto, no puedes eliminar ni actualizar el campo. Solo debes establecer un campo como obligatorio cuando estés seguro de los detalles del campo, como su `name` y `type`. La razón de esta limitación es que cambiar los campos obligatorios rompería cualquier workflow activo que incluya la acción. ### Construir para la comprensión humana y de la IA `actionName`, `inputFields` y `labels` deben comunicar claramente su uso y utilidad tanto a los humanos como al agente. Estos campos en concreto los utiliza el agente para saber cuándo invocar la acción y cómo pasar los datos a la herramienta. Cuando construyas tus herramientas, ten en cuenta que los LLM pueden necesitar descripciones más explícitas que los usuarios humanos. Por ejemplo, mientras que un humano podría entender intuitivamente un campo etiquetado `Date`, un LLM podría preferir `Event start date (YYYY-MM-DD)`. Lo ideal es que las herramientas se construyan de forma que los agentes no necesiten instrucciones adicionales para utilizarlas. Sin embargo, hay casos en los que los datos de campo por sí solos pueden no ser suficientes para el agente. Por ejemplo, puede que no comprenda el orden previsto de las operaciones para ejecutar herramientas que dependen de la salida de otras herramientas (por ejemplo, una herramienta "Enviar correo electrónico" puede depender de que primero se ejecute una herramienta "Obtener información de contacto"). Cuando construyas una herramienta, deberías probarla primero en el agente sin agregarle instrucciones, para entender mejor cómo interpreta la herramienta. Mediante las pruebas, podrás determinar si el motor de razonamiento funciona correctamente por sí solo o si necesita instrucciones adicionales. ### Ten en cuenta el número de campos de entrada Los agentes pueden manejar un elevado número de campos de entrada en cada herramienta (máximo 26 entradas únicas). Sin embargo, cuantos más campos de entrada haya en una herramienta, más claro deberás ser a la hora de asignar los valores `actionName`, `inputField` y `label`. Las herramientas son más eficaces y fiables cuando se diseñan para tareas específicas con un conjunto de parámetros bien definidos. Para operaciones complejas, plantéate si sería más eficaz crear varias herramientas más sencillas que una única herramienta con un número excesivo de entradas. > [!WARNING] > > **Nota:** > > Es posible que HubSpot restrinja el número de entradas en el futuro basándose en los comentarios sobre la calidad de los agentes que manejan un gran número de entradas. ### Creatividad e improvisación del agente de control En algunos casos, puede que quieras que un agente sea creativo e improvisador. Sin embargo, puede haber situaciones en las que no quieras que el agente improvise. Experimenta dando instrucciones al LLM en los nombres, etiquetas y descripciones de tus campos de entrada. Si necesitas una orientación más estricta, agrega instrucciones al agente para establecer expectativas claras. Por ejemplo, supongamos que encomiendas a un agente la tarea de generar una publicación de blog, siendo uno de los campos el título de la entrada. Dependiendo de cuánto quieras que improvise el agente, podrías etiquetar el campo de forma permisiva o más restrictiva: * **Permisivo:** `"Blog title"` * **Restrictivo:** `"Blog title (must include the product name 'HubSpot CRM')"` Como otro ejemplo, considera las siguientes etiquetas de campo de entrada destinadas al contenido de publicaciones en redes sociales: * **Permisivo:** `"Social post content"` * **Moderado:** `"Social post content (keep under 280 characters)"` * **Restrictivo:** `"Social post content (must mention our Q4 sale, include #HubSpot, and stay under 280 characters)"` ## Verificar el origen de la solicitud de la herramienta de agente Cuando un agente utiliza una herramienta para hacer una solicitud, realiza una solicitud de `POST` a la `actionUrl` de la herramienta. La invocación de la herramienta de agente se autentica validando el título `X-HubSpot-Signature` enviado con la solicitud. Es el mismo sistema que utiliza HubSpot para [validar las solicitudes de webhook](/docs/apps/legacy-apps/authentication/validating-requests#validate-the-v3-request-signature). > [!WARNING] > > **Nota:** > > No deberías crear campos de entrada para secretos o claves de API, ya que esto es inseguro y no es el patrón de autenticación previsto, especialmente porque el LLM necesitaría recibir el secreto/clave de API en sus instrucciones o recibirlo de otra herramienta. # Crear y gestionar tipos de eventos (BETA) Source: https://developers.hubspot.es/docs/apps/developer-platform/add-features/app-events/create-and-manage-event-types Aprende a definir los tipos de eventos de la aplicación para que puedas enviar los datos de ocurrencia de eventos a HubSpot. Para enviar datos de eventos de la aplicación a HubSpot, primero crearás un tipo de evento utilizando un proyecto de desarrollador. El tipo de evento es un esquema JSON que define la estructura, las propiedades y las reglas de validación de los datos de ocurrencia del evento que vas a enviar. Esto incluye el nombre del evento, la etiqueta de visualización, el objeto del CRM de destino y las propiedades del evento. Los tipos de evento también incluyen definiciones de plantillas de visualización para la representación de la cronología de los registros del CRM. > [!WARNING] > > Los eventos de aplicación descritos en esta documentación están pensados para aplicaciones creadas para el [mercado de aplicaciones](https://ecosystem.hubspot.com/marketplace/apps) mediante proyectos de desarrollador. Para crear informes de eventos personalizados para otros tipos de integraciones, puedes utilizar [eventos personalizados](/docs/api-reference/events-manage-event-definitions-v3/guide). ## Requisitos previos Para incluir una definición de tipo de evento de aplicación en tu proyecto: * Debes estar utilizando la CLI de HubSpot versión `7.5.4` o posterior. Puedes comprobar qué versión de la CLI tienes ejecutando `hs --version`, y actualizarla ejecutando `npm i -g @hubspot/cli@next`. * Tu proyecto debe estar implementando antes de que puedas actualizarlo para incluir un componente de eventos de aplicación. ## Configurar los archivos del proyecto > [!NOTE] > > Si anteriormente creaste una aplicación pública con un evento de cronología, obtén más información sobre cómo [migrarla a la plataforma para desarrolladores](#migrate-an-existing-timeline-event-type). **1. Configuración de la aplicación y estructura del proyecto** Para crear una nueva definición de tipo de evento de aplicación en tu proyecto, actualiza el archivo `hsmeta.json` de [configuración de la aplicación ](/docs/apps/developer-platform/build-apps/app-configuration) para incluir el permiso `timeline` en el campo `requiredScopes`. Esto es necesario para que los datos de los eventos de la aplicación aparezcan en las cronologías de los registros del CRM. Los instaladores deben conceder este permiso para que tus datos de eventos se envíen correctamente. ```json theme={null} "requiredScopes": [ "timeline" ], ``` > [!NOTE] > > Ten en cuenta que puede que necesites agregar otros [permisos](/docs/apps/legacy-apps/authentication/scopes#list-of-available-scopes), dependiendo de las funciones que incluya tu aplicación. A continuación, en el directorio `app/` de tu proyecto, agrega un directorio `app-events`. En `app-events/`, agrega un archivo de configuración JSON para definir el tipo de evento de la aplicación. Este archivo puede tener cualquier nombre, pero debe terminar en `*-hsmeta.json`. Puedes incluir hasta 750 tipos de eventos por aplicación, y cada uno tiene su propio archivo `*-hsmeta.json`. ```shell theme={null} project-folder/ └── src/ └── app/ ├── app-hsmeta.json └── app-events/ └── my-event-type-hsmeta.json ``` **2. Configurar el esquema del tipo de evento** En el archivo de tipo de evento `*-hsmeta.json`, configura tu [esquema de tipo de evento](/docs/apps/developer-platform/add-features/app-events/reference#event-type-schema). Este esquema configurará los atributos del tipo de evento, como el nombre, la plantilla de visualización de la cronología del registro del CRM y el tipo de objeto del CRM al que asociar los datos del evento. Aunque algunos de estos campos pueden actualizarse después de la creación, los campos `name` y `objectType` no pueden modificarse una vez creado el tipo de evento. Por ejemplo, se podría utilizar el siguiente esquema de tipo de evento para hacer un seguimiento de los eventos de inicio de sesión de los clientes. ```json theme={null} { "uid": "customer_login_event", "type": "app-event", "config": { "name": "Customer login", "headerTemplate": "{{customerName}} logged in", "detailTemplate": "{{customerName}} logged in via the {{loginLocation}}.", "objectType": "CONTACT", "properties": [ { "name": "customerName", "label": "Customer Name", "type": "string" }, { "name": "loginLocation", "label": "Login location", "type": "enumeration", "options": [ { "value": "mobileApp", "label": "Mobile app" }, { "value": "website", "label": "Website" } ] } ] } } ``` Los campos marcados con \* son obligatorios. | Campo | Tipo | Descripción | | - | - | - | | `uid`\* | Cadena | Un identificador único interno para el tipo de evento. | | `type`\* | Cadena | El tipo de componente. Debe ser `app-event`. | | `name`\* | Cadena | La etiqueta que se muestra en HubSpot (hasta 50 caracteres). Este valor no se puede actualizar después de la creación. | | `objectType`\* | Cadena | El nombre completo del tipo de objeto del CRM al que se pueden asociar los eventos. Este valor no se puede cambiar después de la creación. Puede ser uno de los siguientes: `COMPANY`, `CONTACT`, `CUSTOM_OBJECT`, `DEAL`, `TICKET`, `APP_OBJECT`. | | `headerTemplate` | Cadena | La [plantilla de representación](/docs/apps/developer-platform/add-features/app-events/reference#rendering-templates) del encabezado de la tarjeta de actividad de la cronología del CRM. Puede tener hasta 1000 caracteres de longitud. | | `detailTemplate` | Cadena | La [plantilla de representación](/docs/apps/developer-platform/add-features/app-events/reference#rendering-templates) para el cuerpo de la tarjeta de actividad de la cronología del CRM. Puede tener hasta 10.000 caracteres de longitud. | | `properties` | Matriz | Propiedades definidas para el tipo de evento en el que vas a almacenar los datos de ocurrencia del evento. Cada tipo de evento puede tener hasta 500 propiedades. Más información sobre las propiedades, incluidos los requisitos y las limitaciones, en la [documentación de referencia de los eventos de la aplicación](/docs/apps/developer-platform/add-features/app-events/reference). | **3. Subir tus cambios a HubSpot** Sube tu proyecto a HubSpot con el comando `hs project upload`. ```shell theme={null} hs project upload ``` Durante la fase de construcción, HubSpot validará el tipo de evento. Si hay algún error de validación del esquema, la CLI devolverá un error indicando lo que hay que corregir. Por defecto, tras una compilación correcta, HubSpot implementará automáticamente el proyecto. Si lo has desactivado en la [configuración del proyecto](/docs/apps/developer-platform/build-apps/manage-apps-in-hubspot#view-your-app-on-the-project-details-page), puedes implementarlo manualmente utilizando `hs project deploy`. Tras la implementación, el tipo de evento de tu aplicación estará ahora disponible y podrá utilizarse para recibir datos de sucesos de eventos. ## Recuperar el fullyQualifiedName Para enviar los datos de ocurrencia del tipo de evento, tendrás que recuperar el `fullyQualifiedName` a través de la API de eventos de la aplicación. Este nombre identifica el tipo de evento, y deberá incluirse en todas las operaciones de la API de eventos de la aplicación. Para recuperar el `eventTypeName`, haz una solicitud `POST` a `https://api.hubapi.com/integrators/timeline/v4/types/projects`. En el cuerpo de la solicitud, incluye lo siguiente: * Un campo `projectName`, que debe ajustarse al valor `name` del archivo `hsproject.json` de tu proyecto. * Un campo `developerSymbol`, que debe ajustarse al valor `uid` del archivo de configuración del tipo de evento `*-hsmeta.json`. ```json theme={null} { "projectName": "my-marketplace-app", "developerSymbol": "customer_login_event" } ``` La respuesta devolverá el nombre del proyecto, el nombre del tipo de evento y el `fullyQualifiedName`. ```json highlight={6} theme={null} { "developerQualifiedSymbol": { "projectName": "marketplace", "developerSymbol": "customer_login_event" }, "fullyQualifiedName": "ae000000_integrators-timeline-event-type-id-0000000" } ``` El valor `fullyQualifiedName` no cambiará nunca, por lo que puedes codificarlo con seguridad en tu implementación. La API limita el número de veces que puedes recuperar este valor al día, y no puede utilizarse mediante programación. ## Gestión de tipos de eventos Para actualizar un tipo de evento después de crearlo, solo tendrás que actualizar el esquema del tipo de evento en tu proyecto, y luego volver a subirlo para crear e implementar la aplicación. Si ya no quieres utilizar un tipo de evento, puedes eliminarlo de tu proyecto. Sin embargo, antes de eliminar un tipo de evento, ten en cuenta lo siguiente: * Eliminar un tipo de evento es una acción permanente e irreversible. * Eliminar un tipo de evento elimina tanto el tipo de evento como todas las ocurrencias de ese tipo de todas las cuentas que hayan instalado la aplicación. * Si eliminas un tipo de evento, se romperán otras herramientas de HubSpot que dependen de ese tipo de evento, como los informes y los workflows. Para eliminar el tipo de evento, borra el archivo de configuración del tipo de evento `*-hsmeta.json` de tu proyecto, luego sube e implementa el proyecto. ## Migrar un tipo de evento de cronología existente Si ya tienes una aplicación pública con un evento de cronología, puedes migrarla a la plataforma para desarrolladores utilizando la CLI. > [!WARNING] > > Antes de migrar tu aplicación: > > * Consulta la [guía pública de migración de aplicaciones](/docs/apps/developer-platform/build-apps/migrate-an-app/migrate-an-existing-public-app) para revisar las consideraciones y limitaciones actuales de la beta de la plataforma para desarrolladores. > * Una vez que hayas migrado un tipo de evento de cronología existente (`v1`/`v3`) a la plataforma para desarrolladores, dispondrás de 7 días para cambiar las solicitudes existentes de la API de eventos de cronología `v1`/`v3` a los nuevos endpoints `v4`, incluidas las solicitudes de la API de ocurrencia/instancia de ambos tipos de eventos. Transcurridos 7 días, cualquier llamada existente a los endpoints de ocurrencia de eventos `v1`/`v3` devolverá errores `401`. > * Para crear y actualizar tipos de eventos y plantillas, ya no necesitarás utilizar la API. En su lugar, los gestionarás directamente en el proyecto a través del [archivo de configuración del tipo de evento](/docs/apps/developer-platform/add-features/app-events/reference#event-type-schema). > * Para enviar datos de sucesos, tendrás que utilizar los endpoints de `v4`, que ofrece [endpoints de envío único y por lotes](/docs/apps/developer-platform/add-features/app-events/send-event-occurrences). Para migrar tu aplicación: * En la terminal, ejecuta `hs app migrate`, luego sigue las indicaciones del terminal para migrar tu aplicación y el evento de cronología. * Una vez finalizado el proceso de migración, tu aplicación estará ahora en un proyecto de desarrollador, y se creará un directorio de proyecto local para ti. * Para abrir el proyecto en HubSpot, navega hasta el directorio local del proyecto y ejecuta `hs project open`. Ten en cuenta que los archivos de configuración generados (`*-hsmeta.json`) pueden contener campos con valores `null`. Estos campos son un artefacto de la migración, y es seguro eliminarlos. ## Pasos siguientes Después de crear un tipo de evento, aprende a [enviar datos de ocurrencia de eventos a través de la API](/docs/apps/developer-platform/add-features/app-events/send-event-occurrences). También puedes consultar la [documentación de referencia de los eventos de la aplicación](/docs/apps/developer-platform/add-features/app-events/reference) para seguir creando y personalizando los eventos de tu aplicación. # Visión general de los eventos de la aplicación (BETA) Source: https://developers.hubspot.es/docs/apps/developer-platform/add-features/app-events/overview Aprende a definir eventos de la aplicación en la última versión de la plataforma para desarrolladores. Mediante los eventos de la aplicación, puedes enviar datos de actividad enriquecidos desde tus sistemas externos directamente a HubSpot. Los datos de los eventos de la aplicación están asociados a los registros del CRM y pueden utilizarse en las herramientas de automatización, análisis e informes de HubSpot. A continuación, aprende más sobre cómo funcionan los eventos de las aplicaciones. Para empezar a crear eventos de la aplicación en tu proyecto: * [Crear un tipo de evento](/docs/apps/developer-platform/add-features/app-events/create-and-manage-event-types) * [Enviar datos de ocurrencias de eventos](/docs/apps/developer-platform/add-features/app-events/send-event-occurrences) * Revisa la [documentación de referencia de los eventos de la aplicación](/docs/apps/developer-platform/add-features/app-events/reference) > [!WARNING] > > Los eventos de la aplicación descritos en esta documentación están pensados para aplicaciones creadas para el [mercado de aplicaciones](https://ecosystem.hubspot.com/marketplace/apps) mediante proyectos de desarrollador. Para crear informes de eventos personalizados para otros tipos de integraciones, puedes utilizar [eventos personalizados](/docs/api-reference/events-manage-event-definitions-v3/guide). ## Cómo funcionan los eventos de la aplicación Los eventos son puntos de datos que capturan lo que ocurrió en un momento concreto, a menudo relacionados con acciones del usuario, como enviar un formulario, un mensaje SMS o consultar una página. A diferencia de los registros del CRM, que pretenden mostrar el estado actual de una entidad, los eventos pueden darte una mejor comprensión de los patrones de actividad, los cambios de comportamiento a lo largo del tiempo y otras tendencias. > [!TIP] > > Los eventos de la aplicación son ideales cuando tus datos: > > * Representan acciones o actividades que ocurren repetidamente. > * Tienen que ser analizados para consultar los cambios o el volumen a lo largo del tiempo. > * No requieren actualización después de la creación. A gran escala, un evento de la aplicación consiste en: * **Definición del tipo de evento:** un esquema JSON que define la estructura, propiedades y reglas de validación del evento. Esto incluye el nombre del evento, la etiqueta de visualización, el objeto del CRM de destino y las propiedades del evento. Los tipos de evento también incluyen definiciones de plantillas de visualización para la representación de la cronología de los registros del CRM. Los tipos de eventos se definen mediante proyectos de desarrollador. * **Ocurrencias de eventos:** instancias individuales de eventos que contienen datos reales, validados según tu esquema de tipos de eventos. Los datos de ocurrencia de eventos se envían a través de la API de eventos de la aplicación, e incluyen el identificador del tipo de evento, valores de propiedad, marcas de tiempo y metadatos adicionales, y datos de referencia de objetos del CRM para la asociación de registros del CRM. > [!NOTE] > > **Eventos de la cronología vs. eventos de la aplicación** > > Anteriormente, HubSpot lanzó los eventos de cronología para permitirte mostrar datos de eventos en cronologías de objetos del CRM. Los eventos de la aplicación permiten esa misma funcionalidad en una lista ampliada de objetos compatibles, al tiempo que también están disponibles en otras herramientas de HubSpot. Los eventos de la aplicación también tienen ahora su propia página de índice junto con los eventos personalizados, lo que proporciona una visión unificada de las actividades del evento. > > Las integraciones de eventos de cronología existentes seguirán funcionando y serán visibles en los mismos lugares que los eventos de la aplicación. Sin embargo, para crear nuevos tipos de evento o hacer cambios en los existentes, debes volver a crearlo como evento de aplicación en tu proyecto de desarrollador. ## Objetos y herramientas compatibles Al definir un tipo de evento, lo configurarás para que se asocie a un objeto del CRM específico, lo que te permitirá vincular los datos del evento a su origen, como los contactos que se conectan a tu sitio web. Las ocurrencias de eventos pueden asociarse a registros del CRM de ese tipo. Los eventos de la aplicación pueden asociarse a los siguientes objetos del CRM: * Contactos * Empresas * Negocios * Tickets * Objetos personalizados * Objetos de la aplicación Los eventos de la aplicación se pueden utilizar en las siguientes herramientas de HubSpot: * **Interfaz de gestión de eventos:** visualiza y analiza los datos de eventos de la aplicación en el panel de eventos personalizados junto con los datos de eventos personalizados navegando a **Gestión de datos** > **Eventos personalizados** en tu cuenta. * **Cronologías de los registros del CRM:** visualiza cronológicamente la actividad de los eventos de la aplicación en las cronologías de los registros del CRM asociados a las ocurrencias de los eventos. * **Herramientas de elaboración de informes:** utiliza los datos de los eventos de la aplicación para crear informes personalizados, analíticas del recorrido del cliente y conjuntos de datos para análisis y visualización. * **Calificación de leads, listas y workflows:** segmenta tu base de datos del CRM utilizando eventos para listas dinámicas, calificación de leads y desencadenantes de workflows. ## Prácticas recomendadas Cuando construyas tipos de eventos: * Utiliza nombres claros y descriptivos para los [tipos de eventos](/docs/apps/developer-platform/add-features/app-events/reference#event-type-schema) y [propiedades](/docs/apps/developer-platform/add-features/app-events/reference#event-properties), ya que aparecerán como filtros en los workflows, listas, informes y en el panel de eventos personalizados. * Elige los tipos de propiedad apropiados (cadena, número, fecha y hora, etc.) que se ajusten a tus datos y permitan un filtrado y análisis adecuados. * Incluye propiedades que sean útiles para la segmentación, los informes y los desencadenantes de automatización (por ejemplo, cantidades de transacciones, funciones de usuario, categorías de acciones). * Diseña los tipos de eventos teniendo en cuenta los casos de uso de informes y workflows, considerando cómo filtrarán y agruparán los usuarios los datos de los eventos. * Evita hacer cambios de última hora en los esquemas de tipos de eventos existentes, ya que esto puede alterar los workflows e informes existentes que dependen de la estructura de eventos. Para mantener una alta calidad de los datos de eventos: * Revisa cualquier solicitud programática de datos de ocurrencia de eventos para asegurarte de que se validarán correctamente con tu esquema de tipo de evento. * Utiliza un formato coherente para los valores de las propiedades de los eventos, especialmente para fechas, números y datos categóricos. * Asegúrate de que los eventos se asocian a [identificadores de registro del CRM válidos](/docs/apps/developer-platform/add-features/app-events/send-event-occurrences#crm-record-association). * Supervisa los índices de éxito en el envío de eventos y las [respuestas de error](/docs/apps/developer-platform/add-features/app-events/reference#occurrence-send-errors). * Revisa periódicamente los datos de los eventos en las cronologías de los registros del CRM y en el panel de eventos personalizados para comprobar su exactitud. Optimiza el rendimiento del envío de eventos al: * [Agrupar múltiples ocurrencias de eventos](/docs/apps/developer-platform/add-features/app-events/send-event-occurrences#sending-event-occurrences) en una sola solicitud de la API cuando sea posible (hasta 500 eventos por lote). * Mantener reducidas las cargas útiles de ocurrencias de eventos incluyendo solo los datos de propiedad necesarios. * Implementar una lógica de reintento exponencial para los envíos de eventos fallidos. ## Limitaciones Ten en cuenta las siguientes limitaciones cuando planifiques y construyas eventos de aplicación. ### Requisitos de la versión * Los eventos de la aplicación solo pueden crearse a través de la última versión de la plataforma de proyectos para desarrolladores (`2025.2`). * Para los tipos de eventos existentes, puedes seguir utilizando la API de eventos de cronología [v1](/docs/api-reference/legacy/crm-timeline-v1/get-integrations-v1-application-id-timeline-event-event-typeid-event-id) y [v3](/docs/api-reference/crm-timeline-v3/guide). Sin embargo, no puedes crear nuevos tipos de eventos utilizando las API `v1` y `v3`. ### Restricciones de tipos de eventos * Las ocurrencias de eventos deben ajustarse al esquema de tipos de sucesos definido o serán rechazadas. * Algunos [campos de tipos de eventos](/docs/apps/developer-platform/add-features/app-events/reference#event-type-schema) no pueden actualizarse después de crear el tipo de evento (por ejemplo, `name` y `objectType`). * Los nuevos tipos de eventos están sujetos a un proceso de revisión antes de que puedan ser activados. ### Limitaciones de datos * Las propiedades individuales están limitadas a 510 KB, y el tamaño total del evento está limitado a 1 MB. * Los eventos de la aplicación están destinados a los proveedores del mercado de aplicaciones, y solo funcionarán con aplicaciones configuradas para utilizar la autenticación de OAuth. En su lugar, los sistemas internos deben utilizar [eventos personalizados](/docs/api-reference/events-manage-event-definitions-v3/guide.mdx). ## Primeros pasos Para empezar a trabajar con eventos de la aplicación, necesitarás * [Crear un tipo de evento](/docs/apps/developer-platform/add-features/app-events/create-and-manage-event-types) para definir la estructura de tus datos de evento mediante un proyecto de desarrollador. * [Enviar datos de eventos](/docs/apps/developer-platform/add-features/app-events/send-event-occurrences#send-a-single-occurrence) a la aplicación utilizando la [API de eventos de la aplicación](). * Aprovechar los datos de HubSpot según sea necesario utilizando herramientas de informes, automatización o análisis. # Referencia de eventos de aplicación (BETA) Source: https://developers.hubspot.es/docs/apps/developer-platform/add-features/app-events/reference Información de referencia para los eventos de la aplicación en la última versión de la plataforma para desarrolladores. A continuación, encontrarás información de referencia para utilizar los eventos de la aplicación, incluidos esquemas de tipos de eventos, plantillas de representación de cronologías de eventos, campos de ocurrencia de eventos y mucho más. ## Estructura del proyecto En el contexto de un proyecto, pondrás las definiciones de los tipos de eventos en un directorio `app-events` dentro de `app/`. El directorio `app-events` debe contener un archivo de definición del esquema JSON para cada tipo de evento (`*-hsmeta.json`). ```shell theme={null} project-folder/ └── src/ └── app/ ├── app-hsmeta.json └── app-events/ └── my-event-type-hsmeta.json ``` Para incluir definiciones de tipo de evento en un proyecto se requiere lo siguiente: * Tu aplicación debe utilizar la autenticación de OAuth y estar configurada para su distribución en el mercado de aplicaciones. Además, la aplicación debe incluir `timeline` en su `requiredScopes`. Más información sobre la [configuración de aplicaciones](/docs/apps/developer-platform/build-apps/app-configuration). * Tu proyecto debe desplegarse correctamente antes de que puedas incluir un componente de eventos de aplicación. ## Esquema del tipo de evento Abajo se indican las opciones de configuración disponibles para los esquemas de tipo de evento (`*-hsmeta.json`). Ten en cuenta que algunos de los atributos que aparecen no se pueden cambiar una vez creado el tipo de evento. > [!WARNING] > > Cada aplicación está limitada a 750 tipos de eventos. ```json theme={null} { "uid": "customer_login_event", "type": "app-event", "config": { "name": "Customer login", "headerTemplate": "{{customerName}} logged in.", "detailTemplate": "{{customerName}} logged in via the {{loginLocation}}.", "objectType": "CONTACT", "properties": [ { "name": "customerName", "label": "Customer Name", "type": "string" }, { "name": "loginLocation", "label": "Login location", "type": "enumeration", "options": [ { "value": "mobileApp", "label": "Mobile app" }, { "value": "website", "label": "Website" } ] } ] } } ``` Los campos marcados con \* son obligatorios. | Campo | Tipo | Descripción | | - | - | - | | `uid`\* | Cadena | Un identificador único interno para el tipo de evento. | | `type`\* | Cadena | El tipo de componente. Debe ser `app-event`. | | `name`\* | Cadena | La etiqueta que se muestra en HubSpot (hasta 50 caracteres). Este valor no se puede actualizar después de la creación. | | `objectType`\* | Cadena | El nombre completo del tipo de objeto del CRM al que se pueden asociar los eventos. Este valor no se puede cambiar después de la creación. Puede ser uno de los siguientes: `COMPANY`, `CONTACT`, `CUSTOM_OBJECT`, `DEAL`, `TICKET`, `APP_OBJECT`. | | `headerTemplate` | Cadena | La [plantilla de representación](#rendering-templates) del encabezado de la tarjeta de actividad de la cronología del CRM. Puede tener hasta 1000 caracteres de longitud. | | `detailTemplate` | Cadena | La [plantilla de representación](#rendering-templates) para el cuerpo de la tarjeta de actividad de la cronología del CRM. Puede tener hasta 10.000 caracteres de longitud. | | `properties` | Matriz | Propiedades definidas para el tipo de evento en el que vas a almacenar los datos de ocurrencia del evento. Cada tipo de evento puede tener hasta 500 propiedades. Más información sobre las propiedades personalizadas del evento a continuación. | ### Propiedades de eventos Cuando definas el esquema de sucesos, utiliza la matriz `properties` para definir los campos a los que enviarás los datos de eventos. Cada tipo de evento puede tener hasta 500 propiedades. ```json theme={null} "properties": [ { "name": "customerName", "label": "Customer Name", "type": "string" }, { "name": "loginLocation", "label": "Login location", "type": "enumeration", "options": [ { "value": "mobileApp", "label": "Mobile app" }, { "value": "website", "label": "Website" } ] } ] ``` Los campos marcados con \* son obligatorios. | Campo | Tipo | Descripción | | - | - | - | | `name`\* | Cadena | El nombre interno de la propiedad. Debe estar en minúsculas y tener entre 1 y 500 caracteres. Los nombres de las propiedades deben ser únicos por tipo de evento. Este valor no puede coincidir con la expresión regular `"[A-Za-z0-9_\\-.]+"` ni empezar por `hs_`. | | `label`\* | Cadena | La etiqueta que se muestra en HubSpot. Debe estar en minúsculas y tener entre 1 y 500 caracteres. | | `type`\* | Cadena | Tipo de datos capturados en la propiedad. Puede ser uno de los siguientes: `STRING`, `NUMBER`, `DATE`, `ENUMERATION`. | | `options` | Matriz | Para las propiedades de tipo `ENUMERATION`, este campo proporciona las opciones disponibles. Debe contener al menos una opción. Cada opción es un objeto que contiene:
  • `name`: la etiqueta de la opción mostrada en HubSpot.
  • `value`: el valor interno proporcionado por la ocurrencia del evento.
Los `name` y `label` deben ser únicos dentro del tipo de evento. | | `objectPropertyName` | Cadena | Si se incluye, el nombre de la propiedad del objeto del CRM que debe actualizarse cuando se envíen los datos del evento a HubSpot. El valor de esta propiedad sobrescribirá cualquier valor existente en esa propiedad. Más información sobre el sellado de propiedades de registros del CRM abajo. | ### Sellado de propiedades En algunos casos, puede que quieras modificar los valores de las propiedades del registro del CRM basándote en los datos de ocurrencia del evento de la aplicación. Por ejemplo, puede que quieras actualizar el nombre y apellidos de un contacto con los nuevos valores establecidos por la ocurrencia (por ejemplo, envío de formularios). Para actualizar las propiedades de los registros del CRM mediante ocurrencias de eventos, puedes vincular una propiedad de evento a una propiedad de CRM dentro del esquema del tipo de evento. En los campos de definición de una determinada propiedad de evento, incluye el campo `objectPropertyName` y especifica la propiedad del CRM a enlazar. Una vez vinculada una propiedad, HubSpot siempre actualizará el valor de la propiedad en el registro del CRM utilizando el valor de la aparición más reciente basado en el campo `timestamp`. Por ejemplo, el siguiente esquema de tipo de evento vincula la propiedad de evento `customerName` con una propiedad de contacto personalizada denominada `custom_property_name`. Cuando los datos de ocurrencia del evento incluyan un valor para `customerName`, se actualizará `custom_property_name` para el registro del CRM asociado. ```json theme={null} "properties": [ { "name": "customerName", "label": "Customer Name", "type": "string", "objectPropertyName": "custom_property_name" } ] ``` ### Plantillas de renderizado Los esquemas de tipo de evento pueden incluir los campos `headerTemplate` y `detailTemplate` para configurar cómo se muestran los eventos en las cronologías de los registros del CRM. * `headerTemplate`: una descripción de una línea del acontecimiento en la parte superior de la tarjeta de actividad (hasta 1.000 caracteres). * `detailTemplate`: los detalles del evento en el cuerpo de la tarjeta de actividad (hasta 10.000 caracteres). Las plantillas de renderizado se escriben utilizando plantillas [Markdown](https://www.markdownguide.org/basic-syntax/) con [Handlebars](https://handlebarsjs.com/guide/). Estas plantillas pueden representar los datos de ocurrencias eventos de la siguiente manera: * En ambas plantillas, puedes acceder a cualquier dato de `property` pasado por la ocurrencia del evento utilizando la sintaxis `{{propertyName}}`. * En `detailTemplate`, puedes acceder adicionalmente a los valores `extraData` pasados por la ocurrencia del evento utilizando la sintaxis `{{extraData.fieldName}}`. Puedes acceder a cualquier nivel de atributo en `extraData` mediante la notación con puntos, como `{{extraData.person1.preferredName}}`. > [!WARNING] > > El objeto `extraData` solo puede contener JSON válido. Si el JSON está malformado, la ocurrencia será rechazada y recibirás una respuesta de error. Por ejemplo, las plantillas siguientes utilizan los datos de las propiedades `customerName` y `loginLocation`, junto con el campo `surveyData` de `extraData` [enviado a través de la ocurrencia del evento](#event-occurrences). ![Captura de pantalla que muestra el aspecto de la plantilla de representación del ejemplo siguiente en la cronología de contactos.](https://www.hubspot.com/hubfs/Knowledge_Base_Images/CRM/Contacts/example-timeline-event-rendering-template.png) ```json theme={null} "headerTemplate": "{{customerName}} logged in via the {{loginLocation}}.", "detailTemplate": "#### Post-login survey\n{{#each extraData.surveyData}}\n- **{{question}}**: {{answer}}\n{{/each}}", ``` Como las plantillas se construyen con Markdown y Handlebars, puedes aprovechar los ayudantes de Handlebars para que el contenido sea más dinámico. Por ejemplo, la `detailTemplate` incluye el [`#if` ayudante](https://handlebarsjs.com/guide/builtin-helpers.html#if) para renderizar condicionalmente el contenido en función de si los datos de ocurrencia del evento incluyen el campo `surveyData` en `extraData`. * Si `extraData` contiene `surveyData`, muestra las respuestas de las encuestas posteriores al inicio de sesión. * Si no había ningún `surveyData` en la ocurrencia del evento, muestra `No additional information.`. ![Captura de pantalla que muestra cómo se vería el código de ejemplo en la cronología de contactos. ](https://www.hubspot.com/hubfs/Knowledge_Base_Images/CRM/Contacts/if-helper-in-handlebars-template.png) ```json theme={null} "detailTemplate": "{{#if extraData.surveyData}}#### Post-login survey\n{{#each extraData.surveyData}}\n- **{{question}}**: {{answer}}\n{{/each}}{{else}}No additional information." ``` ### Usar iframes Cuando los datos de ocurrencia del evento contengan el campo `timelineIFrame`, la tarjeta de actividad de cronología incluirá un hipervínculo en el que los usuarios podrán hacer clic para abrir el contenido vinculado en un iframe. ![Captura de pantalla de un enlace incluido en una ficha de actividad de cronología gracias al campo timelineIFrame](https://www.hubspot.com/hubfs/Knowledge_Base_Images/CRM/Contacts/app-events-timeline-card-iframe-link.png) ```json theme={null} "timelineIFrame": { "linkLabel": "Click me", "headerLabel": "This is an iframe", "url": "https://hubspot.mintlify.io/en-us/apps/developer-platform/build-apps/overview", "width": 300, "height": 300 } ``` | Campo | Tipo | Descripción | | - | - | - | | `linkLabel` | Cadena | El texto del hipervínculo que lanzará el iframe al hacer clic. | | `headerLabel` | Cadena | La etiqueta de la ventana modal que muestra el contenido del iframe. | | `url` | Cadena | La URL del contenido del iframe. | | `width` | Entero | La anchura del modal del iframe. | | `height` | Entero | La altura del modal del iframe. | ## Ocurrencias del evento Para enviar ocurrencias de evento de un tipo de evento determinado, haz una petición a `POST` a los puntos finales que se indican a continuación. La API de eventos de la aplicación incluye endpoints para enviar ocurrencias de eventos individuales y lotes de ocurrencias de eventos múltiples. Para ambos endpoints, los datos de ocurrencia del evento tendrán que validarse con respecto a un esquema de tipo de evento existente, que especificarás con `eventTypeName` en el cuerpo de la solicitud. **Enviar una ocurrencia única** Para enviar una ocurrencia de evento única, haz una solicitud de `POST` a `/integrators/timeline/v4/events`. En el cuerpo de la solicitud, incluye los datos de la ocurrencia del evento, respetando el esquema definido para el tipo de suceso. ```json theme={null} { "eventTypeName": "ae000000_integrators-timeline-event-type-id-0000000", "objectId": "123456", "id": "login-1", "properties": { "customerName": "Mark S.", "loginLocation": "mobileApp" } }, ``` **Enviar un lote de ocurrencias** Para enviar un lote de ocurrencias, haz una solicitud de `POST` a `/integrators/timeline/v4/events/batch`. En el cuerpo de la solicitud, incluye hasta 500 objetos de ocurrencias de eventos separadas por comas dentro de una matriz `inputs`. Si alguna ocurrencia no se valida, las ocurrencias validadas con éxito seguirán aceptándose y persistiendo. ```json theme={null} { "inputs": [ { "EventTypeName": "ae000000_integrators-timeline-event-type-id-0000000", "id": "login_event_100", "objectId": "769851", "properties": { "customerName": "Tim", "loginLocation": "mobileApp" }, "extraData": { "surveyData": [ { "question": "How was your login experience?", "answer": "Fine!" }, { "question": "How likely are you to recommend logging in to a co-worker?", "answer": "Extremely likely" } ] } }, { "EventTypeName": "ae000000_integrators-timeline-event-type-id-0000000", "id": "login_event_101", "objectId": "769851", "properties": { "customerName": "Tim", "loginLocation": "website" }, "extraData": {} } ] } ``` En el cuerpo de la solicitud, incluye datos basados en el esquema de tipo de evento definido. El cuerpo de la solicitud debe incluir la dirección `eventTypeName`, que puedes [recuperar a través de la API](/docs/apps/developer-platform/add-features/app-events/create-and-manage-event-types#retrieve-the-fullyqualifiedname). ```json theme={null} { "eventTypeName": "ae000000_integrators-timeline-event-type-id-0000000", "objectId": "8675309", "properties": { "customerName": "Mark S.", "loginLocation": "mobileApp" }, "id": "login-1529a3gda23", "extraData": { "surveyData": [ { "question": "How was your login experience?", "answer": "Fine!" }, { "question": "How likely are you to recommend logging in to a co-worker?", "answer": "Extremely likely" } ] } } ``` Los campos marcados con \* son obligatorios. | Campo | Tipo | Descripción | | - | - | - | | `eventTypeName`\* | Cadena | El nombre completo del tipo de evento, que utilizarás para identificarlo a través de la API. Este valor lo establece automáticamente HubSpot y se puede [obtener a través de la API](/docs/apps/developer-platform/add-features/app-events/create-and-manage-event-types#retrieve-the-fullyqualifiedname) después de crear el tipo de evento. Este valor no se puede cambiar después de la creación. | | `objectId`\* | Cadena | El ID del registro del CRM a asociar con la ocurrencia del evento. Este campo puede utilizarse para todos los tipos de registros de CRM, y es el identificador recomendado. Más información sobre [la asociación de registros del CRM](#crm-record-association). | | `email` | Cadena | Para la asociación de contactos, puedes proporcionar la dirección de correo electrónico del contacto a asociar. Más información sobre [la asociación de registros del CRM](#crm-record-association). | | `utk` | Cadena | Para la asociación de contactos, puedes proporcionar la ficha de usuario de un contacto existente para asociarlo. Más información sobre [la asociación de registros del CRM](#crm-record-association). | | `domain` | Cadena | Para la asociación de empresas, puedes proporcionar el dominio del sitio web de una empresa existente. Más información sobre [la asociación de registros del CRM](#crm-record-association). | | `timestamp` | Cadena | Establece la hora de ocurrencia del evento (formato[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)). Si no se proporciona, HubSpot utilizará por defecto la marca de tiempo de cuando se envían los datos de ocurrencia del evento. | | `properties` | Objeto | Pares clave-valor de nombres y valores de [propiedades](/docs/apps/developer-platform/add-features/app-events/reference#event-properties) que has definido en el tipo de evento. | | `extraData` | Matriz | Cuando se incluye, proporciona información adicional para la representación de la cronología. Debe ser JSON válido. Más información sobre [los datos adicionales en las plantillas de representación](#rendering-templates). | | `timelineIFrame` | Objeto | Cuando se incluya, la tarjeta de cronología incluirá un hipervínculo que permitirá a los usuarios abrir los contenidos enlazados en un iframe. Más información sobre [el uso de iframes](#using-iframes). | | `id` | Cadena | Un identificador único para la ocurrencia del evento. Debe ser único dentro del tipo de evento. Si no se proporciona, HubSpot generará un UUID aleatorio. Cuando varios eventos tengan el mismo ID, se aceptará el primero y se rechazarán todos los demás. | Si alguna ocurrencia no se valida, las ocurrencias validadas con éxito seguirán aceptándose y persistiendo. El mensaje de error de la respuesta te proporcionará información sobre lo que tendrás que arreglar. ![Captura de pantalla de un ejemplo de mensaje de error que puedes recibir al enviar datos de sucesos](https://www.hubspot.com/hubfs/Knowledge_Base_Images/CRM/Contacts/timeline-events-api-error-validation-example.png) ### Asociación de registros del CRM Cada suceso debe estar asociado a un registro del CRM, con el tipo de objeto del CRM definido por el esquema de tipo de evento. La API de eventos de la aplicación incluye múltiples campos para asociar los datos de ocurrencia de eventos con los registros del CRM. Para todos los objetos del CRM compatibles, se recomienda utilizar el campo `objectId`. Sin embargo, hay algunas situaciones en las que puede que quieras utilizar los otros campos. * `utk`/`email`: si no conoces el ID del contacto, utiliza el campo `utk` y/o `email` para identificarlo. Proporcionar estos dos identificadores también te permite crear y actualizar contactos. Por ejemplo: * Si `utk` coincide con un contacto existente pero `email` no coincide, HubSpot actualizará el contacto con la nueva dirección de correo electrónico. * Si no se proporciona `objectId`, el evento se asociará a un contacto existente que coincida con `utk`/`email`, o HubSpot creará un nuevo contacto si no se encuentra ninguna coincidencia. * Ten en cuenta que `utk` por sí solo no puede crear nuevos contactos. Siempre debes incluir `email` con `utk` para garantizar una asociación adecuada. * `domain`: para la asociación de empresas, debes proporcionar la dirección `objectId`, pero también puedes incluir `domain` para actualizar la propiedad `domain` de esa empresa. # Enviar ocurrencias de eventos (BETA) Source: https://developers.hubspot.es/docs/apps/developer-platform/add-features/app-events/send-event-occurrences Aprende a enviar datos de ocurrencia de eventos a HubSpot utilizando tus esquemas de tipos de eventos definidos. Tras [definir un esquema de tipo de evento](en-us/apps/developer-platform/build-apps/features/app-events/create-and-manage-event-types) y [recuperar su fullyQualifiedName](/docs/apps/developer-platform/add-features/app-events/create-and-manage-event-types#retrieve-the-fullyqualifiedname), puedes enviar datos de ocurrencia de eventos a través de la API de eventos de la aplicación. Cuando envíes datos de eventos, tendrás que respetar el esquema que creaste anteriormente. Las solicitudes que no coincidan con el esquema fallarán en la validación y no serán capturadas por la aplicación. ## Envío de ocurrencias de eventos **Enviar una ocurrencia única** Para enviar una ocurrencia de evento única, haz una solicitud de `POST` a `/integrators/timeline/v4/events`. En el cuerpo de la solicitud, incluye los datos del evento siguiendo el esquema definido para el tipo de evento junto con el valor `fullyQualifiedName` en un campo `eventTypeName`. ```json theme={null} { "eventTypeName": "ae000000_integrators-timeline-event-type-id-0000000", "objectId": "123456", "id": "login-1", "properties": { "customerName": "Mark S.", "loginLocation": "mobileApp" } }, ``` **Enviar un lote de ocurrencias** Para enviar un lote de ocurrencias, haz una solicitud de `POST` a `/integrators/timeline/v4/events/batch`. En el cuerpo de la solicitud, incluye hasta 500 objetos de ocurrencias de eventos separadas por comas dentro de una matriz `inputs`. Si alguna ocurrencia no se valida, las ocurrencias validadas con éxito seguirán aceptándose y persistiendo. ```json theme={null} { "inputs": [ { "EventTypeName": "ae000000_integrators-timeline-event-type-id-0000000", "id": "login_event_100", "objectId": "769851", "properties": { "customerName": "Tim", "loginLocation": "mobileApp" }, "extraData": { "surveyData": [ { "question": "How was your login experience?", "answer": "Fine!" }, { "question": "How likely are you to recommend logging in to a co-worker?", "answer": "Extremely likely" } ] } }, { "EventTypeName": "ae000000_integrators-timeline-event-type-id-0000000", "id": "login_event_101", "objectId": "769851", "properties": { "customerName": "Tim", "loginLocation": "website" }, "extraData": {} } ] } ``` Los campos marcados con \* son obligatorios. | Campo | Tipo | Descripción | | - | - | - | | `eventTypeName`\* | Cadena | El nombre completo del tipo de evento, que utilizarás para identificarlo a través de la API. Este valor lo establece automáticamente HubSpot y se puede [obtener a través de la API](/docs/apps/developer-platform/add-features/app-events/create-and-manage-event-types#retrieve-the-fullyqualifiedname) después de crear el tipo de evento. Este valor no se puede cambiar después de la creación. | | `objectId`\* | Cadena | El ID del registro del CRM a asociar con la ocurrencia del evento. Este campo puede utilizarse para todos los tipos de registros de CRM, y es el identificador recomendado. Más información sobre [la asociación de registros del CRM](#crm-record-association). | | `email` | Cadena | Para la asociación de contactos, puedes proporcionar la dirección de correo electrónico del contacto a asociar. Más información sobre [la asociación de registros del CRM](#crm-record-association). | | `utk` | Cadena | Para la asociación de contactos, puedes proporcionar la ficha de usuario de un contacto existente para asociarlo. Más información sobre [la asociación de registros del CRM](#crm-record-association). | | `domain` | Cadena | Incluye este campo además de `objectId` para establecer el valor de la propiedad `domain` de la empresa. Más información sobre [la asociación de registros del CRM](#crm-record-association). | | `timestamp` | Cadena | Establece la hora de ocurrencia del evento (formato[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)). Si no se proporciona, HubSpot utilizará por defecto la marca de tiempo de cuando se envían los datos de ocurrencia del evento. | | `properties` | Objeto | Pares clave-valor de nombres y valores de propiedades que has configurado para el tipo de evento. Más información sobre las [propiedades del evento](/docs/apps/developer-platform/add-features/app-events/reference#event-properties). | | `extraData` | Objeto | Información adicional que estará disponible para las [plantillas de representación de la cronología](/docs/apps/developer-platform/add-features/app-events/reference#rendering-templates). Debe estar en formato JSON válido. | | `timelineIFrame` | Objeto | Cuando se incluya, la tarjeta de cronología incluirá un hipervínculo que permitirá a los usuarios abrir los contenidos enlazados en un iframe. Más información sobre [el uso de iframes](/docs/apps/developer-platform/add-features/app-events/reference#using-iframes). | | `id` | Cadena | Un identificador único para la ocurrencia del evento. Debe ser único dentro del tipo de evento. Si no se proporciona, HubSpot generará un UUID aleatorio. Cuando varios eventos tengan el mismo ID, se aceptará el primero y se rechazarán todos los demás. | ## Asociación de registros del CRM Cada suceso debe estar asociado a un registro del CRM, con el tipo de objeto del CRM definido por el esquema de tipo de evento. La API de eventos de la aplicación incluye múltiples campos para asociar los datos de ocurrencia de eventos con los registros del CRM. Para todos los objetos del CRM compatibles, se recomienda utilizar el campo `objectId`. Sin embargo, hay algunas situaciones en las que puede que quieras utilizar los otros campos. * `utk`/`email`: si no conoces el ID del contacto, utiliza el campo `utk` y/o `email` para identificarlo. Proporcionar estos dos identificadores también te permite crear y actualizar contactos. Por ejemplo: * Si `utk` coincide con un contacto existente pero `email` no coincide, HubSpot actualizará el contacto (mediante `utk`) con la nueva dirección de correo electrónico. * Si no se proporciona `objectId`, el evento se asociará a un contacto existente que coincida con `utk`/`email`, o HubSpot creará un nuevo contacto si no se encuentra ninguna coincidencia. * Ten en cuenta que `utk` por sí solo no puede crear nuevos contactos. Siempre debes incluir `email` con `utk` para garantizar una asociación adecuada. * `domain`: para la asociación de empresas, debes proporcionar la dirección `objectId`, pero también puedes incluir `domain` para actualizar la propiedad `domain` de esa empresa. A continuación se muestra el orden de prioridad de las propiedades de la asociación de registros del CRM, siendo el número más bajo el de mayor prioridad: | Campo | Prioridad | Descripción | | - | - | - | | `objectId` | 1 | El ID del registro del CRM (recomendado). | | `utk` | 2 | La ficha de usuario del contacto (solo contactos). | | `email` | 3 | La dirección de correo electrónico del contacto (solo contactos). | | `domain` | 4 | Dominio de la empresa (solo empresas). | ## Envío de datos adicionales Además de enviar datos a las [propiedades de los eventos](/docs/apps/developer-platform/add-features/app-events/reference#event-properties) y [actualizar las propiedades de CRM a través de las ocurrencias de los eventos](/docs/apps/developer-platform/add-features/app-events/reference#property-stamping), puedes incluir datos adicionales para la [representación de la cronología](/docs/apps/developer-platform/add-features/app-events/reference#rendering-templates) a través del objeto `extraData`. > [!WARNING] > > El objeto `extraData` solo puede contener JSON válido. Si el JSON está malformado, la ocurrencia será rechazada y recibirás una respuesta de error. Se puede acceder a los valores del campo `extraData` del tipo de evento `detailTemplate` utilizando la sintaxis `{{extraData.fieldName}}`. Todos los niveles de atributo de `extraData` están disponibles a través de la notación por puntos, como `{{extraData.person1.preferredName}}`. Por ejemplo, las plantillas siguientes utilizan los datos de las propiedades `customerName` y `loginLocation`, junto con el campo `surveyData` de `extraData` [enviado a través de la ocurrencia del evento](#event-occurrences). ![Captura de pantalla que muestra el aspecto de la plantilla de representación del ejemplo siguiente en la cronología de contactos.](https://www.hubspot.com/hubfs/Knowledge_Base_Images/CRM/Contacts/example-timeline-event-rendering-template.png) **Datos de la ocurrencia de evento** ```json theme={null} { "eventTemplateId": "5488733", "objectId": "769851", "tokens": { "customerName": "Tim", "loginLocation": "mobileApp" }, "extraData": { "surveyData": [ { "question": "How was your login experience?", "answer": "Fine!" }, { "question": "How likely are you to recommend logging in to a co-worker?", "answer": "Extremely likely" } ] } } ``` **Configuración de la plantilla de cronología** ```json theme={null} "headerTemplate": "{{customerName}} logged in via the {{loginLocation}}.", "detailTemplate": "#### Post-login survey\n{{#each extraData.surveyData}}\n- **{{question}}**: {{answer}}\n{{/each}}", ``` # Resumen de Primeros pasos Source: https://developers.hubspot.es/docs/apps/developer-platform/add-features/app-objects/overview Aprende los primeros pasos para desarrollar en HubSpot. 'Aprende los primeros pasos para desarrollar en HubSpot.'; Tanto si eres un nuevo desarrollador de HubSpot como si quieres ampliar tus conocimientos, esta sección te guiará a través del proceso de puesta en marcha. Explorarás las distintas vías de desarrollo disponibles, así como las herramientas y cuentas específicas que necesitarás para alcanzar tus metas. ## Las ventajas de una plataforma conectada Primero, es útil considerar qué hace de HubSpot una potente plataforma para desarrolladores. La base de toda cuenta de HubSpot es la plataforma [CRM](/docs/guides/crm/understanding-the-crm) (Customer Relationship Management), una base de datos de relaciones y procesos de negocios. HubSpot ofrece diferentes vías para que desarrolladores y partners externos trabajen con el CRM y puedan crear valor agregado para los usuarios finales de HubSpot. Esto incluye: * Crear integraciones y/o extensiones con las API de HubSpot para sincronizar datos entre HubSpot y plataformas externas. * Construir sitios web personalizados utilizando el CMS (Sistema de gestión de contenido) de HubSpot. Además de un conjunto completo de herramientas de gestión de contenido, el CMS se integra totalmente con el CRM. Esto facilita el lanzamiento de campañas, la captación de leads y las comunicaciones continuas con los clientes. * Personalización del CRM con extensiones de IU. Los desarrolladores pueden utilizar React para crear tarjetas personalizadas flexibles que se integran perfectamente con HubSpot. En la siguiente sección, obtendrás un resumen de las herramientas que están disponibles para los desarrolladores de HubSpot. A continuación, elegirás una ruta para continuar tu viaje como desarrollador de HubSpot. ## 1. Instala herramientas que te ayuden a construir Hay una amplia gama de herramientas disponibles para los desarrolladores de HubSpot. La combinación de herramientas que necesitarás dependerá de tus metas específicas. * **CLI de HubSpot:** Instalar la CLI de HubSpot para el desarrollo local es un gran punto de partida para muchas tareas de desarrollo. La CLI se utiliza al crear extensiones de IU y recursos de CMS, y puede utilizarse para crear y gestionar secretos, tablas de HubDB y datos de objetos personalizados de tu cuenta. Necesitarás tener instalado [Node.js](https://nodejs.org/en/) (se requiere la versión 18 o superior, y se recomienda la versión LTS). Para instalar el CLI globalmente, ejecuta el siguiente comando: ```shell theme={null} npm i -g @hubspot/cli ``` * **Visual Studio Code:** Instalar [Visual Studio Code](https://code.visualstudio.com/) significa que puedes aprovechar la extensión [Visual Studio Code de HubSpot](https://developers.hubspot.com/docs), lo cual te permite centralizar tu workflow de desarrollo. * **Bibliotecas de clientes**: HubSpot proporciona bibliotecas de clientes para [Node](https://github.com/HubSpot/hubspot-api-nodejs), [PHP](https://github.com/HubSpot/hubspot-api-php), [Ruby](https://github.com/HubSpot/hubspot-api-ruby) y [Python](https://github.com/HubSpot/hubspot-api-python). * **Postman:** utiliza [Postman](https://www.postman.com/) para acceder a [Colecciones de Postman de HubSpot](https://www.postman.com/hubspot). A lo largo de la documentación de la API de HubSpot, encontrarás botones para ejecutar llamadas utilizando la colección. ![run-in-postman-current-docs-site](https://www.hubspot.com/hubfs/run-in-postman-current-docs-site.png) Más información sobre [herramientas para desarrolladores de de HubSpot](/docs/developer-tooling/overview). ## 2. Decide qué construir No hay un camino único para desarrollar con HubSpot. Es una plataforma flexible que puede satisfacer una amplia gama de necesidades. Una de las cuatro amplias categorías que se enumeran a continuación debería cubrir la mayoría de estas necesidades. Puedes elegir la que sea más relevante para ti en este momento para una breve introducción, junto con algunos pasos inmediatos para empezar. También puedes hacerte una idea de cuáles son las mejores herramientas para el trabajo, y si se requiere un [tipo específico de cuenta de HubSpot](/docs/getting-started/account-types). * [Utilizar API y crear integraciones](https://developers.hubspot.com#use-apis-and-build-integrations) * [Crear aplicaciones para el mercado](https://developers.hubspot.com#build-for-the-app-marketplace) * [Personalizar la IU de HubSpot](https://developers.hubspot.com#customize-the-hubspot-ui) * [Crear sitios web personalizados](https://developers.hubspot.com#build-custom-websites) ## 3. Únete a tus pares Conecta con tus pares que ya están construyendo en HubSpot. Haz preguntas, comparte conocimientos, construye una comunidad e incluso puede que hagas amigos por el camino. * [Slack para desarrolladores](https://developers.hubspot.com/community) * [Foros de desarrolladores](https://community.hubspot.com/t5/HubSpot-Developers/ct-p/developers) * [Developer Advocacy GitHub](https://github.com/hubspotdev) ## 4. Obtén más información, a tu manera Una vez que estés en marcha, hay muchos recursos disponibles para ayudarte a profundizar. Puedes acceder a guías detalladas, documentos de referencia detallados o a los cursos de [HubSpot Academy](https://academy.hubspot.com/courses), según tu estilo de aprendizaje preferido. # Comenzar a usar los objetos de la aplicación (BETA) Source: https://developers.hubspot.es/docs/apps/developer-platform/add-features/app-objects/quickstart-guide-to-app-objects Aprende a crear una nueva aplicación unificada de prueba de concepto (BETA). > [!NOTE] > > Esta función requiere la aprobación de HubSpot para su uso. Si estás interesado en solicitar acceso a los objetos de la aplicación, o si quieres saber más sobre la funcionalidad, envía [este formulario de interés](https://developers.hubspot.com/docs/apps/developer-platform/add-features/app-objects/overview). Aprende a crear una aplicación de prueba de concepto en la que configurarás un objeto de aplicación que podrás probar y utilizar en una cuenta de prueba de desarrollador. **1. Instalar la última versión de la CLI de HubSpot** Necesitarás la última versión beta de la [CLI de HubSpot](/docs/developer-tooling/local-development/hubspot-cli/reference) para crear una aplicación unificada. En una ventana de terminal, ejecuta el siguiente comando: ```shell theme={null} npm install -g @hubspot/cli@next ``` La CLI debe ser de la versión `7.4.4-beta.0` o posterior. Puedes comprobar qué versión de la CLI tienes ejecutando `hs --version`. **2. Autenticar tu cuenta de desarrollador** A continuación, tendrás que autenticar tu cuenta de desarrollador ejecutando el siguiente comando: ```shell theme={null} hs auth ``` * Sigue las indicaciones para generar una clave de acceso personal en tu cuenta, luego cópiala y pégala en la terminal para guardar tu configuración. * Durante este período beta, se recomienda que hagas de esta cuenta tu cuenta predeterminada en la CLI. Esto evitará posibles errores con el acceso de la cuenta que has inscrito en la beta. **3. Crear un nuevo proyecto estándar** Ejecuta el siguiente comando en tu terminal para crear un nuevo proyecto y una aplicación de mercado con las funciones compatibles actualmente o un esquema de referencia de objetos de aplicación. ```shell theme={null} hs project create --templateSource robrown-hubspot/hubspot-project-components-ua-app-objects-beta ``` **4. Configura el proyecto recién creado y súbelo a tu cuenta de desarrollador** El marco de proyectos traslada las funciones de la aplicación que antes se configuraban en la interfaz de usuario o a través de la API a archivos de código fuente, normalmente definidos como archivos de configuración de `-hsmeta.json`. A continuación, las funciones de la aplicación se crean utilizando una combinación de subcarpetas del directorio principal `/src/app` y otros archivos de configuración, según sea necesario. Para configurar tu proyecto: * Agrega una o varias URL de redireccionamiento válidas al archivo `app-hsmeta.json` en función de la configuración de tu servidor OAuth local (u otro que no esté en producción). > [!TIP] > > ### Nota: > > Para empezar, puedes utilizar el [ejemplo OAuth Node.js](http://github.com/hubspot/oauth-quickstart-nodejs) y ejecutarlo localmente. Ya está configurado para funcionar con `https://localhost:3000/oauth-callback` como la URL de redireccionamiento configurada en el código de ejemplo del comando `hs project create` que ejecutaste en el paso anterior. * Cambia la propiedad `uid` de la aplicación en el archivo `app-hsmeta.json` y en los demás archivos de configuración `*-hsmeta.json` de tu proyecto. > [!WARNING] > > Los UID se utilizan como identificador único para todos los componentes y características de tu proyecto. Una vez creados una función y un UID, cambiar o modificar el UID en implantaciones posteriores forzará a la plataforma a reconocerlo como diferente de las funciones anteriores, lo que puede no ser intencionado. * Cuando utilices objetos de aplicación para tu aplicación unificada, solo se permitirán las definiciones de propiedad "nombre" autorizadas en función de tu solicitud de objeto. Como parte de esta beta privada, deberías haber recibido por separado la confirmación del "nombre" aprobado de tu aplicación, que debe utilizarse en la configuración de `*-object-hsmeta.json`. Como referencia, el nombre completo (FQN) de tu objeto de aplicación será `a_`. Por ejemplo, si tu `appId` es `16858319` y tu `name` propiedad era `CARS`, entonces tu FQN sería `a16858319_cars`. * Una vez guardados los cambios, ejecuta el comando de CLI `hs project upload` para subir tu proyecto a la plataforma de desarrolladores de HubSpot y desencadenar automáticamente una nueva compilación. * En una ventana del navegador, navega a `https://app.hubspot.com/developer_projects/` para visitar la interfaz de usuario del proyecto y confirmar que la aplicación y el proyecto se han creado, construido y desplegado correctamente. **5. Agrega a tu aplicación el ID de cliente y el secreto de cliente de tu aplicación** * Después de subir tu proyecto, tendrás que obtener los detalles de autenticación de tu aplicación para copiarlos en tu configuración de OAuth: * Haz clic en **Proyectos** en el menú de navegación *Desarrollo*. * Haz clic en el **nombre** de la aplicación. * Haz clic en **UID** de tu aplicación y, a continuación, en la pestaña **Autenticación**. * Copia el *ID de cliente* y el *secreto de cliente* de tu nueva aplicación y pégalos en las ubicaciones correspondientes de la configuración de tu servidor OAuth local, luego reinicia tu servidor OAuth. **6. Configurar el esquema de objetos de la aplicación** A continuación configurarás el esquema de objetos de tu aplicación: * Agrega un nuevo objeto de la aplicación creando un directorio dentro del directorio `/src/app` y nómbralo `app-objects`. La ruta resultante al nuevo directorio debe ser `/src/app/app-objects`. * Crea un nuevo archivo de configuración para representar el esquema de tu objeto, Debes utilizar el nombre del objeto concedido a tu aplicación durante el proceso de previsualización como prefijo para el nombre del archivo, seguido de `-object-hsmeta.json`. Por ejemplo, en la plantilla del proyecto de referencia, el nombre del objeto de la aplicación es "CAR", por lo que el archivo de configuración resultante se llama `car-object-hsmeta.json`. * Consulta el archivo de referencia de [definición del componente del objeto de la aplicación](/docs/apps/developer-platform/add-features/app-objects/reference#app-schema) y personaliza los campos con los valores correspondientes a tu objeto de la aplicación. * Dentro del objeto `config` de tu definición, el campo `name` debe coincidir con el nombre que se concedió a tu aplicación durante el proceso de revisión, formateado en `UPPER_SNAKE_CASE`. * Ten en cuenta que una vez que las propiedades y los campos se han agregado al esquema del objeto de tu aplicación y se han subido a tu proyecto en el paso siguiente, no se pueden eliminar. > [!TIP] > > ### Nota: > > Para mayor comodidad durante las pruebas, se puede utilizar el mismo nombre de objeto de aplicación en varias aplicaciones para apoyar tu ciclo de vida de desarrollo. Empieza con esta aplicación de prueba de concepto y, a medida que las migraciones estén disponibles, podrás utilizar el mismo nombre y las mismas definiciones de esquema en tus aplicaciones de desarrollo, ensayo y producción. Los UID de cada una de estas instancias deberán ser únicos. * Cuando hayas terminado de editar la definición del esquema del objeto de tu aplicación y estés listo para confirmar los cambios, ejecuta los siguientes comandos para guardar los cambios: ```shell theme={null} hs project upload hs project deploy ``` * En una ventana del navegador, navega a `https://app.hubspot.com/developer_projects/` para visitar la interfaz de usuario del proyecto y confirmar que la aplicación y el proyecto se han creado, construido y desplegado correctamente. **7. Actualizar la aplicación** Ahora que has subido el esquema de objetos de tu aplicación, tendrás que actualizar los permisos definidos en tu archivo `app-hsmeta.json` para que reflejen los permisos creados en el paso anterior. Estos permisos deberían ser visibles en los registros de la CLI después de ejecutar `hs project upload`. * Edita el archivo `app-hsmeta.json` y agrega los nuevos permisos a la matriz de `requiredScopes` dentro de la definición de `auth`. Por ejemplo, si tu `appId` fuera `a12345`, entonces editarías la definición de `auth` a lo siguiente: ```json theme={null} "auth": { "type" : "oauth", "redirectUrls": ["http://localhost:3000/oauth-callback"], "requiredScopes": [ "crm.objects.contacts.read", "crm.objects.contacts.write", "crm.app.objects.a12345_my_app_object.view", "crm.app.objects.a12345_my_app_object.create", "crm.app.objects.a12345_my_app_object.edit", "crm.app.schemas.a12345_my_app_object.read", "crm.app.objects.a12345_my_app_object.merge", "crm.app.objects.a12345_my_app_object.delete", "crm.app.schemas.a12345_my_app_object.properties.write" ], "optionalScopes": [], "conditionallyRequiredScopes": [] }, ``` > [!WARNING] > > ### Nota: > >
    >
  • > Los clientes solo podrán ver el objeto de tu aplicación si el permiso `schemas.read` > se incluye en la configuración de tu aplicación, y se solicita durante el flujo > de instalación/autorización de OAuth. Es muy recomendable incluir > todos los permisos de objetos de la aplicación en tu configuración, pero `schemas.read` es obligatorio para > que los clientes puedan acceder a ella. Por ejemplo, para una `appId` de `12345`, > incluirías `crm.app.schemas.a12345_MY_APP_OBJECT.read` como un permiso > obligatorio. >
  • > >
  • > Dependiendo de la aplicación con la que estés probando (prototipo, desarrollo, preparación, > producción), tendrás que tener en cuenta dónde agregas las definiciones > de tu permiso. Aunque todavía no se puede implementar una aplicación de producción durante > esta fase de la beta privada, suele ser más seguro incluir estos > permisos como `conditionallyRequiredScopes` cuando estés listo para la producción. > Más información sobre estos tipos de permisos en la [documentación de la aplicación pública > ](/docs/apps/legacy-apps/public-apps/overview#scope-types). >
  • >
* Cuando hayas terminado de agregar estos permisos y hayas guardado los cambios, ejecuta los siguientes comandos para confirmar los cambios en la plataforma: ```shell theme={null} hs project upload hs project deploy ``` Una vez completada la implementación, tu aplicación y el objeto de aplicación correspondiente ya están listos para probar con una cuenta instalada. **8. Crear una cuenta de prueba de desarrollador (opcional) e instalar la aplicación** Si aún no tienes una [cuenta de prueba](/docs/getting-started/account-types#developer-test-accounts), puedes crear una en HubSpot: * Navega hasta **Cuentas de prueba** en el menú de navegación *Desarrollo* y haz clic en **Crear cuenta de prueba de desarrollador**. Sigue las indicaciones para crear tu nueva cuenta de prueba. * En el menú de la barra lateral izquierda, navega hasta **Proyectos**, haz clic en el **nombre** de tu nuevo proyecto y haz clic en el **UID** de tu aplicación en la lista de componentes. * En la pestaña *Autenticación* , copia el enlace de instalación de tu aplicación. * Utiliza este enlace para instalar la aplicación en tu cuenta de prueba de desarrollador. * Abre la cuenta de prueba y ve a la página de *Aplicaciones conectadas*, donde deberías ver tu aplicación instalada. * En tu cuenta de prueba, navega hasta **CRM** > **Contactos**, y haz clic en el menú desplegable objeto del CRM y confirma que el objeto de tu aplicación está disponible. * A continuación, puedes confirmar que tu definición del esquema se ajusta a tu archivo de configuración creando un nuevo registro de tu objeto de la aplicación. ![app-object-available-in-crm](https://www.hubspot.com/hubfs/Knowledge_Base_2023-24-25/test-app-object-in-developer-test-account-1.png) **9. Acceso programático a datos mediante la API de objetos de HubSpot** Ahora que has creado con éxito tu objeto de aplicación y lo has probado en una cuenta de prueba de desarrollador, puedes utilizar el token de acceso OAuth asociado a la cuenta de prueba instalada para realizar solicitudes de actualización de datos en la cuenta directamente a través de la API de objetos. Lee la [API de objetos](/docs/guides/crm/using-object-apis) para obtener más información sobre la API, pero cualquier solicitud específica del objeto de tu aplicación seguirá las mismas convenciones que otros objetos estándar de HubSpot. Tendrás que utilizar la dirección `objectTypeId` o `fullyQualifiedName` de tu objeto de aplicación como parámetro de la ruta `objectType` en tu solicitud. Por ejemplo, el siguiente bloque de código demuestra cómo hacer una petición a cURL para crear un nuevo registro del objeto de tu aplicación: ```shell theme={null} curl --request POST \ --url https://api.hubapi.com/crm/v3/objects/ \ --header 'authorization: Bearer YOUR_ACCESS_TOKEN' \ --header 'content-type: application/json' \ --data '{ "properties": { "additionalProp1": "string", "additionalProp2": "string", "additionalProp3": "string" } }' ``` Puedes encontrar el `objectTypeId` de tu objeto de aplicación navegando a la página del índice de registros: * Navega a **CRM** > **Contactos** en la cuenta de prueba de desarrollador en la que instalaste tu aplicación. * Haz clic en el menú **desplegable** de la parte superior de la página y selecciona tu **objeto de aplicación**. * El `objectTypeId` aparecerá en la URL entre la parte `/objects//views`. ## Próximos pasos Consulta la [documentación de referencia](/docs/apps/developer-platform/add-features/app-objects/reference) para saber cómo utilizar los objetos de aplicación con las distintas funciones de la plataforma de desarrollo: * [Configurar una tarjeta de aplicación](/docs/apps/developer-platform/add-features/app-objects/reference#app-card-schema) * [Configurar suscripciones de webhook](/docs/apps/developer-platform/add-features/app-objects/reference#webhooks-component-definition) * [Habilitar asociaciones con otros tipos de objetos del CRM](/docs/apps/developer-platform/add-features/app-objects/reference#app-object-associations) # Referencia de objetos de aplicación (BETA) Source: https://developers.hubspot.es/docs/apps/developer-platform/add-features/app-objects/reference Información de referencia para construir objetos de aplicación, incluyendo opciones de configuración para aplicaciones, objetos de aplicación y más. > [!NOTE] > > Esta función requiere la aprobación de HubSpot para su uso. Si estás interesado en solicitar acceso a los objetos de la aplicación, o si quieres saber más sobre la funcionalidad, envía [este formulario de interés](/docs/apps/developer-platform/add-features/app-objects/overview). Abajo encontrarás información de referencia sobre las características de las aplicaciones de la plataforma de desarrollo con objetos de aplicación, incluidas las definiciones de los archivos de configuración, los detalles de los permisos y mucho más. ## Estructura del proyecto * Todos los componentes del proyecto deben estar dentro del directorio `src` especificado en el archivo de configuración `hsproject.json`. * Todas las funciones y componentes de la aplicación deben estar en el directorio `app/`. * Las asociaciones de objetos de la aplicación se definen en el directorio `app-object-associations/`. * Las suscripciones a webhooks se definen en el directorio `webhooks/`. * Las acciones de workflow personalizadas se definen en el directorio `workflow-actions/`. * Todas las funciones de la tarjeta deben estar en el directorio `cards/`. * Todas las instancias de componentes y características se declaran utilizando los archivos `*-hsmeta.json`. Debes anteponer al nombre del archivo algo significativo (por ejemplo, `my-app-hsmeta.json`). Estos archivos deben estar en el nivel raíz de sus respectivas carpetas (por ejemplo, `app/my-app-hsmeta.json`, `cards/my-card-hsmeta.json`). El ejemplo de estructura de directorios que aparece abajo describe todas las funciones disponibles. ```shell theme={null} my-folder/ ├── hsproject.json ├──src │ ├── app/ │ │ └── app-hsmeta.json/ │ │ └── app-objects/ │ │ └── my-app-object-hsmeta.json │ │ └── app-object-associations/ │ │ └── my-app-object-association-hsmeta.json │ │ └── webhooks/ │ │ └── webhooks-hsmeta.json │ │ └── cards/ │ │ └── my-app-card-hsmeta.json │ │ └── MyCard.jsx └── ``` > **[Ver ejemplo en GitHub](https://github.com/robrown-hubspot/hubspot-project-components-ua-app-objects-beta/tree/main/projects/app-object-getting-started-template)** ## Objetos de aplicación Para crear un objeto de aplicación, incluye un directorio de componentes `app-objects` en el proyecto, junto con un archivo de configuración. ```shell theme={null} ... ├──src │ ├── app/ │ │ └── app-hsmeta.json │ │ └── ... │ │ └── app-objects/ │ │ └── my-app-object-hsmeta.json └── ``` Abajo se indican las opciones de configuración disponibles para `*-object-hsmeta.json`. ```json theme={null} { "uid": "car-app-object", "type": "app-object", "config": { "name": "CAR", "appPrefix": "Vroom", "description": "An automobile in our warehouse.", "singularForm": "Car", "pluralForm": "Cars", "primaryDisplayLabelPropertyName": "model", "secondaryDisplayLabelPropertyNames": ["make"], "settings": { "hasRecordPage": true, "allowsUserCreatedRecords": true, "hasEngagements": true }, "properties": [ { "type": "string", "fieldType": "text", "name": "model", "label": "Model", "description": "The model of the car" }, { "type": "enumeration", "fieldType": "select", "name": "make", "label": "Make", "description": "The manufacturer of the car.", "options": [ { "label": "Ford", "value": "ford", "displayOrder": 0 }, { "label": "Toyota", "value": "toyota", "displayOrder": 1 }, { "label": "Chevrolet", "value": "chevrolet", "displayOrder": 2 } ] } ] } } ``` > **[Ver ejemplo en GitHub](https://github.com/robrown-hubspot/hubspot-project-components-ua-app-objects-beta/blob/main/projects/app-object-getting-started-template/src/app/app-objects/car-object-hsmeta.json)** Los campos marcados con \* son obligatorios. | Campo | Tipo | Descripción | | - | - | - | | `uid`\* | Cadena | Un identificador único para el objeto de la aplicación. Debe ser globalmente único dentro del proyecto. | | `type`\* | Cadena | El tipo de componente. Debe coincidir con el nombre de la carpeta primaria (`app-object`). | | `name`\* | Cadena | El nombre de tu objeto de aplicación. Utiliza el nombre aprobado que recibiste en la confirmación de tu aplicación aprobada. Debe ser en mayúscula y snake case (`MY_OBJECT_NAME`). | | `appPrefix` | Cadena | Una cadena que precede al nombre singular o plural del objeto en la interfaz de HubSpot para ayudar a diferenciarlo de otros objetos. En este ejemplo, `appPrefix` de `Vroom` y `singularForm` de `Car` harían que en la interfaz de usuario apareciera "Vroom Car". | | `description`\* | Cadena | la descripción del objeto, que se mostrará en HubSpot. | | `singularForm`\* | Cadena | La forma singular del nombre del objeto. | | `pluralForm`\* | Cadena | La forma plural del nombre del objeto. | | `properties`\* | Matriz | Lista de propiedades del CRM definidas para el objeto. Las propiedades se definen utilizando los mismos campos que la [API de propiedades](/docs/api-reference/crm-properties-v3/guide). A las propiedades resultantes se les agregará automáticamente `a_` (por ejemplo, `a12345_make`) en el momento de la creación. No debes incluir el prefijo en el archivo de configuración. | | `primaryDisplayLabelPropertyName`\* | Cadena | El nombre de la propiedad que debe utilizarse como [propiedad de visualización principal](https://knowledge.hubspot.com/object-settings/create-custom-objects#:~:text=object%27s%20singular%20name.-,Primary%20display%20property,-%3A%20the%20property%20used). El valor debe coincidir con el nombre proporcionado en la lista `properties` (es decir, no debe incluir el prefijo generado `a_`.) | | `secondaryDisplayLabelPropertyNames`\* | Matriz | La lista de propiedades que deben utilizarse como [propiedades de visualización secundarias](https://knowledge.hubspot.com/object-settings/create-custom-objects#:~:text=Secondary%20properties%3A). El valor debe coincidir con el nombre proporcionado en la lista `properties` (es decir, no debe incluir el prefijo generado `a_`.) | | `settings`\* | Objeto | Un objeto que contiene ajustes del objeto. | | `hasRecordPage`\* | Booleano | Si existen páginas de registro para las instancias de este objeto de aplicación. Si se configura en `false`, la página de índice seguirá existiendo, pero no incluirá enlaces a páginas de registros individuales. | | `allowsUserCreatedRecords`\* | Booleano | Si los usuarios finales podrán crear registros utilizando el objeto. Si se configura en `false`, los usuarios no podrán crear registros en HubSpot | | `hasEngagements`\* | Booleano | Si el objeto de la aplicación registra actividades/interacciones de asistencia. Si se establece en `false`, las páginas de registro de objetos de la aplicación no incluirán ninguna funcionalidad de interacción, como la pestaña de actividad o los filtros de cronología relacionados con la actividad. | > [!NOTE] > > El nombre completo (FQN) de tu objeto de aplicación será `a_`. Por ejemplo: si tu `appId` es `16858319` y el nombre del objeto de la aplicación es `CARS`, entonces el FQN sería `a16858319_CARS`. Utilizarás el FQN cuando establezcas valores de alcance para los objetos de tu aplicación. ## Esquema de la aplicación Para crear un objeto de aplicación, incluye un archivo de configuración `app-hsmeta.json` en el directorio `app`. ```shell theme={null} ... ├──src │ ├── app/ │ │ └── app-hsmeta.json/ └── ``` Abajo se indican las opciones de configuración disponibles para `app-hsmeta.json`. > **Resumen de cambios** > > Ten en cuenta los siguientes cambios en los archivos de configuración de las tarjetas de aplicación: > > * Agregados los campos de nivel superior `uid`, `type` y `config`. > * Eliminado el campo `extensions`. > * Agregado el campo `distribution`. ```json theme={null} { "uid": "app_object_poc_app", "type": "app", "config": { "description": "An example to demonstrate how to build an app with an app object on developer projects.", "name": "my first app object app", "distribution": "marketplace", "auth": { "type": "oauth", "redirectUrls": ["http://localhost:3000/oauth-callback"], "requiredScopes": ["crm.objects.contacts.read", "crm.objects.contacts.write"], "optionalScopes": [], "conditionallyRequiredScopes": [] }, "permittedUrls": { "fetch": ["https://api.hubapi.com"], "iframe": [], "img": [] }, "support": { "supportEmail": "support@example.com", "documentationUrl": "https://example.com/docs", "supportUrl": "https://example.com/support", "supportPhone": "+18005555555" } } } ``` > **[Ver ejemplo en GitHub](https://github.com/robrown-hubspot/hubspot-project-components-ua-app-objects-beta/blob/main/projects/app-object-getting-started-template/src/app/app-hsmeta.json)** ### Esquema de la aplicación \*-hsmeta.json campos Los campos marcados con \* son obligatorios | Campo | Tipo | Descripción | | - | - | - | | `uid`\* | Cadena | Un identificador único interno para la aplicación. Debe ser globalmente único dentro del proyecto. Puede ser cualquier cadena de hasta 64 caracteres. Los caracteres pueden ser mayúsculas o minúsculas, y pueden incluir números, guiones bajos (`_`), guiones (`-`) y puntos (`.`). | | `type`\* | Cadena | El tipo de componente. Debe coincidir con el nombre de la carpeta primaria (`app`). | | `description`\* | Cadena | Descripción de lo que hace la aplicación para el usuario que la instala. Puede ser cualquier cadena de hasta 8192 caracteres. | | `name`\* | Cadena | El nombre de la aplicación, que se mostrará en HubSpot. Puede ser cualquier cadena de hasta 200 caracteres. No debe empezar ni terminar con un carácter de espacio en blanco. | | `distribution`\* | Cadena | El método de distribución de la aplicación. Debe estar configurado en `marketplace` para que la aplicación pueda aparecer en el mercado de aplicaciones. | | `auth`\* | Objeto | Un objeto que contiene los detalles del método de autenticación de la aplicación. Consulta la [tabla de autenticación](#auth-fields) para más detalles. | | `permittedUrls` | Objeto | Una matriz que contiene las URL a las que la aplicación puede llamar. Las URL deben utilizar el esquema HTTPS y deben contener una [autoridad](https://developer.mozilla.org/en-US/docs/Learn_web_development/Howto/Web_mechanics/What_is_a_URL#authority), seguida de un prefijo de ruta opcional si es necesario. | | `supportEmail` | Cadena | Una dirección de correo electrónico válida con la que los usuarios puedan ponerse en contacto para recibir asistencia. | | `documentationUrl` | Cadena | La URL externa a la que los usuarios pueden navegar para obtener documentación de apoyo. Debe utilizar HTTPS. | | `supportUrl` | Cadena | La URL externa a la que los usuarios pueden navegar para obtener asistencia adicional. Debe utilizar HTTPS. | | `supportPhone` | Cadena | El número de teléfono al que pueden dirigirse los usuarios para solicitar asistencia. Debe empezar por el signo más (`+`). | ### campos de autenticación Los campos marcados con \* son obligatorios. | Campo | Tipo | Descripción | | - | - | - | | `type`\* | Cadena | El tipo de autenticación. Debe estar configurado como `oauth` para que la aplicación utilice la autenticación con OAuth. | | `redirectUrls`\* | Matriz | Lista de URL a las que el proceso de OAuth puede redirigir. Cada aplicación debe tener al menos una URL de redireccionamiento de autenticación, y debe utilizar HTTPS. La única excepción es que se permite `http://localhost` para las pruebas. | | `requiredScopes`\* | Matriz | Una lista de los permisos necesarios para tu aplicación. Cada aplicación debe incluir al menos un permiso, y el usuario que la instala debe conceder estos permisos para que la aplicación se instale correctamente. [Más información sobre los permisos a continuación](#scopes). | | `optionalScopes` | Matriz | Una lista de los permisos opcionales de tu aplicación. Estos permisos pueden excluirse de la autorización durante la instalación si la cuenta o el usuario que instala la aplicación no tiene los permisos adecuados. En ese caso, el permiso no se incluirá en el token de actualización o de acceso resultante. [Más información sobre los permisos abajo](#scopes). | | `conditionallyRequiredScopes` | Matriz | Lista de permisos que solo son necesarios cuando se incluyen en el parámetro de consulta `scope` de la URL de instalación. [Más información sobre los permisos abajo](#scopes). | ### Permisos En el campo `auth` del archivo de configuración de una aplicación, puedes especificar tres [tipos de permisos](/docs/apps/legacy-apps/public-apps/overview#scope-types): permisos requeridos, permisos requeridos condicionalmente y permisos opcionales. Para esta etapa de la beta, solo debes incluir los permisos de los objetos de tu aplicación como `conditionallyRequiredScopes`. Esto te permitirá aislar tus nuevas funciones para clientes específicos incluyendo los permisos de los objetos de la aplicación en la URL de instalación. Los permisos de los objetos de la aplicación utilizan el siguiente formato: `crm.app.schemas..read` Por ejemplo, para un objeto de aplicación con el FQN `a16858319_cars`, el permiso `read` sería: `crm.app.schemas.a16858319_cars.read`. Como mínimo, tu aplicación debe incluir el permiso `read` de arriba para que los clientes puedan acceder al objeto. Se recomienda incluir todos los permisos de objetos de aplicación en tu aplicación, como se muestra abajo. ```json theme={null} "auth": { "type" : "oauth", "redirectUrls": ["http://localhost:3000/oauth-callback"], "requiredScopes": [ "crm.objects.contacts.read", "crm.objects.contacts.write", "crm.app.objects.a12345_MY_APP_OBJECT.view", "crm.app.objects.a12345_MY_APP_OBJECT.create", "crm.app.objects.a12345_MY_APP_OBJECT.edit", "crm.app.schemas.a12345_MY_APP_OBJECT.read", "crm.app.objects.a12345_MY_APP_OBJECT.merge", "crm.app.objects.a12345_MY_APP_OBJECT.delete", "crm.app.schemas.a12345_MY_APP_OBJECT.properties.write" ], "optionalScopes": [], "conditionallyRequiredScopes": [] }, ``` Para obtener una lista completa de los permisos disponibles, consulta la [referencia de permisos](/docs/apps/legacy-apps/authentication/scopes). ## Definición del componente de webhooks Para definir un conjunto de suscripciones a webhook para tu aplicación, incluye un directorio `webhooks` en el proyecto, junto con un archivo de configuración `*-hsmeta.json`. ```shell theme={null} ├──src │ ├── app/ │ │ └── app-hsmeta.json │ │ └── ... │ │ └── webhooks/ │ │ └── webhooks-hsmeta.json └── ``` Abajo se indican las opciones de configuración disponibles para el archivo `*-hsmeta.json`. ```json theme={null} { "uid": "webhooks", "type": "webhooks", "config": { "settings": { "targetUrl": "https://example.com/webhook", "maxConcurrentRequests": 10 }, "subscriptions": { "crmObjects": [ { "subscriptionType": "object.creation", "objectType": "contact", "active": true }, { "subscriptionType": "object.propertyChange", "objectType": "car_app_object", "propertyName": "carProperty", "active": true } ], "legacyCrmObjects": [ { "subscriptionType": "contact.propertyChange", "propertyName": "lastname", "active": true }, { "subscriptionType": "contact.deletion", "active": true } ], "hubEvents": [ { "subscriptionType": "contact.privacyDeletion", "active": true } ] } } } ``` ### Webhook \*-hsmeta.json campos Los campos marcados con \* son obligatorios. | Campo | Tipo | Descripción | | - | - | - | | `uid`\* | Cadena | Un identificador único interno para el componente webhook. | | `type`\* | Cadena | El tipo de componente, que en este caso debe ser `webhooks`. | | `settings`\* | Objeto | Un objeto que especifica dos campos: `targetUrl`, que es la URL disponible públicamente para que HubSpot llame a donde se entregarán las cargas de eventos, y `maxConcurrentRequests`, que es el límite de peticiones HTTP que HubSpot realizará en un período determinado. | | `subscriptions`\* | Objeto | Un objeto que especifica los tipos de suscripción a los que se suscribirá tu aplicación. | | `crmObjects` | Matriz | Matriz que contiene definiciones de suscripción a eventos. Esta es la matriz estándar que hay que incluir, y debe utilizarse para todos los eventos en el nuevo formato (`object.*`). En cambio, los tipos de suscripción webhook clásicos deben incluirse en las matrices `legacyCrmObjects` y `hubEvents`, dependiendo del evento. | | `legacyCrmObjects` | Matriz | Matriz que contiene tipos de suscripción clásicos, como `contact.creation` y `deal.deletion`. | | `hubEvents` | Matriz | Matriz que contiene los tipos de suscripción clásicos `contact.privacyDeletion` y `conversation.*` | Para cada objeto `subscription`, se pueden especificar los siguientes campos, en función del tipo de definición de suscripción al que estés suscrito (es decir, `crmObjects`, `legacyCrmObjects` o `hubEvents`) o de si estás suscrito a un cambio de propiedad específico (por ejemplo, `contact.propertyChange`). | Campo | Tipo | Descripción | | - | - | - | | `subscriptionType` | Cadena | El tipo de evento al que se está suscrito. | | `objectType` | Cadena | Para las suscripciones especificadas en la matriz `crmObjects`, especifica el objeto del CRM al que se está suscribiendo tu aplicación. Para suscribirte a los cambios de un objeto de aplicación, incluye el nombre de tu objeto de aplicación para este campo (por ejemplo, `car_app_object`). | | `propertyName` | Cadena | Para las suscripciones de cambio de propiedad, especifica qué propiedad desencadenará el evento de webhook. | | `active` | Booleano | Si se desencadenarán eventos de webhook para esta suscripción. | ## Esquema de la tarjeta de la aplicación Para crear una tarjeta de aplicación que aparezca en una página de registro de objetos de aplicación, incluye un directorio de componentes `cards` en el proyecto, junto con un archivo de configuración. ```shell theme={null} ├──src │ ├── app/ │ │ └── app-hsmeta.json │ │ └── ... │ │ └── cards/ │ │ └── my-app-card-hsmeta.json │ │ └── MyCard.jsx └── ``` * Asegúrate de que has ejecutado `hs project upload` después de crear tu componente de objeto de aplicación y los archivos de configuración asociados. * En tu archivo `my-app-card-hsmeta.json`, agrega el UID del objeto de tu aplicación a la matriz `objectTypes` (por ejemplo, `"app_object_uid"` en este ejemplo). Cada uno de los campos disponibles en el archivo `.json` se detalla en la [tabla](#app-card-*-hsmeta.json-fields) siguiente. > **Resumen de cambios** > > Ten en cuenta los siguientes cambios en los archivos de configuración de las tarjetas de aplicación: > > * Agregados los campos de nivel superior `uid`, `type` y `config`. > * El campo `module` ha pasado a llamarse `entrypoint`. > * El campo `title` ha pasado a llamarse `name`. > * El campo `objectTypes` se ha simplificado para aceptar una matriz de cadenas. ```json theme={null} { "uid": "my-app-card", "type": "card", "config": { "name": "My app card", "description": "An example description of the card, which lives on contact records.", "previewImage": { "file": "./preview.png", "altText": "A short description of the preview image" }, "entrypoint": "/app/cards/MyCard.jsx", "location": "crm.record.tab", "objectTypes": ["contacts", "app_object_uid"] } } ``` * Cuando hayas guardado los cambios en tu archivo `example-card-hsmeta.json`, ejecuta `hs project upload`. Las tarjetas se agregan automáticamente a la vista predeterminada de los objetos de la aplicación. Si la tarjeta no aparece automáticamente, aprende a [agregar tarjetas a los registros de CRM](/docs/apps/developer-platform/add-features/ui-extensibility/app-cards/create-an-app-card#view-the-card-in-hubspot). > **[Ver ejemplo en GitHub](https://github.com/robrown-hubspot/hubspot-project-components-ua-app-objects-beta/blob/main/projects/app-object-getting-started-template/src/app/app-hsmeta.json)** ### Tarjeta de aplicación \*-hsmeta.json campos Los campos marcados con \* son obligatorios. | Campo | Tipo | Descripción | | - | - | - | | `uid`\* | Cadena | El identificador único de la tarjeta. Puede ser cualquier cadena, pero debe identificar significativamente a la tarjeta. HubSpot identificará la tarjeta por este ID para que puedas cambiar el título de la tarjeta sin eliminar datos históricos o de estado, como la posición en el registro del CRM. | | `type` | Cadena | El tipo de componente, que en este caso debe ser `card`. | | `config` | Objeto | Un objeto que contiene detalles de configuración. | | `name`\* | Cadena | El título de la tarjeta, tal y como se muestra en la interfaz de usuario de HubSpot. | | `description` | Cadena | Descripción de la tarjeta. | | `previewImage` | Objeto | Objeto que contiene los campos `file` y `altText`. El campo `file` es la ruta relativa a la imagen de previsualización. Las extensiones de archivo válidas son png, jpeg, jpg o gif. El tamaño máximo del archivo es de 5.0 MB. El campo `altText` es una breve descripción de la imagen. | | `entrypoint`\* | Cadena | La ruta del archivo del código React del front-end de la tarjeta. | | `location`\* | `crm.record.tab` \| `crm.record.sidebar` \| `helpdesk.sidebar` | Dónde aparece la tarjeta en la interfaz de usuario de HubSpot. Más información sobre [la ubicación de la extensión](/docs/apps/developer-platform/add-features/ui-extensibility/app-cards/reference#extension-location). | | `objectTypes`\* | Matriz | Los tipos de registros del CRM en los que aparecerá la tarjeta. | ## Asociaciones de objetos de la aplicación Para habilitar las asociaciones entre el objeto de tu aplicación y otros objetos del CRM, incluye un directorio de componentes `app-object-associations` en el proyecto, junto con un archivo de configuración. ```shell theme={null} ├── src │ ├── app/ │ │ └── app-hsmeta.json │ │ └── ... │ │ └── app-object-associations/ │ │ └── my-app-object-association-hsmeta.json └── ``` Abajo se indican las opciones de configuración del objeto de la aplicación disponibles (`*-association-hsmeta.json`). ```json theme={null} { "uid": "car_to_contact_association", "type": "app-object-association", "config": { "firstObjectType": "car-app-object", "secondObjectType": "CONTACT" } } ``` ### Asociación \*-asociación-hsmeta.json campos Los campos marcados con \* son obligatorios. | Campo | Tipo | Descripción | | - | - | - | | `uid`\* | Cadena | Un identificador único interno para la aplicación. Debe ser globalmente único dentro del proyecto. | | `type`\* | Cadena | El tipo de componente. Debe coincidir con el nombre de la carpeta primaria (`app-object-association`). | | `config`\* | Objeto | Objeto que contiene la configuración de la asociación de objetos. | | `firstObjectType`\* | Cadena | El primer objeto de la asociación. Puede ser un objeto de aplicación o un objeto del CRM de HubSpot. Se hace referencia a los objetos de la aplicación por su `uid` especificado en su archivo fuente. Los objetos estándar se denominan por su `fullyQualifiedName`. La asociación resultante será bidireccional, por lo que el orden de los valores de estos campos es arbitrario. | | `secondObjectType`\* | Cadena | El segundo objeto de la asociación. Consulta `firstObjectType` para más detalles. | # Configurar suscripciones a webhooks (BETA) Source: https://developers.hubspot.es/docs/apps/developer-platform/add-features/configure-webhooks Encuentra más información sobre cómo definir suscripciones a webhooks en la última versión de la plataforma para desarrolladores (BETA). Para definir un conjunto de suscripciones a webhooks para una aplicación en la nueva plataforma para desarrolladores, incluye el directorio `webhooks` en el proyecto, junto con un archivo de configuración `*-hsmeta.json`. ## Estructura del directorio ```shell theme={null} ├──src │ ├── app/ │ │ └── app-hsmeta.json │ │ └── ... │ │ └── webhooks/ │ │ └── webhooks-hsmeta.json └── ``` ## Configuración del webhook A continuación, están las opciones de configuración disponibles para el archivo `*-hsmeta.json`. ```json theme={null} { "uid": "webhooks", "type": "webhooks", "config": { "settings": { "targetUrl": "https://example.com/webhook", "maxConcurrentRequests": 10 }, "subscriptions": { "crmObjects": [ { "subscriptionType": "object.creation", "objectType": "contact", "active": true } ], "legacyCrmObjects": [ { "subscriptionType": "contact.propertyChange", "propertyName": "lastname", "active": true }, { "subscriptionType": "contact.deletion", "active": true } ], "hubEvents": [ { "subscriptionType": "contact.privacyDeletion", "active": true } ] } } } ``` Los campos marcados con \* son obligatorios. | Campo | Tipo | Descripción | | - | - | - | | `uid`\* | Cadena | Un identificador único interno para el componente del webhook. | | `type`\* | Cadena | El tipo de componente, que en este caso debe ser `webhooks`. | | `settings`\* | Objeto | Un objeto que especifica dos campos: `targetUrl`, que es la URL disponible públicamente para que HubSpot llame a donde se entregarán los datos de eventos, y `maxConcurrentRequests`, que es el umbral superior de peticiones HTTP que HubSpot realizará en un período de tiempo determinado. | | `subscriptions`\* | Objeto | Un objeto que especifica los tipos de suscripción a los que se suscribirá la aplicación. | | `crmObjects` | Matriz | Matriz que contiene definiciones de suscripción a eventos. Esta es la matriz estándar que hay que incluir, y debe utilizarse para todos los eventos en el [nuevo formato](/docs/apps/legacy-apps/public-apps/create-generic-webhook-subscriptions) (`object.*`). Por otra parte, los [tipos de suscripción a webhook anteriores](/docs/api-reference/webhooks-webhooks-v3/guide#webhook-subscriptions) deben incluirse en las matrices `legacyCrmObjects` y `hubEvents`, dependiendo del evento. | | `legacyCrmObjects` | Matriz | Matriz que contiene los [tipos de suscripción anteriores](/docs/api-reference/webhooks-webhooks-v3/guide#webhook-subscriptions), como `contact.creation` y `deal.deletion`. | | `hubEvents` | Matriz | Una matriz que contiene los tipos de suscripción anteriores `contact.privacyDeletion` y `conversation.*` | Para cada objeto `subscription`, se pueden especificar los siguientes campos, dependiendo del tipo de definición de suscripción al que estés suscrito (es decir, `crmObjects`, `legacyCrmObjects` o `hubEvents`) o de si estás suscrito a un cambio de propiedad específico (por ejemplo, `contact.propertyChange`). | Campo | Tipo | Descripción | | - | - | - | | `subscriptionType` | Cadena | El tipo de evento al que se está suscrito. | | `objectType` | Cadena | Para las suscripciones especificadas en la matriz `crmObjects`, especifica el objeto del CRM al que se está suscribiendo tu aplicación. | | `propertyName` | Cadena | Para las suscripciones de cambio de propiedad, especifica qué propiedad desencadenará el evento del webhook. | | `active` | Booleano | Si se desencadenarán eventos webhook para esta suscripción. | # Definir una acción de workflow personalizada (BETA) Source: https://developers.hubspot.es/docs/apps/developer-platform/add-features/custom-workflow-actions Aprende a definir una acción de workflow personalizada en la última versión de la plataforma de desarrolladores (BETA). Para definir una [acción de workflow personalizada](/docs/api-reference/automation-actions-v4-v4/guide) para una aplicación en la nueva plataforma de desarrolladores, incluye un directorio `workflow-actions` en el proyecto, junto con un archivo de configuración `*-hsmeta.json`. ## Estructura del directorio del proyecto ```shell theme={null} ├──src │ ├── app/ │ │ └── app-hsmeta.json │ │ └── ... │ │ └── workflow-actions/ │ │ └── custom-action-hsmeta.json └── ``` ## Definición de acciones de workflow personalizadas Abajo se indican las opciones de configuración disponibles para el archivo `*-hsmeta.json`. ```json theme={null} { "uid": "simple_notification_action", "type": "workflow-action", "config": { "actionUrl": "https://example.com", "isPublished": false, "supportedClients": [ { "client": "WORKFLOWS" } ], "inputFields": [ { "typeDefinition": { "name": "message", "type": "string", "fieldType": "textarea" }, "supportedValueTypes": ["STATIC_VALUE"], "isRequired": true }, { "typeDefinition": { "name": "priority", "type": "enumeration", "fieldType": "select", "options": [ { "value": "high", "label": "High Priority" }, { "value": "normal", "label": "Normal Priority" }, { "value": "low", "label": "Low Priority" } ] }, "supportedValueTypes": ["STATIC_VALUE"], "isRequired": true } ], "labels": { "en": { "actionName": "My Custom Action (via Projects V2)", "actionDescription": "Sends a notification with custom message and priority level", "actionCardContent": "Send {{priority}} priority notification", "inputFieldLabels": { "message": "Notification Message", "priority": "Priority Level" }, "inputFieldDescriptions": { "message": "Enter the message to be sent in the notification", "priority": "Select the priority level for this notification" } } }, "objectTypes": ["CONTACT"] } } ``` Los campos marcados con \* son obligatorios. | Campo | Tipo | Descripción | | - | - | - | | `uid`\* | Cadena | Un identificador único interno para la acción de workflow. | | `type`\* | Cadena | El tipo de componente, que en este caso debe ser `workflow-action`. | | `actionUrl`\* | Cadena | La URL del webhook de la API para entregar una solicitud de ejecución de workflow. | | `isPublished` | Booleano | Determina si la definición es visible en las cuentas que instalaron tu aplicación. Por defecto, está configurado como `false`. | | `supportedClients`\* | Matriz de objetos | Especifica los clientes a los que da asistencia la acción de workflow personalizada. Cada objeto de la matriz debe tener una clave de cliente con un valor de cadena que indique el tipo de cliente (por ejemplo, `WORKFLOWS`). | | `inputFields` | Matriz | Los valores de las entradas que ha rellenado el usuario. | | `typeDefinition.name` | Cadena | El nombre o clave del campo de entrada. | | `typeDefinition.type` | Cadena | El tipo de valor que debe esperar el campo de entrada. | | `typeDefinition.fieldType` | Cadena | El tipo de campo que aparece a los usuarios que crean el workflow. | | `typeDefinition.options` | Matriz | Para los tipos de enumeración, este campo proporciona una lista de opciones. Cada opción debe tener un `value`, basado en la entrada que proporciona el usuario, y un `label`, que identifica la opción en la herramienta workflows. | | `inputFieldDependencies` | Matriz | Una lista de reglas que definen las relaciones entre dos o más entradas, basándose en su `dependencyType`. Más información en [este ejemplo ](/docs/api-reference/automation-actions-v4-v4/guide#example-%233). | | `labels.`\* | Cadena | Clave de configuración regional que se asigna a la definición de configuración regional. Como mínimo, debe definirse una etiqueta en inglés (`en`) y su definición. | | `labels..inputFieldDescriptions` | Objeto | Un objeto que define los detalles de las entradas de tu acción. En el ejemplo de arriba, este objeto incluye los campos `message` y `priority`. | | `labels..inputFieldOptionLabels` | Objeto | Un objeto necesario si tus campos de entrada tienen opciones. Proporciona un mapa de las etiquetas de las opciones de los campos de entrada, codificadas por el valor o la etiqueta de la opción. | | `labels..outputFieldLabels` | Objeto | Objeto que asigna las definiciones de `outputFields` a las etiquetas correspondientes que aparecen en la herramienta de workflows. | | `labels..actionName`\* | Cadena | El nombre de la acción tal y como se muestra en el panel *Elegir una acción* del editor de workflows. | | `labels..appDisplayName`\* | Cadena | El nombre de la sección del panel *Elegir una acción* donde aparecen todas las acciones de la aplicación. Si se define `appDisplayName` para varias acciones, se utilizará la primera que se encuentre. | | `labels..actionCardContent` | Cadena | Una descripción resumida que aparece en la ficha de la acción. | | `labels..executionRules` | Objeto | Un objeto que asigna las definiciones de tus `executionRules` a los mensajes que aparecerán para los resultados de la ejecución en el historial del workflow. | | `objectTypes` | Matriz | Los tipos de objetos del CRM disponibles con los que se puede utilizar esta acción. Si está vacía, la acción estará disponible para todos los tipos de objetos. | | `outputFields` | Matriz | Los valores que emitirá la acción y que pueden ser utilizados por acciones posteriores del workflow. Una acción personalizada puede tener 0, 1 o muchas salidas. | | `executionRules` | Objeto | Una lista de definiciones que puedes especificar para mostrar los errores de tu servicio al usuario que crea el workflow. | # Configurar SCIM para tu aplicación (BETA) Source: https://developers.hubspot.es/docs/apps/developer-platform/add-features/scim # Configuración de la aplicación (BETA) Source: https://developers.hubspot.es/docs/apps/developer-platform/build-apps/app-configuration Información de referencia para las opciones de configuración de las aplicaciones creadas en la nueva plataforma para desarrolladores (BETA) Abajo encontrarás información de referencia sobre las funciones de las aplicaciones de la plataforma para desarrolladores, incluidas las definiciones de los archivos de configuración, los detalles de los permisos y mucho más. ## Estructura del proyecto * Todos los componentes del proyecto deben estar dentro del directorio `src` especificado en el archivo de configuración de nivel superior `hsproject.json`. * Todas las funciones y componentes de la aplicación deben estar en el directorio `src/app/`. Dentro de este directorio `app/`, definirás subdirectorios para cada función que quieras que admita tu aplicación: * Los eventos de la aplicación se configuran en `app-events/`. * Los objetos de la aplicación se definen en `app-objects/`. * Todas las características de la tarjeta se definen en `cards/`. * Las funciones de la página de configuración se definen en `settings/`. * La telemetría se configura en `telemetry/`. * Las suscripciones de webhooks se definen en `webhooks/`. * Las acciones de workflow personalizadas se definen en `workflow-actions/`. * Dentro de cada subdirectorio de características, configurarás la característica mediante un archivo `*-hsmeta.json`. Puedes anteponer al nombre del archivo algo significativo para tu aplicación (por ejemplo, `my-app-hsmeta.json`), siempre que el archivo termine en `-hsmeta.json`. Estos archivos deben estar en el nivel base de sus respectivas carpetas (por ejemplo, `app/my-app-hsmeta.json`, `cards/my-card-hsmeta.json`). El ejemplo de estructura de directorios que aparece abajo describe todas las funciones disponibles. Los detalles para configurar el archivo `app-hsmeta.json` del esquema de la aplicación de nivel superior se proporcionan en la [sección sobre el esquema de la aplicación](#app-schema) que aparece abajo. Cuando estés listo para agregar funciones a la aplicación, consulta la sección [agregar funciones a la aplicación](#adding-app-features). ```shell theme={null} my-project-folder/ └── hsproject.json └── src └── app/ └── app-hsmeta.json/ └── app-events/ └── my-event-type-hsmeta.json └── cards/ └── MyCard.jsx └── my-app-card-hsmeta.json └── package.json └── settings/ └── Settings.tsx └── settings-hsmeta.json └── package.json └── telemetry/ └── telemetry-hsmeta.json └── webhooks/ └── webhooks-hsmeta.json └── workflow-actions/ └── custom-action-hsmeta.json ``` > **[Ver ejemplo en GitHub](https://github.com/robrown-hubspot/hubspot-project-components-ua-app-objects-beta/tree/main/projects/app-object-getting-started-template)** La extensión de HubSpot Visual Studio Code proporciona [comprobación de tipos](/docs/developer-tooling/local-development/vs-code-extension#validate-hs-meta-json-config-files) para cada una de las propiedades de tus archivos de configuración `*-hsmeta.json`. ## Especificar UID El campo `uid` es un identificador único interno para tu aplicación específica, y también debe ser único globalmente dentro del proyecto. Cada una de las [funciones de la aplicación](#adding-app-features) tendrá su propio `uid` definido en sus respectivos archivos `*-hsmeta.json`, que deben ser distintos del `uid` de nivel superior que elijas en el archivo `app-hsmeta.json` de tu aplicación. ## Esquema de la aplicación La configuración de nivel superior de tu aplicación se especifica en un archivo de configuración `app-hsmeta.json` en el directorio `app`. ```shell theme={null} my-project-folder/ └── src └── app/ └── app-hsmeta.json/ ``` Abajo se indican las opciones de configuración disponibles para `app-hsmeta.json`. ```json theme={null} { "uid": "new_developer_platform_app", "type": "app", "config": { "description": "An example to demonstrate how to build an app with developer projects.", "name": "my first app", "distribution": "marketplace", "auth": { "type": "oauth", "redirectUrls": ["http://localhost:3000/oauth-callback"], "requiredScopes": ["crm.objects.contacts.read", "crm.objects.contacts.write"], "optionalScopes": [], "conditionallyRequiredScopes": [] }, "permittedUrls": { "fetch": ["https://api.hubapi.com"], "iframe": [], "img": [] }, "support": { "supportEmail": "support@example.com", "documentationUrl": "https://example.com/docs", "supportUrl": "https://example.com/support", "supportPhone": "+18005555555" } } } ``` > **[Ver ejemplo en GitHub](https://github.com/robrown-hubspot/hubspot-project-components-ua-app-objects-beta/blob/main/projects/app-object-getting-started-template/src/app/app-hsmeta.json)** Cada una de las opciones de configuración se detalla en la tabla de abajo. En las secciones que hay debajo de la tabla se proporciona más contexto sobre la [distribución de tu aplicación](#distribution), la configuración de la [autenticación](#authentication) y la especificación de los [permisos](#scopes). Los campos marcados con \* son obligatorios. | Campo | Tipo | Descripción | | - | - | - | | `uid`\* | Cadena | Un identificador único interno para la aplicación. Debe ser globalmente único dentro del proyecto. Puede ser cualquier cadena de hasta 64 caracteres. Los caracteres pueden ser mayúsculas o minúsculas, y pueden incluir números, guiones bajos (`_`), guiones (`-`) y puntos (`.`). | | `type`\* | Cadena | El tipo de componente. Debe coincidir con el nombre de la carpeta primaria (`app`). | | `description`\* | Cadena | Descripción de lo que hace la aplicación para el usuario que la instala. Puede ser cualquier cadena de hasta 8192 caracteres. | | `name`\* | Cadena | El nombre de la aplicación, que se mostrará en HubSpot. Puede ser cualquier cadena de hasta 200 caracteres. No debe empezar ni terminar con un carácter de espacio en blanco. | | `distribution`\* | Cadena | El método de distribución de la aplicación, que puede establecerse como uno de los siguientes:
  • `marketplace`: se utiliza si quieres que la aplicación sea apta para aparecer en el mercado de aplicaciones de HubSpot.
  • `private`: se utiliza si solo quieres instalar tu aplicación en un conjunto específico de cuentas permitidas, o en una sola cuenta a la vez.
Más información en la sección de [distribución](#distribution). | | `auth`\* | Objeto | Un objeto que contiene los detalles del método de autenticación de la aplicación. Para más detalles, consulta la [sección de autenticación](#authentication). | | `permittedUrls` | Objeto | Una matriz que contiene las URL a las que la aplicación puede llamar. Las URL deben utilizar el esquema HTTPS y deben contener una [autoridad](https://developer.mozilla.org/en-US/docs/Learn_web_development/Howto/Web_mechanics/What_is_a_URL#authority), seguida de un prefijo de ruta opcional si es necesario. | | `supportEmail` | Cadena | Una dirección de correo electrónico válida con la que los usuarios puedan ponerse en contacto para recibir asistencia. | | `documentationUrl` | Cadena | La URL externa a la que los usuarios pueden navegar para obtener documentación de apoyo. Debe utilizar HTTPS. | | `supportUrl` | Cadena | La URL externa a la que los usuarios pueden navegar para obtener asistencia adicional. Debe utilizar HTTPS. | | `supportPhone` | Cadena | El número de teléfono al que pueden dirigirse los usuarios para solicitar asistencia. Debe empezar por el signo más (`+`). | ### Distribución El campo `distribution` del esquema de tu aplicación te permite configurar cómo quieres distribuir tu aplicación: * Si piensas publicar tu aplicación en el [mercado de aplicaciones de HubSpot](https://ecosystem.hubspot.com/marketplace/apps), establece el campo `distribution` en `"marketplace"`. Puedes encontrar un esquema de aplicación de ejemplo para esta opción [aquí](https://github.com/robrown-hubspot/hubspot-project-components-ua-app-objects-beta/blob/main/projects/public-app-getting-started-template/src/app/app-hsmeta.json). Si eliges esta opción, asegúrate de establecer el `type` dentro de la propiedad `auth` en `oauth`, tal y como se detalla en la sección de [autenticación](#authentication) más adelante. * Si quieres permitir que tu aplicación se instale en un conjunto específico de cuentas permitidas, o si quieres restringir la instalación a una sola cuenta cada vez, configura `distribution` en `"private"`. Asegúrate de configurar el `type` dentro de la propiedad `auth` en consecuencia: * Si quieres instalar tu aplicación en varias cuentas basándote en [una lista de permisos que configures en los ajustes de tu proyecto](/docs/apps/developer-platform/build-apps/manage-apps-in-hubspot#manage-authentication-for-your-app), establece la autenticación `type` en `oauth`. Consulta el esquema de aplicación de ejemplo para [esta opción](https://github.com/robrown-hubspot/hubspot-project-components-ua-app-objects-beta/blob/main/projects/private-app-oauth-getting-started-template/src/app/app-hsmeta.json). * Para restringir la instalación a una sola cuenta, ya sea la misma que utilizas para el desarrollo u otra cuenta a la que tenga acceso el usuario instalador, establece la autenticación `type` en `static`. Puedes encontrar un esquema de aplicación de ejemplo para la [autenticación estática](https://github.com/robrown-hubspot/hubspot-project-components-ua-app-objects-beta/blob/main/projects/private-app-static-getting-started-template/src/app/app-hsmeta.json). ### Autenticación La autenticación de tu aplicación se configura mediante la propiedad `auth` del esquema de tu aplicación. Puedes especificar los permisos de tu aplicación, las URL de redireccionamiento y el tipo de autenticación. Los campos marcados con \* son obligatorios. | Campo | Tipo | Descripción | | - | - | - | | `type`\* | Cadena | El tipo de autenticación, que puede establecerse en una de las siguientes opciones:
  • `oauth`: permitir la instalación mediante OAuth, ya sea a un conjunto específico de cuentas permitidas o incluyéndola en el mercado de aplicaciones de HubSpot.
  • `static`: restringir la instalación de tu aplicación a una única cuenta a la que tenga acceso el usuario que la instale.
| | `redirectUrls`\* | Matriz | Una lista de URL a las que el proceso OAuth puede redirigir. Cada aplicación debe tener al menos una URL de redireccionamiento de autenticación, y debe utilizar HTTPS. La única excepción es que se permite `http://localhost` para las pruebas. | | `requiredScopes`\* | Matriz | Una lista de los permisos necesarios para tu aplicación. Cada aplicación debe incluir al menos un permiso, y el usuario que la instala debe conceder estos permisos para que la aplicación se instale correctamente. [Más información sobre los permisos a continuación](#scopes). | | `optionalScopes` | Matriz | Una lista de los permisos opcionales de tu aplicación. Estos permisos pueden excluirse de la autorización durante la instalación si la cuenta o el usuario que instala la aplicación no tiene los permisos adecuados. En ese caso, el permiso no se incluirá en el token de actualización ni en el token de acceso resultantes. [Más información sobre los permisos abajo](#scopes). | | `conditionallyRequiredScopes` | Matriz | Lista de permisos que solo son necesarios cuando se incluyen en el parámetro de consulta `scope` de la URL de instalación. [Más información sobre los permisos a continuación](#scopes). | ### Permisos En el campo `auth` del archivo de configuración de una aplicación, puedes especificar tres [tipos de permisos](/docs/apps/legacy-apps/public-apps/overview#scope-types): permisos requeridos, permisos requeridos condicionalmente y permisos opcionales. Como mínimo, tu aplicación debe incluir el permiso `read` para que los clientes puedan acceder al tipo de objeto del CRM asociado. ```json theme={null} "auth": { "type" : "oauth", "redirectUrls": ["http://localhost:3000/oauth-callback"], "requiredScopes": [ "crm.objects.contacts.read", "crm.objects.contacts.write" ], "optionalScopes": [], "conditionallyRequiredScopes": [] }, ``` Para obtener una lista completa de los permisos disponibles, consulta la [referencia de permisos](/docs/apps/legacy-apps/authentication/scopes). ## Agregando funciones a la aplicación Para configurar las funciones de la aplicación, como las suscripciones de webhooks, las acciones de workflow personalizadas y las tarjetas de la aplicación, consulta las guías de abajo para saber cómo agregar los archivos `*-hsmeta.json` asociados a tu proyecto: * [Crear una tarjeta de aplicación](/docs/apps/developer-platform/add-features/ui-extensibility/app-cards/create-an-app-card) * [Definir eventos de aplicación](/docs/apps/developer-platform/add-features/app-events/overview) * [Crear objetos de aplicación](/docs/apps/developer-platform/add-features/app-objects/quickstart-guide-to-app-objects) * [Crear un componente de configuración](/docs/apps/developer-platform/add-features/ui-extensibility/create-a-settings-component) * [Configurar una acción de workflow personalizada](/docs/apps/developer-platform/add-features/custom-workflow-actions) * [Configurar una suscripción de webhook](/docs/apps/developer-platform/add-features/configure-webhooks) * [Agregar telemetría](/docs/apps/developer-platform/add-features/add-telemetry) # Cómo usar OAuth | Guía rápida de inicio de OAuth Source: https://developers.hubspot.es/docs/apps/developer-platform/build-apps/authentication/oauth/oauth-quickstart-guide Aprende a configurar OAuth para tu aplicación utilizando esta guía rápida y una aplicación Node.js de ejemplo. 'Aprende a configurar OAuth para tu aplicación utilizando esta guía rápida y una aplicación Node.js de ejemplo.'; ## Antes de comenzar Antes de comenzar a usar OAuth con HubSpot, necesitarás: * [Una cuenta de desarrollador](https://app.hubspot.com/signup-hubspot/crm?intent=developer) * [Una aplicación](/docs/apps/legacy-apps/public-apps/overview) asociada con tu cuenta de desarrollador * Una cuenta de HubSpot para instalar tu aplicación (puedes usar una cuenta existente o [crear una cuenta de prueba](/docs/getting-started/account-types)) Debes ser un [superadministrador](https://knowledge.hubspot.com/es/user-management/hubspot-user-permissions-guide#super-admin) para instalar una aplicación en una cuenta de HubSpot. ### Cómo funciona HubSpot admite el [tipo de autorización con código en OAuth 2.0](https://developer.okta.com/blog/2018/04/10/oauth-authorization-code-grant-type), que puede dividirse en cuatro pasos básicos: 1. Tu aplicación abre una ventana del navegador para enviar al usuario al servidor de HubSpot OAuth 2.0 2. El usuario revisa los permisos solicitados y otorga el acceso a la aplicación 3. El usuario es redirigido a la aplicación con un código de autorización en la cadena de consulta 4. La aplicación envía una solicitud al servidor de OAuth 2.0 para intercambiar el código de autorización por un token de acceso ### En esta guía: * [Aplicación de inicio rápido](#quickstart-app): Es una aplicación de demostración en Node.js que se autentica con el servidor OAuth 2.0 de HubSpot * [Obtener tokens de OAuth 2.0](#getting-oauth-tokens): Cómo autorizar tu aplicación con los usuarios * [Usar los tokens de OAuth 2.0](#using-oauth-tokens): Cómo realizar consultas con un token * [Actualización de tokens de OAuth 2.0](#refreshing-oauth-tokens): Cómo usar el token de actualización proporcionado por HubSpot Todos los ejemplos de código de esta guía están escritos en JavaScript (Node.js) ## Aplicación de inicio rápido Si es la primera vez que usas la autenticación OAuth con las API de HubSpot, te recomendamos que consultes la [Aplicación de inicio rápido de OAuth 2.0](https://github.com/HubSpot/oauth-quickstart-nodejs), escrita en Node.js. Esta aplicación está diseñada para que puedas comenzar a usar OAuth 2.0 lo más rápido posible mediante la demostración de todos los pasos que se detallan a continuación en la sección [Obtener tokens de OAuth 2.0](#getting-oauth-tokens). ![GitHub icon](https://developers.hubspot.com/hubfs/Knowledge_Base_2023-24-25/uie-icons/github.png) [Obtener la aplicación de inicio rápido](https://github.com/HubSpot/oauth-quickstart-nodejs) ## Obtener tokens de OAuth 2.0 ### 1. Crea la URL de autorización y dirige al usuario al servidor OAuth 2.0 de HubSpot Al enviar un usuario al servidor OAuth 2.0 de HubSpot, el primer paso es crear la URL de autorización. Esto identificará tu aplicación y definirá los recursos (los permisos) a los que solicita acceso en nombre del usuario. Los parámetros de consulta que puedes pasar como parte de una URL de autorización se muestran a continuación. Para obtener información más detallada sobre este paso, lee el [documento de referencia](/docs/apps/legacy-apps/authentication/working-with-oauth). Los campos marcados con \* son obligatorios. | Parámetro | Descripción | Ejemplo | | - | - | - | | `client_id`\* | El ID del cliente identifica tu aplicación. Encuéntralo en la página de configuración de tu aplicación. | `7fff1e36-2d40-4ae1-bbb1-5266d59564fb` | | `scope`\* | Los [permisos](/docs/apps/legacy-apps/authentication/scopes#list-of-available-scopes) que tu aplicación solicita, separados por espacios codificados de URL (`%20`). | `oauth%20crm.objects.contacts.read` | | `redirect_uri`\* | La URL a la que el usuario será redirigido después de autorizar a tu aplicación para los permisos solicitados. **Para aplicaciones en producción, se requiere `https`.** | `https://www.example.com/auth-callback` | | `optional_scope` | Los permisos que son opcionales para tu aplicación y se eliminarán si el portal de HubSpot seleccionado no tiene acceso a esos productos | `automation` | | `state` | Un valor de cadena que se puede usar para mantener el estado del usuario cuando se redirecciona de regreso a tu aplicación. | `WeHH_yy2irpl8UYAvv-my` | Una vez que hayas creado tu URL, envía al usuario a OAuth 2.0 para iniciar el proceso. Los bloques de código que aparecen a continuación ofrecen ejemplos de utilización de distintos tipos de redireccionamiento: **Usando una redirección del lado del servidor:** ```js theme={null} // Build the auth URL const authUrl = "https://app.hubspot.com/oauth/authorize" + `?client_id=${encodeURIComponent(CLIENT_ID)}` + `&scope=${encodeURIComponent(SCOPES)}` + `&redirect_uri=${encodeURIComponent(REDIRECT_URI)}` + `&state=${encodeURIComponent(STATE)}`; // Redirect the user return res.redirect(authUrl); ``` **Usando un enlace HTML:** ```html theme={null} Install ``` **Codificación de un estado adicional de redirección del usuario** Algunas aplicaciones pueden necesitar redirigir al usuario a diferentes ubicaciones. Por ejemplo, es posible que una aplicación desee redirigir a los usuarios a diferentes subdominios de su integración (por ejemplo, `userA.integration.com` y `userB.integration.com`). Para ello, utiliza el parámetro `state` para codificar más información sobre el estado del usuario: 1\. Genera y almacena un valor "nonce" para el parámetro de estado. 2\. Almacena el estado del usuario en un almacén de datos local utilizando el "nonce" como su clave. 3\. Incluye el valor "nonce" como el parámetro de estado en la URL de autorización. 4\. Cuando el usuario se autentica y es redirigido a tu URL de redirección, valida el parámetro de estado y úsalo como la clave para recuperar el estado de usuario que estaba almacenado. 5\. Desde allí, redirige al usuario según sea necesario (por ejemplo, redirige de nuevo a una URL específica del usuario). ### 2. HubSpot solicita al usuario su consentimiento HubSpot muestra una ventana de consentimiento al usuario que muestra el nombre de tu aplicación y una breve descripción de los servicios de la API de HubSpot a los que solicita permiso para acceder. El usuario puede otorgar acceso a tu aplicación. ![Ejemplo de ventana de instalación](https://www.hubspot.es/hubfs/Knowledge_Base_2023/%5BExample%5D%20Install%20Screen.png) **Nota:** El usuario que instala la aplicación debe tener acceso a todos los permisos solicitados. Si no tienen el acceso requerido, la instalación fallará y serán dirigidos a una página de error. Si un usuario ve esta página de error de permisos, necesitará que un superadministrador instale la aplicación. Tu aplicación no hace nada en esta etapa. Una vez que se otorga el acceso, el servidor de OAuth 2.0 de HubSpot enviará una solicitud a la URI de devolución de llamada definida en la URL de autorización. ### 3. Manejar la respuesta del servidor OAuth Cuando el usuario haya completado la solicitud de consentimiento del paso 2, el servidor OAuth 2.0 envía una solicitud `GET` al URI de redireccionamiento especificado en tu URL de autenticación. Si no hay problemas y el usuario aprueba la solicitud de acceso, la solicitud al URI de redireccionamiento se devolverá con un parámetro de consulta de `code` adjunto. Si el usuario no otorga el acceso, no se enviará ninguna solicitud. **Ejemplo:** ```js theme={null} app.get("/oauth-callback", async (req, res) => { if (req.query.code) { // Handle the received code } }); ``` ### 4. Intercambiar el código de autorización por tokens Después de que tu aplicación reciba un código de autorización del servidor OAuth 2.0, puede intercambiar ese código por un token de acceso y actualización al enviar una solicitud `POST` codificada en formato de formulario URL a `https://api.hubapi.com/oauth/v1/token` con los valores que se muestran a continuación. Para obtener información más detallada sobre este paso, puedes leer este [documento de referencia](/docs/apps/developer-platform/build-apps/authentication/oauth/working-with-oauth). | Parámetro | Descripción | Ejemplo | | - | - | - | | `grant_type` | Debe ser `authorization_code` | `authorization_code` | | `client_id` | ID de cliente de tu aplicación | `7fff1e36-2d40-4ae1-bbb1-5266d59564fb` | | `client_secret` | La clave de cliente de tu aplicación | `7c3ce02c-0f0c-4c9f-9700-92440c9bdf2d` | | `redirect_uri` | El URI de redireccionamiento desde el momento en que el usuario autorizó tu aplicación | `https://www.example.com/auth-callback` | | `code` | El código de autorización recibido del servidor OAuth 2.0 | `5771f587-2fe7-40e8-8784-042fb4bc2c31` | **Ejemplo:** ```js theme={null} const formData = { grant_type: 'authorization_code', client_id: CLIENT_ID, client_secret: CLIENT_SECRET, redirect_uri: REDIRECT_URI, code: req.query.code }; request.post('https://api.hubapi.com/oauth/v1/token', { form: formData }, (err, data) => { // Handle the returned tokens } ``` El cuerpo de la respuesta del token serán datos JSON con la estructura: ```json theme={null} { "refresh_token": "6f18f21e-a743-4509-b7fd-1a5e632fffa1", "access_token": "CN2zlYnmLBICAQIYgZXFLyCWp1Yoy_9GMhkAgddk-zDc-H_rOad1X2s6Qv3fmG1spSY0Og0ACgJBAAADAIADAAABQhkAgddk-03q2qdkwdXbYWCoB9g3LA97OJ9I", "expires_in": 1800 } ``` El token de acceso vencerá después de la cantidad de segundos indicada en el campo `expires_in` de la respuesta, actualmente, 30 minutos. Para más detalles sobre cómo obtener un nuevo token de acceso, consulta la sección [Actualizar tokens OAuth](#refreshing-oauth-tokens) más abajo. ## Uso de tokens de OAuth 2.0 Una vez que se complete el proceso de autorización, tu aplicación está autorizada para realizar solicitudes en nombre del usuario. Para ello, proporciona el token como token de portador en el encabezado HTTP `Authorization`. Los detalles específicos se pueden encontrar en el [documento de referencia](/docs/apps/developer-platform/build-apps/authentication/oauth/working-with-oauth). **Ejemplo:** ```js theme={null} request.get( "https://api.hubapi.com/contacts/v1/lists/all/contacts/all?count=1", { headers: { Authorization: `Bearer ${ACCESS_TOKEN}`, "Content-Type": "application/json", }, }, (err, data) => { // Handle the API response } ); ``` Los tokens de acceso reflejan los permisos solicitados desde la aplicación y no reflejan los permisos o limitaciones de lo que un usuario puede hacer en su cuenta de HubSpot. Por ejemplo, si un usuario tiene permisos para ver solo los contactos de su propiedad, pero autoriza una solicitud para el permiso `crm.objects.contacts.read`, el token de acceso resultante puede ver todos los contactos de la cuenta y no solo los que son propiedad del usuario que autoriza. ## Actualización de tokens de OAuth 2.0 Los tokens de acceso de OAuth caducan periódicamente. Así se limita el acceso de los atacantes a un corto plazo si se produce una vulneración. La vida útil del token en segundos se especifica en el campo `expires_in` cuando se intercambia un código de autorización por un token de acceso. Tu aplicación puede intercambiar el token de actualización recibido por un nuevo token de acceso enviando una solicitud `POST` codificada en formato de formulario URL a `https://api.hubapi.com/oauth/v1/token` con los siguientes valores. Para obtener información más detallada sobre este paso, consulta el [documento de referencia](/docs/apps/developer-platform/build-apps/authentication/oauth/working-with-oauth). | Parámetro | Descripción | Ejemplo | | - | - | - | | `grant_type` | Debe ser `refresh_token` | `refresh_token` | | `client_id` | ID de cliente de tu aplicación | `7fff1e36-2d40-4ae1-bbb1-5266d59564fb` | | `client_secret` | La clave de cliente de tu aplicación | `7c3ce02c-0f0c-4c9f-9700-92440c9bdf2d` | | `redirect_uri` | El URI de redireccionamiento desde el momento en que el usuario autorizó tu aplicación | `https://www.example.com/auth-callback` | | `refresh_token` | El token de actualización recibido cuando el usuario autorizó a tu aplicación | `b9443019-30fe-4df1-a67e-3d75cbd0f726` | **Ejemplo:** ```js theme={null} const formData = { grant_type: 'refresh_token', client_id: CLIENT_ID, client_secret: CLIENT_SECRET, redirect_uri: REDIRECT_URI, refresh_token: REFRESH_TOKEN }; request.post('https://api.hubapi.com/oauth/v1/token', { form: formData }, (err, data) => { // Handle the returned tokens } ``` El cuerpo de la respuesta del token serán datos JSON con la estructura: ```json theme={null} { "refresh_token": "6f18f21e-a743-4509-b7fd-1a5e632fffa1", "access_token": "CN2zlYnmLBICAQIYgZXFLyCWp1Yoy_9GMhkAgddk-zDc-H_rOad1X2s6Qv3fmG1spSY0Og0ACgJBAAADAIADAAABQhkAgddk-03q2qdkwdXbYWCoB9g3LA97OJ9I", "expires_in": 1800 } ``` El nuevo token de acceso puede usarse para hacer llamadas en nombre del usuario. Cuando el nuevo token caduque, puedes seguir los mismos pasos nuevamente para generar uno nuevo. ## Artículos relacionados [Métodos de autenticación en HubSpot](/docs/apps/developer-platform/build-apps/authentication/overview) [Cómo usar OAuth](/docs/apps/legacy-apps/authentication/working-with-oauth) [Administrar tokens](/docs/apps/developer-platform/build-apps/authentication/oauth/working-with-oauth) # Usar OAuth Source: https://developers.hubspot.es/docs/apps/developer-platform/build-apps/authentication/oauth/working-with-oauth OAuth es un método seguro de autenticación para tu aplicación. Utiliza tokens de autorización en lugar de una contraseña para conectar tu aplicación a una cuenta de usuario. 'OAuth es un método seguro de autenticación para tu aplicación. Utiliza tokens de autorización en lugar de una contraseña para conectar tu aplicación a una cuenta de usuario. '; OAuth es un método seguro de autenticación que usa tokens de autorización en lugar de una contraseña para conectar tu aplicación a una cuenta de usuario. Iniciar el acceso de OAuth es el primer paso para permitir a los usuarios [instalar tu aplicación](/docs/apps/legacy-apps/public-apps/overview#install-an-app) en sus cuentas de HubSpot. * Cualquier aplicación diseñada para ser instalada por varias cuentas de HubSpot o que se anuncie en el mercado de aplicaciones debe usar OAuth. * Los usuarios que instalen aplicaciones en su cuenta de HubSpot deben ser [superadministradores](https://knowledge.hubspot.com/es/user-management/hubspot-user-permissions-guide#super-admin) o tener permisos de [acceso al mercado de aplicaciones](https://knowledge.hubspot.com/es/user-management/hubspot-user-permissions-guide#settings). ## Recursos recomendados * La [guía de inicio de OAuth](/docs/apps/legacy-apps/authentication/oauth-quickstart-guide) te ayudará a comenzar con una aplicación de ejemplo. * Este [tutorial de HubSpot Academy](https://app.hubspot.com/l/academy/tracks/71/593/2967) ofrece una introducción rápida en el uso de OAuth con HubSpot, incluyendo un desglose del flujo de HubSpot a OAuth y cómo actualizar un token de acceso. ## Configurar la autenticación OAuth Para configurar la autenticación OAuth para tu aplicación: * En primer lugar, [crea una aplicación](/docs/apps/legacy-apps/public-apps/overview) en una [cuenta de desarrollador de HubSpot](/docs/getting-started/account-types#developer-accounts). Después de crear la aplicación, podrás encontrar el ID de cliente de la aplicación y el secreto del cliente en la página de *autenticación* de la configuración de tu aplicación. ![MyHubSpotApp](https://cdn2.hubspot.net/hubfs/53/MyHubSpotApp.png) * Usa el ID de cliente y el secreto del cliente, junto con los [parámetros de consulta](#query-parameters) y los [permisos](#scopes) que se describen a continuación, para crear la URL de autorización. * Envía a los usuarios que deseen instalar la aplicación la URL de autorización, donde tendrán una pantalla que les permitirá seleccionar su cuenta y acceder a la integración. Puedes establecer que la URL de autorización sea para una cuenta de HubSpot específica agregando el ID de cuenta entre `/oauth/` y `/authorize`, como se muestra a continuación. Después de permitir el acceso, se redireccionarán a tu aplicación mediante una `redirect_url`, que tendrá un parámetro adjunto de consulta de código. Usarás ese código y el secreto del cliente para obtener un [access\_token y refresh\_token](/docs/apps/developer-platform/build-apps/authentication/oauth/working-with-oauth) de HubSpot. * **Ejemplos de URL de autorización** * **Cualquier cuenta:** `https://app.hubspot.com/oauth/authorize?client_id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&scope=contacts%20automation&redirect_uri=https://www.example.com/` * **Cuenta específica (ID 123456):** `https://app.hubspot.com/oauth/123456/authorize?client_id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&scope=contacts%20automation&redirect_uri=https://www.example.com/` * **Ejemplo de URL de redireccionamiento:** `https://example.com/?code=xxxx` * **Ejemplo de error:** `https://www.example.com/?error=error_code&error_description=Human%20readable%20description%20of%20the%20error` * Usa el `access_token` para autenticar las llamadas a la API realizadas a esa cuenta de HubSpot. * Una vez que expire el `access_token`, usa el `refresh_token` para generar un nuevo `access_token`. - La aplicación no aparecerá como *Aplicación conectada* en la cuenta de un usuario a menos que generes el token de actualización y el token de acceso inicial. - Los tokens de acceso reflejan los permisos solicitados desde la aplicación y no reflejan los permisos o limitaciones de lo que un usuario puede hacer en su cuenta de HubSpot. Por ejemplo, si un usuario tiene permisos para ver solo los contactos de su propiedad, pero autoriza una solicitud para el permiso `crm.objects.contacts.read`, el token de acceso resultante puede ver todos los contactos de la cuenta y no solo los que son propiedad del usuario que autoriza. ## Parámetros de consulta Los siguientes parámetros de solicitud son obligatorios al crear una URL de autorización para tu aplicación: | **Parámetro** | **Descripción** | **Cómo se usa** | | - | - | - | | `client_id` | Un ID que sirve como identificador único para tu aplicación. | Obténlo desde la página de configuración de autorización o "Auth" de tu aplicación (como se ha descrito anteriormente). | | `redirect_uri` | La URL a la que serán redireccionados los visitantes al recibir acceso a la aplicación. | También designarás esto en la página de configuración de autenticación de tu aplicación. **Nota:** Por razones de seguridad, esta URL debe utilizar `https` en producción. (Si realizas la prueba con `localhost`, puedes utilizar `http`.) También debes usar un dominio, ya que las direcciones IP no son compatibles. | | `scope` | Un conjunto de permisos separados por espacios a los que tu aplicación necesita acceder. | Todos los permisos que hayas marcado en la configuración de *Autenticación* de la aplicación se tratarán como obligatorios, por lo que deberás incluirlos en este parámetro. De lo contrario, la página de autorización mostrará un error. Además, los usuarios recibirán un error si intentan instalar tu aplicación en una cuenta que no tiene acceso a un permiso incluido. Ve la [documentación de referencia de permisos](/docs/apps/legacy-apps/authentication/scopes#list-of-available-scopes) para conocer más detalles sobre los endpoints que pueden tener permisos específicos. | Los siguientes parámetros son opcionales: | **Parámetro** | **Cómo usar** | **Descripción** | | - | - | - | | `optional_scope` | Un conjunto separado por espacios de permisos opcionales para tu aplicación. | Los permisos opcionales se eliminarán automáticamente de la solicitud de autorización si el usuario selecciona una cuenta de HubSpot que no tiene acceso a esa herramienta (por ejemplo, autorizar el acceso a ***Content Hub** Enterprise* en una cuenta gratuita de HubSpot). Si estás usando permisos opcionales, deberás verificar el token de acceso o el token de actualización para ver cuáles se otorgaron. Consulta la [documentación de referencia sobre permisos](/docs/apps/legacy-apps/authentication/scopes) para obtener más detalles. | | `state` | Si este parámetro está incluido en la URL de autorización, el valor se incluirá en un parámetro de consulta de estado cuando el usuario sea dirigido a `redirect_uri`. | Un valor de cadena que se puede usar para mantener el estado del usuario cuando se redirecciona de regreso a la aplicación. | ## Configurar permisos OAuth requiere que configures permisos o alcances, para tu aplicación. Cada permiso proporciona acceso a un conjunto de endpoints de la API de HubSpot y permite a los usuarios otorgar a la aplicación acceso a herramientas específicas en su cuenta de HubSpot. ![granular-scopes-selection](https://www.hubspot.es/hubfs/Knowledge_Base_2021/Developer/granular-scopes-selection.png) El acceso a las API o endpoints específicos depende del nivel de la cuenta de HubSpot. Si tu aplicación puede funcionar con varios tipos de cuentas de HubSpot, puedes usar el parámetro `optional_scope` para incluir los permisos con los que trabajas. De esta manera, los clientes que usan las cuentas gratuitas de HubSpot aún pueden autorizar la aplicación, incluso si no pueden acceder a todos los permisos. La aplicación debe verificar y manejar cualquier permiso para el que no esté autorizada. La lista completa de permisos está disponible [aquí](/docs/apps/legacy-apps/authentication/scopes). ## Documentos relacionados [Métodos de autenticación en HubSpot](/docs/apps/developer-platform/build-apps/authentication/overview) [Guía de inicio de OAuth](/docs/apps/legacy-apps/authentication/oauth-quickstart-guide) [Gestión de tokens](/docs/apps/developer-platform/build-apps/authentication/oauth/working-with-oauth) # Resumen de Primeros pasos Source: https://developers.hubspot.es/docs/apps/developer-platform/build-apps/authentication/overview Aprende los primeros pasos para desarrollar en HubSpot. 'Aprende los primeros pasos para desarrollar en HubSpot.'; Tanto si eres un nuevo desarrollador de HubSpot como si quieres ampliar tus conocimientos, esta sección te guiará a través del proceso de puesta en marcha. Explorarás las distintas vías de desarrollo disponibles, así como las herramientas y cuentas específicas que necesitarás para alcanzar tus metas. ## Las ventajas de una plataforma conectada Primero, es útil considerar qué hace de HubSpot una potente plataforma para desarrolladores. La base de toda cuenta de HubSpot es la plataforma [CRM](/docs/guides/crm/understanding-the-crm) (Customer Relationship Management), una base de datos de relaciones y procesos de negocios. HubSpot ofrece diferentes vías para que desarrolladores y partners externos trabajen con el CRM y puedan crear valor agregado para los usuarios finales de HubSpot. Esto incluye: * Crear integraciones y/o extensiones con las API de HubSpot para sincronizar datos entre HubSpot y plataformas externas. * Construir sitios web personalizados utilizando el CMS (Sistema de gestión de contenido) de HubSpot. Además de un conjunto completo de herramientas de gestión de contenido, el CMS se integra totalmente con el CRM. Esto facilita el lanzamiento de campañas, la captación de leads y las comunicaciones continuas con los clientes. * Personalización del CRM con extensiones de IU. Los desarrolladores pueden utilizar React para crear tarjetas personalizadas flexibles que se integran perfectamente con HubSpot. En la siguiente sección, obtendrás un resumen de las herramientas que están disponibles para los desarrolladores de HubSpot. A continuación, elegirás una ruta para continuar tu viaje como desarrollador de HubSpot. ## 1. Instala herramientas que te ayuden a construir Hay una amplia gama de herramientas disponibles para los desarrolladores de HubSpot. La combinación de herramientas que necesitarás dependerá de tus metas específicas. * **CLI de HubSpot:** Instalar la CLI de HubSpot para el desarrollo local es un gran punto de partida para muchas tareas de desarrollo. La CLI se utiliza al crear extensiones de IU y recursos de CMS, y puede utilizarse para crear y gestionar secretos, tablas de HubDB y datos de objetos personalizados de tu cuenta. Necesitarás tener instalado [Node.js](https://nodejs.org/en/) (se requiere la versión 18 o superior, y se recomienda la versión LTS). Para instalar el CLI globalmente, ejecuta el siguiente comando: ```shell theme={null} npm i -g @hubspot/cli ``` * **Visual Studio Code:** Instalar [Visual Studio Code](https://code.visualstudio.com/) significa que puedes aprovechar la extensión [Visual Studio Code de HubSpot](https://developers.hubspot.com/docs), lo cual te permite centralizar tu workflow de desarrollo. * **Bibliotecas de clientes**: HubSpot proporciona bibliotecas de clientes para [Node](https://github.com/HubSpot/hubspot-api-nodejs), [PHP](https://github.com/HubSpot/hubspot-api-php), [Ruby](https://github.com/HubSpot/hubspot-api-ruby) y [Python](https://github.com/HubSpot/hubspot-api-python). * **Postman:** utiliza [Postman](https://www.postman.com/) para acceder a [Colecciones de Postman de HubSpot](https://www.postman.com/hubspot). A lo largo de la documentación de la API de HubSpot, encontrarás botones para ejecutar llamadas utilizando la colección. ![run-in-postman-current-docs-site](https://www.hubspot.com/hubfs/run-in-postman-current-docs-site.png) Más información sobre [herramientas para desarrolladores de de HubSpot](/docs/developer-tooling/overview). ## 2. Decide qué construir No hay un camino único para desarrollar con HubSpot. Es una plataforma flexible que puede satisfacer una amplia gama de necesidades. Una de las cuatro amplias categorías que se enumeran a continuación debería cubrir la mayoría de estas necesidades. Puedes elegir la que sea más relevante para ti en este momento para una breve introducción, junto con algunos pasos inmediatos para empezar. También puedes hacerte una idea de cuáles son las mejores herramientas para el trabajo, y si se requiere un [tipo específico de cuenta de HubSpot](/docs/getting-started/account-types). * [Utilizar API y crear integraciones](https://developers.hubspot.com#use-apis-and-build-integrations) * [Crear aplicaciones para el mercado](https://developers.hubspot.com#build-for-the-app-marketplace) * [Personalizar la IU de HubSpot](https://developers.hubspot.com#customize-the-hubspot-ui) * [Crear sitios web personalizados](https://developers.hubspot.com#build-custom-websites) ## 3. Únete a tus pares Conecta con tus pares que ya están construyendo en HubSpot. Haz preguntas, comparte conocimientos, construye una comunidad e incluso puede que hagas amigos por el camino. * [Slack para desarrolladores](https://developers.hubspot.com/community) * [Foros de desarrolladores](https://community.hubspot.com/t5/HubSpot-Developers/ct-p/developers) * [Developer Advocacy GitHub](https://github.com/hubspotdev) ## 4. Obtén más información, a tu manera Una vez que estés en marcha, hay muchos recursos disponibles para ayudarte a profundizar. Puedes acceder a guías detalladas, documentos de referencia detallados o a los cursos de [HubSpot Academy](https://academy.hubspot.com/courses), según tu estilo de aprendizaje preferido. # Validando solicitudes Source: https://developers.hubspot.es/docs/apps/developer-platform/build-apps/authentication/request-validation # Permisos Source: https://developers.hubspot.es/docs/apps/developer-platform/build-apps/authentication/scopes # Crear una nueva aplicación utilizando la CLI (BETA) Source: https://developers.hubspot.es/docs/apps/developer-platform/build-apps/create-an-app # Gestionar aplicaciones en HubSpot (BETA) Source: https://developers.hubspot.es/docs/apps/developer-platform/build-apps/manage-apps-in-hubspot Más información sobre cómo gestionar la autenticación y otros ajustes de tu aplicación en la nueva plataforma para desarrolladores Después de subir tu aplicación a HubSpot utilizando la [guía de inicio rápido](/docs/apps/developer-platform/build-apps/create-an-app), migrándola desde una aplicación anterior o ejecutando manualmente el comando `hs project upload`, puedes gestionar tu aplicación en la página de índice de proyectos de tu cuenta de HubSpot. En la página de detalles de tu aplicación, puedes ver su historial de creación y despliegue, validar las características de la aplicación y gestionar la autenticación. ## Ver tu aplicación en la página de detalles del proyecto Para revisar los detalles de tu aplicación: * En tu cuenta de HubSpot, dirígete a **Desarrollo**. * En la página **Proyectos**, haz clic en el **nombre** de tu proyecto. En la página de detalles del proyecto, revisa y gestiona tu aplicación: * En el menú de la barra lateral izquierda, puedes hacer clic en **Detalles** para saltar directamente al historial de creación y despliegues recientes, o hacer clic en la característica de una aplicación para validar la configuración tal y como se detalla en el archivo `*-hsmeta.json` asociado. * Haz clic en la pestaña **Configuración** para cambiar la configuración de despliegue automático o si necesitas eliminar la aplicación. * En *Componentes del proyecto*, haz clic en el nombre de la aplicación (tal como se indica en el [esquema de nivel superior](/docs/apps/developer-platform/build-apps/app-configuration#app-schema)) para revisar el esquema desplegado más recientemente, las funciones actualmente configuradas y gestionar los ajustes de autenticación. ![Revisa los detalles del proyecto y las características de la aplicación](https://www.hubspot.com/hubfs/Knowledge_Base_2023-24-25/top-level-project-details-for-unified-app.png) ## Gestiona la autenticación de tu aplicación Para ver las credenciales de tu aplicación y gestionar la autenticación: * En la pestaña *Resumen* de la página de detalles del proyecto, en la sección *Componentes del proyecto*, haz clic en el nombre de la aplicación de nivel superior como se define en el campo `name` del [esquema de nivel superior](/docs/apps/developer-platform/build-apps/app-configuration#app-schema). * Haz clic en la pestaña **Autenticación** para ver las credenciales de tu aplicación, los permisos configurados y las URL de redireccionamiento. ![Revisa la pestaña Autenticación en los ajustes del proyecto de la aplicación](https://www.hubspot.com/hubfs/Knowledge_Base_2023-24-25/review-auth-details-for-unified-app.png) Si la distribución de tu aplicación está configurada en `private` en el [archivo de esquema de tu aplicación](/docs/apps/developer-platform/build-apps/app-configuration#app-schema), puedes gestionar la configuración de la lista de permisos haciendo clic en la pestaña **Distribución**: * En la parte superior de la página aparecerá un resumen de las cuentas instaladas actualmente. Para las aplicaciones con una distribución `private`, puedes instalar tu aplicación en máximo 10 cuentas de HubSpot. * Para añadir cuentas aprobadas, haz clic en **Añadir cuenta(s) aprobada(s)**. * En el panel derecho, en *Otras cuentas de producción*, revisa la lista de cuentas de producción a las que tu usuario de HubSpot tiene acceso actualmente. * Selecciona la **casilla de verificación** junto a cualquier cuenta que quieras añadir a la lista de cuentas permitidas que pueden instalar tu aplicación. * Cuando hayas terminado, haz clic en **Guardar cambios**. ![Añadir cuenta permitida en el panel derecho](https://www.hubspot.com/hubfs/Knowledge_Base_2023-24-25/approve-account-for-installation-panel.png) * En la lista de cuentas aprobadas, puedes pasar el cursor sobre una cuenta para copiar su enlace de instalación o eliminarla de la lista de cuentas permitidas. ![Gestionar cuentas permitidas individualmente desde la vista de lista](https://www.hubspot.com/hubfs/Knowledge_Base_2023-24-25/manage-individual-allowlisted-accounts-in-app-settings.png) # Requisitos del listado de herramientas para agentes Source: https://developers.hubspot.es/docs/apps/developer-platform/list-apps/agent-tool-listing-requirements Revisa los requisitos del mercado de aplicaciones para publicar una aplicación que incluya herramientas de agentes. A continuación, conoce los requisitos adicionales para incluir una aplicación con herramientas de IA en el mercado de aplicaciones, así como la forma de [enviarla para su aprobación](#submitting-tools-for-approval). ## Requisitos de los anuncios Todas las aplicaciones creadas para el mercado de aplicaciones están sujetas a los [requisitos de inclusión en el mercado de aplicaciones](/docs/apps/developer-platform/list-apps/listing-your-app/app-marketplace-listing-requirements), y las aplicaciones certificadas están sujetas a los [requisitos adicionales de certificación del mercado de aplicaciones](/docs/apps/developer-platform/list-apps/apply-for-certification/certification-requirements). Si agregas una herramienta de IA a una aplicación destinada al mercado de aplicaciones, tendrás que cumplir algunos criterios adicionales. ### Seguridad y privacidad * **Permisos:** si una herramienta de agente admite un tipo de objeto, debe agregarse el correspondiente permiso de `.read` a la [configuración de permisos necesarios de tu aplicación](/docs/apps/developer-platform/build-apps/app-configuration#app-schema). Por ejemplo, si una herramienta admite negocios, la aplicación debe requerir el permiso `crm.objects.deals.read`. * **Entradas:** las herramientas solo deben recoger las entradas y el contexto necesarios para sus salidas. Por ejemplo: * Una herramienta de "Resumir contacto" puede tener en cuenta entradas como propiedades de contacto y datos de reuniones y tareas asociadas. * Una herramienta de "Crear cotización" no debería requerir contexto sobre el historial de reuniones de un contacto. * **Vulnerabilidades específicas del LLM:** se evaluarán las prácticas recomendadas de seguridad de tu aplicación en relación con los riesgos específicos del LLM (por ejemplo, inyección indirecta de indicaciones o jailbreaks). * **Datos sensibles:** tu aplicación no debe acceder, solicitar ni utilizar [permisos de datos sensibles](/docs/api-reference/crm-sensitive-data/guide). ### Cumplimiento Las herramientas de agentes no deben apoyar ningún sistema o caso de uso de "riesgo inaceptable" o "alto riesgo", tal como se describe en la [Ley de IA de la UE](https://digital-strategy.ec.europa.eu/en/policies/regulatory-framework-ai). Por ejemplo: * **Aceptable:** herramientas "Resumir contacto" o "Crear cotización" * **Inaceptables:** herramientas "Calificación social", "Decisión sobre el empleo" o "Predictor del permiso parental" ### Fiabilidad * **Video de las pruebas:** debes proporcionar un breve video que describa las pruebas funcionales que has completado (consulta la sección [Presentar tus herramientas para su aprobación](#submitting-your-tools-for-approval), más abajo). * **Pruebas funcionales:** tus herramientas deben superar todas las pruebas funcionales que realiza el equipo de calidad del ecosistema de HubSpot. ### Usabilidad * **Nomenclatura:** los nombres de las herramientas deben citar la plataforma externa con la que interactúan. Sin embargo, no deben incluir una atribución a tu organización en el nombre de la herramienta, ya que el etiquetado y la asociación serán gestionados por la interfaz de usuario del mercado de aplicaciones. Por ejemplo: * **Aceptable:** "Enviar notificación de Slack" o "Crear cotización de Acme" * **Inaceptable:** "Enviar notificación de Slack por Alpha Co." o "Crear cotización de Acme por Omega Inc" * **Copia:** Las descripciones de las herramientas, etiquetas, opciones, herramientas y otros textos orientados al cliente son claros e intuitivos. ### Valor En este momento, las herramientas deben potenciar los casos de uso de primera línea (por ejemplo, marketing, ventas y servicio al cliente). Por ejemplo: * **Aceptable:** herramientas "Crear factura de Xero" y "Enviar regalo de Omega" * **Inaceptable:** una herramienta "Configuración de HubSpot para nuevos empleados" *** ## Enviar tus herramientas para la aprobación Para presentar tus herramientas para su aprobación, completa los siguientes pasos en los plazos especificados. ### 2-9 de junio de 2025 (inicio de la beta privada/punto de control #1) Entre el 2 y el 9 de junio de 2025, configura tu cuenta de prueba de desarrollador. * En la cuenta de desarrollador en la que vas a crear tus herramientas (la que se convirtió a la plataforma de desarrolladores el 2 de junio), selecciona o [crea una nueva cuenta de prueba de desarrollador](/docs/getting-started/account-types#developer-test-accounts). * En esa cuenta de prueba de desarrollador, instala la aplicación de prueba que contendrá tus herramientas. * Proporciona el HubID de la cuenta de prueba del desarrollador al mánager del programa beta de HubSpot. Este es el ID resaltado en la siguiente captura de pantalla, que es distinto del ID de tu cuenta de desarrollador y del ID de tu aplicación de prueba. HubSpot desbloqueará la cuenta para que tus herramientas puedan utilizarse en los agentes. ![El ID de la cuenta de prueba del desarrollador, que puedes encontrar en la columna detalles de la cuenta de la página de cuentas de prueba](https://developers.hubspot.com/hubfs/Knowledge_Base_2023-24-25/developer-test-account-id.png) ### 20 de junio de 2025 (punto de control #2 de la beta privada) Antes del 20 de junio de 2025, proporciona credenciales de prueba y prueba tus herramientas para permitir que el equipo de calidad del ecosistema de HubSpot revise y apruebe tus herramientas. * **Proporcionar credenciales de prueba:** * Rellena la cuenta de prueba del desarrollador con los datos del CRM necesarios para probar correctamente las herramientas. * Invita a [ecosystem-quality-review@hubspot.com](mailto:ecosystem-quality-review@hubspot.com) a la cuenta como [superadministrador](https://knowledge.hubspot.com/user-management/hubspot-user-permissions-guide#super-admin). * En tu plataforma externa, proporciona a [ecosystem-quality-review@hubspot.com](mailto:ecosystem-quality-review@hubspot.com) todos los permisos necesarios para probar correctamente las herramientas dentro de los workflows y agentes de HubSpot. * **Prueba las herramientas en las cuentas de prueba de desarrollador no bloqueadas:** utilizando tu aplicación de prueba/desarrollo, implementa y prueba las herramientas de extremo a extremo dentro de los workflows y agentes en la cuenta de prueba de desarrollador. * **Video de pruebas:** Graba un breve video que describa las pruebas funcionales que has completado y compártelo con [ecosystem-quality-review@hubspot.com](mailto:ecosystem-quality-review@hubspot.com). El video de demostración debe cumplir con los siguientes requisitos: * Tener al menos tres minutos de duración * Incluir audio (preferido) o descripciones de texto * Incluye descripciones de las herramientas y casos de uso comunes * Describe las pruebas que has realizado. El equipo de calidad del ecosistema debería poder reproducir estos pasos con los datos presentes en la cuenta de prueba del desarrollador. Entre el 20 y el 25 de junio de 2025, el equipo de calidad del ecosistema de HubSpot revisará tus herramientas y compartirá los comentarios iniciales. Toma medidas al respecto lo antes posible, ya que pueden ser necesarias algunas revisiones para la aprobación final. # Solicitar la certificación de la aplicación Source: https://developers.hubspot.es/docs/apps/developer-platform/list-apps/apply-for-certification/applying-for-app-certification La certificación de aplicaciones les permite a los usuarios saber que tu aplicación ha sido revisada y aprobada por HubSpot, lo que genera confianza y garantiza su calidad ante posibles usuarios. 'La certificación de aplicaciones les permite a los usuarios saber que tu aplicación ha sido revisada y aprobada por HubSpot, lo que genera confianza y garantiza su calidad ante posibles usuarios.'; ### ¿Qué es la certificación de la aplicación? La certificación de las aplicaciones implica que el equipo de calidad del ecosistema de HubSpot revise y confirme que cada aplicación publicada cumple con los [ requisitos](https://developers.hubspot.com/docs) de seguridad, privacidad, confiabilidad, rendimiento, usabilidad, accesibilidad y valor. Una vez aprobada, la página de la ficha de una aplicación mostrará una insignia de "Aplicación certificada de HubSpot". ![](https://lh5.googleusercontent.com/CsSeky353aK17dYyX63spJgvA0INloEKH5z9zbmc2VgWG9QExch_b8skZ6ozu8K5H6Q3k0UWSScb2z16WwiIlkcx4Rhsmr0JexBRIYAJLoVNzb7D6DI3_296A5nIiAiolEkvhkl4) ### ¿Por qué es importante? Una insignia certificada en la ficha de una aplicación permite a los clientes existentes y potenciales saber que el equipo de calidad del ecosistema de HubSpot revisó y aprobó tu aplicación. En última instancia, es una manera de simbolizar la calidad y generar confianza con los usuarios de la aplicación. Más información sobre cómo generar la confianza de los clientes mediante la certificación [aquí](https://developers.hubspot.com/blog/how-to-build-customer-trust-through-certification). ### ¿Cómo funciona? Cualquier App Partner [elegible](https://developers.hubspot.com/docs) puede solicitar la certificación a través de su cuenta de desarrollador de aplicaciones. El equipo de calidad del ecosistema de HubSpot revisará la solicitud y se pondrá en contacto contigo para proporcionar retroalimentación o confirmar la certificación de tu aplicación. ### ¿Mi aplicación es elegible para la certificación? Asegúrate de que tu aplicación sea elegible para la certificación revisando nuestros [requisitos de certificación](https://developers.hubspot.com/docs). No podrás presentar una solicitud a menos que tu aplicación tenga al menos 60 instalaciones activas y la cantidad necesaria de tráfico de API. Las instalaciones activas son la cantidad de cuentas de producción únicas de HubSpot, no afiliadas a tu organización, que muestran una actividad exitosa de la aplicación en los últimos 30 días. ### ¿Cómo puedo solicitar la certificación? Solo puedes enviar una aplicación a la vez para la certificación. Si envías más de una aplicación para la certificación al mismo tiempo, se rechazarán dependiendo del orden de envío. Una vez que tu aplicación esté certificada, puedes enviar otra para la certificación. Para solicitar la certificación: * [Accede](https://knowledge.hubspot.com/es/account-management/why-can-t-i-log-into-hubspot) a tu cuenta de desarrollador y dirígete a**Mercado de aplicaciones** > **Ficha de aplicación**. * Coloca el cursor sobre la aplicación que quieras certificar y haz clic en **Más**. Luego, selecciona **Certificar aplicación**. ![Certificación de la aplicación](https://www.hubspot.es/hubfs/Knowledge_Base_2021/Developer/KB%20-%20App%20Certification.png) * En el cuadro de diálogo, ingresa la siguiente información: * **Video de demostración en YouTube:** ingresa la **URL** con el video de demostración. Revisa los requisitos necesarios para el video de demostración de la aplicación [a continuación](#app-demo). * **Credenciales de prueba:** introduce las credenciales de prueba de tu aplicación para que el equipo de calidad del ecosistema de HubSpot evalúe su funcionalidad. * En la parte inferior, haz clic en **Enviar solicitud de certificación**. ![app-certification](https://knowledge.hubspot.com/hubfs/Knowledge_Base_2023_2024/app-certification.png) ### Requisitos para el video de demostración de la aplicación Los videos de demostración ayudan al equipo de calidad del ecosistema de HubSpot a probar tu aplicación. El equipo no revisará tu aplicación a menos que envíes un video de demostración que cumpla con todos los requisitos. Ventas promocionales y videos de marketing serán rechazados. HubSpot no compartirá ni publicará tus videos de demostración. El video de demostración debe cumplir con los siguientes requisitos: * Tener al menos tres minutos de duración. * Incluir audio (preferido) o descripciones de texto. * Incluir descripciones del propósito de tu aplicación y casos de uso comunes. * Por ejemplo, "La aplicación Acme ayuda a los representantes de ventas e incorporación a coordinar a través del CRM. Los negocios cerrados ganados en cualquiera de los CRM compatibles con Acme pueden generar automáticamente tickets y tareas de incorporación en HubSpot." * Demostrar y describir cómo los nuevos usuarios deben: * Instalar la aplicación. * Por ejemplo, " En la ficha de Acme en el mercado de aplicaciones de HubSpot, haz clic en Instalar aplicación, selecciona tu CRM, ingresa tus credenciales, haz clic en Listo, selecciona tu cuenta de HubSpot, revisa los permisos solicitados y haz clic en Conectar aplicación." * Configura tu aplicación después de la instalación. * Por ejemplo, "Una vez que la aplicación esté instalada, selecciona una pipeline de tickets navegando a Configuración > Integraciones > Aplicaciones conectadas > Aplicación Acme > Pipeline de tickets. Luego, configura hasta 10 tareas predeterminadas en la sección "Plantillas de tareas". Para activar la sincronización, activa la opción "Sincronización de tickets"." * Usa las características principales de tu aplicación para admitir casos de uso comunes. * Por ejemplo, "Para cada transacción ganada cerrada en el CRM conectado, la función de sincronización de tickets creará un registro de tickets en HubSpot con los contactos asociados y las tareas configuradas. Esto permite que tu equipo de incorporación se conecte de inmediato con el nuevo cliente." * Interactúa con tu aplicación dentro de su cuenta de HubSpot para inlcuir casos de uso comunes (si corresponde). * Por ejemplo, "Para crear tickets de incorporación a partir de los negocios de HubSpot, usa la acción personalizada de workflows "Crear ticket de Acme "en los workflows basados en negocios. Estas acciones permiten una mayor personalización que la configuración de la aplicación para otros CRM." * Desconecta tu aplicación de su cuenta de HubSpot. * Desinstala tu aplicación en su cuenta de HubSpot, describiendo cómo esto afecta a los usuarios de las cuentas de HubSpot y a sus datos. **Sugerencia:** [Loom](https://www.loom.com/) es una herramienta gratuita que puedes usar para grabar un video de demostración. ### ¿Por qué no aparece la CTA de certificación para mi aplicación? El botón "Certificar aplicación" solo aparecerá si tu aplicación es elegible para solicitarla. Revisa nuestros [requisitos de certificación](https://developers.hubspot.com/docs) o ponte en contacto con tu [mánager de App Partner](https://developers.hubspot.com/docs#related-resources) si tienes preguntas sobre la elegibilidad. ### ¿Cómo sabrán los usuarios que mi aplicación está certificada? Una vez que esté certificada, la ficha de la aplicación en el mercado de aplicaciones de HubSpot tendrá una insignia que indica "Aplicación certificada de HubSpot". ![](https://lh3.googleusercontent.com/dw7gvVRNzsrmtUwOYBsLVhpAEniaAZ5Z-_G70J-Bzs596yGR_ZzLXJyw821l7FVCV53XmKoI1VVEFxX9YKAJxtI-4NjwvCJadqfWyLG8IyFOWROZ6k8Nx-1307mp6cE0T8p980-N) Cuando un cliente pasa el cursor sobre la insignia, verá información adicional sobre cómo se certifican las aplicaciones. ![](https://lh5.googleusercontent.com/CsSeky353aK17dYyX63spJgvA0INloEKH5z9zbmc2VgWG9QExch_b8skZ6ozu8K5H6Q3k0UWSScb2z16WwiIlkcx4Rhsmr0JexBRIYAJLoVNzb7D6DI3_296A5nIiAiolEkvhkl4) Encuentra tu **mánager de App Partner** y su información de correo electrónico iniciando sesión en tu cuenta de desarrollador y navegando al **mercado de aplicaciones** > **Fichas**. Pasa el cursor sobre tu aplicación y haz clic en **Más** > **Ver detalles de la ficha**. *** #### Documentos relacionados [Requisitos de certificación de la aplicación](https://developers.hubspot.com/docs) [Requisitos de la ficha de la aplicación](https://developers.hubspot.com/docs) # Requisitos para la certificación de las aplicaciones Source: https://developers.hubspot.es/docs/apps/developer-platform/list-apps/apply-for-certification/certification-requirements Esto es lo que deben hacer los App Partners para certificar las aplicaciones en el mercado de aplicaciones de HubSpot. 'Mercado de aplicaciones | Requisitos para la certificación de las aplicaciones'; 'Esto es lo que deben hacer los App Partners para certificar las aplicaciones en el mercado de aplicaciones de HubSpot.'; La certificación de las aplicaciones implica que el equipo de calidad del ecosistema de HubSpot revise y confirme que cada [aplicación publicada](https://developers.hubspot.com/docs) cumple con los requisitos de seguridad, privacidad, confiabilidad, rendimiento, usabilidad, accesibilidad y rentabilidad que se indican más abajo. Las aplicaciones certificadas se destacan en el [mercado de aplicaciones](https://ecosystem.hubspot.com/marketplace/apps) con un reconocimiento de calidad y confiabilidad. Tu aplicación también obtendrá [beneficios especiales](#certification-benefits) y recibirá comentarios constructivos del equipo de calidad del ecosistema de HubSpot durante la revisión para la certificación de las aplicaciones. * Estos requisitos están sujetos a cambios, ya que HubSpot realiza continuamente mejoras en el mercado de aplicaciones y el ecosistema. HubSpot puede rechazar la solicitud de certificación de una aplicación a su discreción si esta no cumple con los estándares establecidos. * HubSpot no revisará la aplicación a menos que envíes un video de demostración, como se indica en la [solicitud de certificación de las aplicaciones](https://developers.hubspot.com/docs). * Solo puedes enviar una aplicación a la vez para la certificación. Si envías más de una aplicación para la certificación al mismo tiempo, se rechazarán en función del orden de envío. * La certificación de las aplicaciones tienen una validez continua de dos años y deben renovarse. Si no renuevas tu certificación, se te retirará el estado de certificado. * Se enviará una notificación 3 meses antes de la fecha de renovación de la certificación de tu aplicación. * Si tu aplicación ya no cumple con estos estándares, el equipo de calidad del ecosistema de HubSpot colaborará contigo por un máximo de 60 días para resolver tus inquietudes. ## Resumen A continuación, encontrarás un resumen de los requisitos para la certificación de las aplicaciones. Para obtener más detalles, consulta la sección [Criterios de revisión](#review-criteria). Tu aplicación debe: * Tener un ID único de aplicación de HubSpot asociado. * La aplicación pública debe ser única. Si ya has publicado una aplicación y quieres reemplazarla, debes actualizar la aplicación existente en lugar de publicar una nueva. * No diseñes varias aplicaciones para el mismo tipo de uso. Las aplicaciones con funciones similares y que utilizan las mismas API deben consolidarse en una sola aplicación. * Utilizar la [autenticación de OAuth](/docs/apps/legacy-apps/authentication/working-with-oauth) y todos los permisos que requiere. * Tener un [dominio verificado](/docs/apps/legacy-apps/public-apps/overview) asociado. * Los recursos públicos asociados con tu aplicación deben cumplir con las prácticas recomendadas de seguridad. Tu aplicación no puede utilizar las [tarjetas de CRM clásicas](/docs/api-reference/crm-public-app-crm-cards-v3/guide), ya que estas ya no son compatibles desde el 16 de junio de 2025. Más información sobre este cambio en el [registro de cambios para desarrolladores](https://community.hubspot.com/t5/Developer-Announcements/Deprecating-Support-for-Classic-Legacy-CRM-Cards/m-p/1153039#M1048). Consulta la [lista detallada de los requisitos de seguridad y privacidad](#security-privacy). La actividad de la aplicación se define con base en las solicitudes autenticadas por OAuth a las [API](/docs/api-reference/overview) de HubSpot y las [solicitudes con firma](/docs/apps/legacy-apps/authentication/validating-requests) de las [suscripciones y extensiones de webhook](/docs/api-reference/webhooks-webhooks-v3/guide) de HubSpot (por ejemplo, solicitudes de obtención de datos de [tarjetas del CRM](/docs/api-reference/crm-public-app-crm-cards-v3/guide)). Las instalaciones activas son la cantidad de cuentas de producción únicas de HubSpot que no son filiales de tu organización y que muestran actividad válida de la **aplicación** en los últimos 30 días. ## Beneficios de la certificación Además de los [beneficios de publicar tu aplicación](https://www.hubspot.com/partners/app), las aplicaciones certificadas reciben lo siguiente: * Una insignia de "Aplicación certificada por HubSpot", que se muestra en la ficha del mercado de aplicaciones. * Mayor visibilidad en el mercado de aplicaciones de HubSpot: * Inclusión en el filtro de búsqueda "Aplicación certificada por HubSpot". * Posibilidad de ser incluida en las colecciones selectas del mercado de aplicaciones. * Acceso a utilizar la insignia "Aplicación certificada por HubSpot" y a las imágenes para redes sociales a fin de comunicar la certificación de la aplicación. * Calificación favorable en las iniciativas de asociación y amplificación de HubSpot. ## Criterios de revisión Para obtener la certificación, tu aplicación debe demostrar su calidad al cumplir con las medidas cuantitativas y los descriptores cualitativos de seguridad, privacidad, confiabilidad, rendimiento, usabilidad, accesibilidad y rentabilidad. Los requisitos a continuación están organizados según las categorías anteriores e incluyen ejemplos sobre los comentarios constructivos que podrías recibir. ### Seguridad y privacidad Tu aplicación debe: * Tener un ID único de aplicación de HubSpot asociado. Tu aplicación debe autorizar las solicitudes a la API con el ID público de aplicación de HubSpot (y el [ID de cliente de OAuth](/docs/apps/legacy-apps/authentication/working-with-oauth)) asociado a la ficha de la aplicación. * Una ficha no debe redireccionar hacia una aplicación pública o privada diferente. * La aplicación pública que aparece en la ficha no debe requerir otra aplicación pública o privada para funcionar. * La autenticación debe hacerse mediante el [flujo de programación para la autorización por OAuth](/docs/apps/legacy-apps/authentication/working-with-oauth). * Está prohibido pedir a los usuarios que copien y peguen códigos o tokens de OAuth. Solo se les debe pedir que otorguen el acceso. * Las aplicaciones deben solicitar, administrar y actualizar los tokens de acceso sin la participación del usuario. * Utiliza todos los [permisos](/docs/apps/legacy-apps/authentication/working-with-oauth) que solicite para la instalación (es decir, tanto en el parámetro `scope` requerido como en el parámetro `optional_scope`). * Activa la [configuración avanzada de los permisos](/docs/apps/legacy-apps/public-apps/overview#configure-scopes) y selecciona todos los permisos obligatorios, requeridos condicionalmente y opcionales que la aplicación solicita para la instalación. * Se deben eliminar los permisos irrelevantes. * Si hay permisos que solo aplican a un subconjunto de la base de usuarios de la aplicación, deben incluirse como permisos requeridos condicionalmente u opcionales. * Tener un [dominio verificado](/docs/apps/legacy-apps/public-apps/overview) asociado. * Los recursos públicos serán evaluados en función de las prácticas recomendadas de seguridad relacionadas con software obsoleto y las vulnerabilidades e incidencias del servidor web. #### Ejemplos de comentarios Actualmente, tu aplicación requiere cuatro permisos:: `contacts`, `timeline`, `forms` y `content`. Sin embargo, según nuestros registros, solo se hicieron solicitudes a las API de contactos del CRM y eventos de la cronología en los últimos 30 días. Dado que los permisos `forms` y `content` no son necesarios para ninguna de estas funciones, elimínalos de la configuración de la aplicación si es necesario para minimizar los permisos que los usuarios deben aceptar. ### Confiabilidad y rendimiento Tu aplicación debe: * No tener ningún problema de cumplimiento, lo que implica: * Cumplir con todas las disposiciones aplicables. * No haber sido rechazada para la certificación en los últimos seis meses. * No tener derivaciones de asistencia sin resolver con clientes en común. * Utilizar versiones públicas y estables de las API y las extensiones de HubSpot. * Se recomienda el uso de las últimas versiones públicas. * Las API en prueba para programadores, en pruebas beta y sin documentar se consideran inestables y no se deben usar en aplicaciones de producción. * Si la aplicación utiliza las API que no son estables ni públicas, indícalo durante la revisión de la certificación o el equipo de mánagers de App Partner para analizar las posibilidades. * Mantener un volumen razonable de [actividad](#activity) en las cuentas de clientes de HubSpot que no sean filiales de tu organización. * La aplicación debe cumplir con las [pautas de uso de las API](https://developers.hubspot.com/docs) y las prácticas recomendadas, que incluyen: * Respetar los límites de frecuencia (es decir, 100 solicitudes entrantes cada 10 segundos por cuenta conectada de HubSpot). * Actualizar los tokens de acceso de OAuth antes de que caduquen. * Capturar los datos de las llamadas recurrentes cuando sea posible. * Usar las suscripciones de las API y los webhooks en bloque para reducir el volumen de solicitudes siempre que sea posible. * Usar las API para crear propiedades, workflows y acciones de workflow personalizadas en lugar de solicitar acciones por parte del usuario. * Tu aplicación debe mantener una tasa media de solicitudes exitosas superior al **95%** en todas las [actividades](#activity). * Las solicitudes que dan como resultado un error reducen la tasa de solicitudes exitosas. * Es posible excluir algunos errores inevitables o previsibles al calcular las tasas de éxito en todas [las actividades](https://developers.hubspot.com/docs#activity). * Tu aplicación puede tener una extensión de navegador para ofrecer más funciones y rentabilidad a los clientes: * No se deben crear extensiones del navegador específicamente para la interfaz del usuario de HubSpot o como una solución alternativa a las API de HubSpot. * Las extensiones para navegador no deben agregar funciones o componentes en la interfaz de usuario de HubSpot. * Las extensiones de la interfaz de usuario compatibles y aprobadas (por ejemplo, las [tarjetas del CRM](/docs/api-reference/crm-public-app-crm-cards-v3/guide) y las [acciones de workflow personalizadas](/docs/api-reference/automation-actions-v4-v4/guide)) proporcionan una experiencia del usuario más sólida para los clientes. * Tu aplicación será sometida a una evaluación de seguridad adicional si incluyes una extensión para navegador. #### Ejemplos de comentarios La tasa de solicitudes exitosas a la API de tu aplicación está por debajo del límite del 95% requerido para la certificación. Nuestros registros muestran una tasa de solicitudes exitosas del 83% en los últimos 30 días. La gran mayoría de estas solicitudes generaron errores de tipo `429`, en los que se excede el límite de velocidad. Para reducir esta tasa de errores, recomendamos reducir el número de solicitudes a 100 por cada 10 segundos para cada cuenta. La aplicación está generando errores al intentar actualizar los contactos usando la dirección de correo `undefined`, que no funcionará con el endpoint. Tu aplicación debe omitir estas solicitudes si un registro no tiene dirección de correo. La aplicación está haciendo solicitudes con tokens de OAuth vencidos y está recibiendo errores `401` antes de actualizar el token. Para minimizar estos errores, recomendamos que la aplicación lleve un registro de cuándo caducan los tokens o que actualice los tokens antes de hacer solicitudes. Si comienzas a ver errores `401` con el 100% de las solicitudes y no puedes actualizar el token de acceso, considera desinstalar la aplicación y deja de hacer solicitudes para la cuenta hasta que un usuario vuelva a autenticar la aplicación. Tu aplicación está generando el error `403` al intentar usar la API de listas de contactos con cuentas gratuitas de Marketing Hub, que no tienen acceso a listas de contactos. Si la aplicación recibe el error `403` repetidamente debido a que faltan los permisos pertinentes, debe detener las llamadas para solicitar listas desde esa cuenta. Las suscripciones a webhooks de tu aplicación con frecuencia presentan errores de tipo `500` y `503`. Asegúrate de que tu servidor pueda manejar el volumen de solicitudes (cuyo límite actual es de 150 por segundo) para que no se pierdan los datos de los clientes. Tu aplicación extrae muchos contactos de uno en uno en lugar de hacerlo en bloques. Recomendamos usar [endpoints en bloques](/docs/api-reference/crm-contacts-v3/guide). ### Usabilidad y accesibilidad | Aplicación * La aplicación debe tener una [ficha publicada](https://developers.hubspot.com/docs) en el [mercado de aplicaciones](https://ecosystem.hubspot.com/marketplace/apps) de HubSpot durante al menos seis meses. * La aplicación debe cumplir con las [prácticas recomendadas en cuanto a la usabilidad](https://www.nngroup.com/articles/ten-usability-heuristics/). * La instalación y el uso no deberían causar confusión o frustración a los clientes en común ni afectar negativamente la experiencia de los usuarios con HubSpot. #### Ejemplos de comentarios Actualmente, la aplicación requiere que los usuarios configuren manualmente las acciones de workflow con webhooks para enviar mensajes de texto. Considera la posibilidad de crear acciones de workflow personalizadas mediante la aplicación que sean lo suficientemente flexibles como para adaptarse a distintos tipos de uso. ### Usabilidad y Accesibilidad | Ficha en el mercado de aplicaciones La ficha en el mercado de aplicaciones debe cumplir con lo siguiente: * Describir con exactitud las funciones actuales de la aplicación. * Si las funciones cambian con respecto al producto o el tipo de suscripción, sea en HubSpot o en la solución, se deben dejar claras las diferencias. * Contener información clara y precisa sobre los precios, e incluir un enlace a la página de precios actual. * Si hay varios paquetes que son compatibles con la aplicación, la ficha del mercado de aplicaciones debe incluir la opción menos costosa como mínimo. * Utiliza datos provisionales u oculta los datos para no mostrar información de identificación personal. * Otros elementos que debes incluir: * Ayudas visuales informativas actualizadas, que pueden incluir capturas de pantalla o un video. Consulta la página [Cómo crear un buen video de demostración de aplicaciones](https://www.hubspot.com/partners/apps/resources/how-to-make-a-great-app-demo-video) para conocer las prácticas recomendadas y ver ejemplos. * Una "URL de documentación sobre la configuración" actualizada que lleve directamente a una guía de configuración completa para tu aplicación. Puedes consultar [la documentación completa sobre los requisitos de configuración](https://developers.hubspot.com/docs). Esta guía también incluye una plantilla de ejemplo que cumple todos los requisitos. * Elementos que no debes incluir: * Datos o estadísticas, a menos que se proporcione un caso de éxito como recurso. #### Ejemplos de comentarios La ficha del mercado de aplicaciones incluye pocos detalles específicos sobre las funciones de tu aplicación. Mejórala usando capturas de pantalla que representen las funciones de la aplicación y agrega descripciones más detalladas de los tipos de uso más frecuentes y el comportamiento en HubSpot. Los clientes de HubSpot prefieren la experiencia de "probar antes de comprar" cuando adquieren nuestros productos y servicios. Por esta razón, te recomendamos ofrecer una experiencia de prueba o de registro gratuitos para la aplicación. Algunos App Partners que no tienen una página de precios o no ofrecen una prueba gratuita han creado "suscripciones de HubSpot", que brindan a los clientes precios transparentes, autorregistro y otros beneficios. ### Usabilidad y accesibilidad | Documentación de apoyo La documentación para la asistencia al cliente de tu aplicación debe cumplir con lo siguiente: * Está alojada en una URL activa, de acceso público (es decir, no debe requerir ningún pago ni inicio de sesión) y cumplir con las normas actuales de accesibilidad, privacidad y el RGPD. * Está actualizada y coincide con la versión actual de la aplicación. * Describe claramente: * Qué hace la aplicación. * Cómo instalar la aplicación y conectar una cuenta de HubSpot, con capturas de pantalla de cada paso, incluida la pantalla de aprobación del permiso. * Cómo configurar la aplicación una vez que esté instalada. * Cómo usar la aplicación, especificando las interacciones manuales y automatizadas. * Cómo desconectar HubSpot de la aplicación. * Cómo desinstalar la aplicación de una cuenta de HubSpot. * Cómo el hecho de desconectar y desinstalar la aplicación afectaría las cuentas y los datos de HubSpot de los usuarios. * Incluye imágenes. Cualquier imagen que contenga capturas de pantalla de la interfaz del usuario de HubSpot debe estar actualizada y cumplir con nuestro [sistema de diseño](https://canvas.hubspot.com/). * Se recomienda incluir videos, pero no es obligatorio. Los videos deben actualizarse regularmente y mostrar la versión actual de tu aplicación. #### Ejemplos de comentarios La guía de configuración de tu aplicación incluye una captura de pantalla que muestra los permisos que requiere tu aplicación para la instalación. Esta captura de pantalla no muestra el permiso `business-intelligence`, que está seleccionado en la configuración de la aplicación. Actualiza la captura de pantalla para que refleje los permisos requeridos actualmente. ### Rentabilidad * El total de instalaciones activas, la retención y las revisiones del mercado de aplicaciones de HubSpot determinan la rentabilidad que los clientes en común pueden esperar de la aplicación. * Tu aplicación debe tener al menos 60 instalaciones individuales [activas](#activity) a fin de que sea apta para obtener la certificación y mantenerla. Las cuentas con la aplicación instalada no deben pertenecer a tu organización. También se excluirán las cuentas de prueba. * Si tu aplicación tiene menos de 60 instalaciones activas, se te solicitará que canceles la solicitud de certificación. * Si tu aplicación tiene menos de las tres instalaciones activas necesarias para publicar una ficha, es posible que tu aplicación se elimine del mercado de aplicaciones. * La ficha de tu aplicación debe mostrar las respuestas de tu equipo frente a todas las evaluaciones negativas de tu aplicación. #### Ejemplos de comentarios Tu aplicación no ha cumplido con el mínimo de 60 instalaciones activas durante los últimos seis meses. Por ello, se retirará la certificación. Puedes volver a solicitarla en seis meses. ## Proceso de revisión de la certificación y recertificación de la aplicación El equipo de calidad del ecosistema de HubSpot procesa las [solicitudes de certificación de aplicaciones](https://developers.hubspot.com/docs) en un plazo de **10 días laborables**. Todo el proceso de revisión y valoración de la aplicación no debe tardar más de **60 días** desde el momento en que se envían los comentarios. Revisa los criterios indicados en [esta página](https://developers.hubspot.com/docs) para proporcionar las credenciales que se necesitan a fin de probar la aplicación. Si la aplicación cumple con todos los requisitos, obtendrá la certificación y se mostrará la insignia "Aplicación certificada por HubSpot" a los clientes y prospectos en el mercado de aplicaciones. La aplicación también aparecerá en la búsqueda cuando los usuarios seleccionen el filtro "Aplicación certificada por HubSpot". Si la aplicación no pasa la revisión, puedes volver a solicitarla en seis meses. Después de un año de haber sido certificada, el equipo de calidad del ecosistema de HubSpot revisará tu aplicación para asegurarse de que sigue cumpliendo con los rigurosos requisitos de certificación. Si tu aplicación ya no cumple con los estándares, el equipo trabajará contigo durante hasta sesenta días para resolver tus inquietudes. Si en cualquier momento tu aplicación no cumple con los requisitos de certificación enumerados anteriormente, HubSpot podría iniciar inmediatamente un proceso de recertificación, incluso si tu aplicación ha estado certificada por menos de un año. Tal como se indica en el [acuerdo del App Partner Program](https://legal.hubspot.com/app-program-agreement), HubSpot también se reserva el derecho de anular la publicación de tu aplicación en cualquier momento. ## Preguntas frecuentes > **¿La certificación de la aplicación tiene algún coste?** > > No, no te cobramos por publicar o certificar tus soluciones en el mercado de aplicaciones, ni existen tarifas por las instalaciones hechas a través del mercado de aplicaciones. Tampoco hay distribución de ingresos. Estamos aquí para ayudarte a hacer que tu aplicación sea de mayor calidad. > **¿Se me notificará en el momento en que mi aplicación cumpla con los requisitos para la certificación nuevamente si fue rechazada antes?** > > No. En este momento, no tenemos la función de enviar notificaciones para informarte si puedes volver a presentar una solicitud para tu aplicación y cuándo. Comunícate con tu [mánager de App Partners](#app-partner-manager), es el mejor medio para saber si la aplicación es elegible antes de presentar la solicitud. > **¿Cómo debo promocionar mi aplicación certificada entre mis clientes?** > > Puedes usar la plantilla de comunicado de prensa en [esta página](https://www.hubspot.com/partners/app/resources) para compartir la noticia de que tu aplicación ha obtenido la certificación. > > Si planeas publicarlo en las redes sociales, no te olvides de etiquetar a HubSpot. Nos encanta compartir la celebración con nuestros App Partners. > **Me gusta experimentar con las API en prueba beta más recientes. ¿La certificación de aplicaciones es adecuada para mí?** > > Te recomendamos que te pongas en contacto con tu [mánager de App Partners](#app-partner-manager) para saber si la certificación de aplicaciones es adecuada en tu caso. > > Nuestro objetivo es garantizar que tu aplicación esté bien diseñada para nuestros clientes en común y que no implique cambios inesperados, por lo que se necesita que tu aplicación use las API estables más recientes. Sin embargo, también nos encanta observar y apoyar a emprendedores, voluntarios y programadores que quieran experimentar con las API en prueba beta más recientes. > **Me gustaría que mi aplicación apareciera en el mercado de aplicaciones. ¿La certificación de aplicaciones se hace con este fin?** > > Los beneficios de aparecer en selecciones de aplicaciones y en los filtros de aplicaciones certificadas en el mercado de aplicaciones siguen aumentando. Nos gustaría saber más sobre cómo cuál sería la mejor manera de destacar tu producto (por ejemplo, en el mercado de aplicaciones, la comunidad de HubSpot, y los boletines especiales de HubSpot, entre otros). > > Tu [mánager de App Partners](#app-partner-manager) sería el mejor contacto para iniciar esta conversación y analizar los posibles beneficios en el futuro. > **¿Cuál es la razón y la forma en que se evaluarán mis recursos públicos con respecto a las prácticas recomendadas de seguridad?** > > Teniendo en cuenta que la clientela promedio utiliza más de cinco integraciones, es imperativo monitorizar las aplicaciones y ajustarlas a los estándares de privacidad, seguridad y calidad a lo largo del tiempo. Cualquier recurso público se evaluará utilizando la información ya proporcionada durante el proceso de publicación de la ficha y los resultados se analizarán utilizando un método no invasivo. > **Mi aplicación fue certificada hace más de un año. ¿Qué debo hacer para mantener el estado de mi certificación y qué es la recertificación?** > > El equipo de calidad del ecosistema de HubSpot se comunicará contigo si tu aplicación no cumple con las normas o si debe recertificarse anualmente y te indicará qué hacer. > > Te recomendamos que revises el rendimiento de la aplicación, los requisitos de certificación, el [registro de cambios para desarrolladores](https://developers.hubspot.com/changelog) y cualquier recurso adicional de HubSpot sobre los cambios en la tecnología utilizada y cómo mantener actualizada tu aplicación. Contacta a tu **mánager de App Partners** y encuentra su información de contacto por correo iniciando sesión en tu cuenta de desarrollador y navegando a **Mercado de aplicaciones** > **Fichas**. Pasa el cursor sobre tu aplicación y haz clic en **Más** > **Ver detalles de la ficha**. *** ## Recursos relacionados [Cómo solicitar la certificación de la aplicación](https://developers.hubspot.com/docs) [Cómo publicar la ficha de tu aplicación](/docs/apps/developer-platform/list-apps/listing-your-app/listing-your-app) [Requisitos para la ficha de la aplicación](https://developers.hubspot.com/docs) [Foro de la comunidad de desarrolladores](https://community.hubspot.com/t5/APIs-Integrations/bd-p/integrations) [Ponte en contacto con el equipo de App Partners](https://www.hubspot.com/partners/app/join) # Requisitos para las fichas de la aplicaciones Source: https://developers.hubspot.es/docs/apps/developer-platform/list-apps/listing-your-app/app-marketplace-listing-requirements Los App Partners ahora pueden ver las pautas y los requisitos de HubSpot para anunciar una aplicación en el mercado de aplicaciones en un solo lugar. 'Mercado de aplicaciones | Requisitos para las fichas de aplicaciones'; 'Los App Partners ahora pueden ver las pautas y los requisitos de HubSpot para anunciar una aplicación en el mercado de aplicaciones en un solo lugar. '; El equipo de calidad del ecosistema de HubSpot revisa manualmente los envíos de fichas de aplicaciones. Estos anuncios se rechazarán si no cumplen con los criterios que se detallan a continuación. Una vez que tu aplicación cumpla con estos requisitos, puedes [crear la ficha de la aplicación](/docs/apps/developer-platform/list-apps/listing-your-app/listing-your-app) desde tu cuenta de desarrollador de aplicaciones. ## Requisitos mínimos * **Acceso:** una ficha no debe redireccionar hacia una aplicación pública o privada diferente, o requerir otra aplicación pública o privada para funcionar. * **Exclusividad:** la aplicación pública debe ser única. Si ya has publicado una aplicación y quieres reemplazarla, actualiza la aplicación existente en lugar de publicar una nueva. * **Caso de uso:** cada aplicación que crees debe dirigirse a un caso de uso distinto. Las aplicaciones con funciones similares y que utilizan las mismas API deben consolidarse en una sola aplicación. * **ID único de aplicación de HubSpot:** tu aplicación debe autorizar las solicitudes de API con el ID público de la aplicación de HubSpot (y el [ID de cliente de OAuth](/docs/apps/legacy-apps/authentication/working-with-oauth)) asociado con la ficha de la aplicación. * **OAuth:** tu aplicación debe usar OAuth como único método de autorización. Más información sobre cómo [trabajar con OAuth](/docs/apps/legacy-apps/authentication/working-with-oauth). * **Instalaciones:** tu aplicación debe tener al menos tres [instalaciones activas y únicas](https://developers.hubspot.com/docs#:~:text=Active%20installs%20are%20the%20number%20of%20unique%20HubSpot%20production%20accounts%2C%20unaffiliated%20with%20your%20organization%2C%20showing%20successful%20app%20activity%20within%20the%20past%2030%20days.). * **Permisos:** solo debes solicitar los permisos que tu aplicación necesite. Tu aplicación debe tener activada la [configuración avanzada de permisos](/docs/apps/legacy-apps/public-apps/overview#configure-scopes). Para evitar errores, se deben seleccionar todos los permisos requeridos, condicionales y opcionales. * **Términos:** debes revisar y aceptar los términos del [Acuerdo del App Partner Program de HubSpot](https://legal.hubspot.com/app-program-agreement). * **Sectores restringidos:** tu aplicación no debe adaptarse ni ofrecer funcionalidades que sirvan exclusivamente a clientes dentro de ninguna de las [sectores restringidos](https://legal.hubspot.com/acceptable-use#Restricted-Industries) de HubSpot. * **Funcionalidad restringida:** tu aplicación no puede utilizar las [tarjetas CRM clásicas](/docs/api-reference/crm-public-app-crm-cards-v3/guide), ya que desde el 16 de junio de 2025 ya no son compatibles. Más información sobre este cambio en el [registro de cambios para desarrolladores](https://community.hubspot.com/t5/Developer-Announcements/Deprecating-Support-for-Classic-Legacy-CRM-Cards/m-p/1153039#M1048). ### Requisitos de marca de HubSpot * Tu aplicación y los recursos asociados (documentación, landing pages, etc.) deben cumplir con las [pautas de branding de HubSpot](https://www.hubspot.com/partners/app/branding-guidelines). Por ejemplo, coloca la "S" de "HubSpot" en mayúscula cada vez que te refieras a HubSpot. * Tu aplicación y los recursos asociados (documentación, landing pages, etc.) no deben infringir las [pautas de uso de la marca comercial de HubSpot](https://legal.hubspot.com/tm-usage-guidelines). Por ejemplo, no combines el nombre de HubSpot (incluidos "Hub" y "HubSpot") con el nombre o logotipo de tu aplicación. ### Requisitos de las fichas Una vez que hayas alcanzado los requisitos mínimos, puedes enviar la ficha de la aplicación. Al enviar la ficha de la aplicación, debes suministrar la información completa y exacta. Estos campos son especialmente importantes, y si no cumples con estos requisitos, tu ficha se configurará en el modo borrador: * El contenido de la ficha debe ser específico para la integración, en lugar de información general del producto. Debe contener información sobre el valor que los clientes pueden esperar después de descargar y usar esta integración. Algunos ejemplos incluyen: [Aircall](https://ecosystem.hubspot.com/marketplace/apps/aircall), [CloudFiles](https://ecosystem.hubspot.com/marketplace/apps/cloudfiles), [Reveal](https://ecosystem.hubspot.com/marketplace/apps/reveal-191193). * Todas las URL de la ficha en el mercado de aplicaciones deben conducir a páginas activas, disponibles públicamente y funcionales. * Esto se verificará utilizando [las herramientas SEO de HubSpot](https://knowledge.hubspot.com/es/seo/understand-seo-crawling-errors) para rastrear las páginas asociadas a la ficha. * Para evitar retrasos innecesarios en el proceso de revisión, te recomendamos encarecidamente que trabajes con el administrador de tu sitio para añadir el agente de usuario del rastreo de *HubSpot Crawler*, a la lista de permitidos como exención antes de enviar la ficha de tu aplicación. * Un enlace a la documentación de configuración disponible públicamente específica para tu integración con HubSpot. * Revisa todos los [requisitos de la documentación de configuración](https://developers.hubspot.com/docs). Esta guía también incluye una plantilla de ejemplo que cumple todos los requisitos. * Por ejemplo, echa un vistazo a la [guía de configuración de OrgChartHub](https://orgcharthub.com/guides/setup). * Incluye una URL de instalación de botón que lleve a los clientes a una página donde puedan conectar fácilmente tu aplicación con HubSpot. * Las URL para los recursos de asistencia técnica de la aplicación (sitio web de asistencia técnica, foro de la comunidad de HubSpot, caso de éxito) deben estar activas, actualizadas y disponibles públicamente. * Las URL para los términos del servicio y la política de privacidad de la aplicación deben estar disponibles y actualizadas. * Todos los campos de URL tienen un límite de 250 caracteres. * *Los datos compartidos*, que permiten a los usuarios saber cómo fluirá la información entre tu aplicación y HubSpot, deben ser correctos, estar actualizados y reflejar los [permisos](https://developers.hubspot.com/docs#:~:text=Webhooks%20API.-,Scopes,-%3A%20You%20must) que solicita tu aplicación. * Todos los objetos seleccionados en los permisos de OAuth deben documentarse en la tabla *Datos compartidos*. * Si tu aplicación solicita permisos de objetos de lectura y escritura, la sincronización de datos debe anunciarse como bidireccional para estos objetos específicos. * La ficha en el mercado de aplicaciones debe cumplir con la siguiente información de precios: * El plan de precios de la ficha debe coincidir con la información de precios publicada en tu sitio web. * El plan de precios de la ficha solo debe incluir planes de precios que permitan el uso de tu integración en HubSpot. * Si un plan de precios no admite la integración, no debe incluirse en la ficha. * Por ejemplo, si tienes un *Plan A* y un *Plan B* para tu aplicación, pero solo el *Plan B* puede utilizarse con la integración, en la ficha solo deben incluirse los detalles del precio del *Plan B*. * Los planes gratuitos solo se deben usar para modelos que siempre serán gratuitos o Freemium. * Debes incluir al menos un método de contacto de asistencia técnica. * Sigue las pautas que se indican [aquí](https://developers.hubspot.com/docs) para proporcionar credenciales de prueba para la ficha de tu aplicación. ## Revisión, comentarios y aprobación Cuando envíes tu ficha, el equipo de calidad del ecosistema de HubSpot realizará una revisión inicial en el transcurso de 10 días hábiles. Si la información proporcionada es incorrecta, engañosa o está incompleta, te contactaremos con esos comentarios. Todo el proceso de revisión y comentarios de la aplicación no debe tardar más de 60 días desde el momento en que se comparten los comentarios. Tal como se indica en los [Términos del mercado de aplicaciones](https://legal.hubspot.com/app-program-agreement), HubSpot se reserva el derecho de cancelar o rechazar la publicación de la ficha de tu aplicación en cualquier momento. **Nota**: solo puedes enviar una aplicación a la vez para la certificación. Cualquier solicitud adicional presentada mientras se procesa la solicitud inicial será rechazada automáticamente. ## Recompensas para App Partners con fichas * Ficha dedicada para el mercado de aplicaciones de HubSpot * Acceso prioritario a la asistencia para desarrolladores mediante un alias de asistencia técnica dedicado * Recursos de la comunidad de desarrolladores, incluidos webinarios, foros y muchos más * Recursos de marketing seleccionados, incluidas las plantillas de relaciones públicas y guías de lanzamiento * Descuento en patrocinio, stands y entradas para INBOUND * Descuento en software a través del programa HubSpot for Startups para etapas iniciales * Boletín mensual con actualizaciones de marketing, lanzamientos de productos y mucho más ## Recursos relacionados * [Cómo publicar la ficha de tu aplicación](/docs/apps/developer-platform/list-apps/listing-your-app/listing-your-app) * [Requisitos de certificación de aplicación](https://developers.hubspot.com/docs) * [Documentación de referencia de API](/docs/api-reference/overview) * [Cómo usar las API de HubSpot](/docs/api-reference/overview) * [Foro de la comunidad de desarrolladores](https://community.hubspot.com/t5/APIs-Integrations/bd-p/integrations) * [Ponte en contacto con el equipo de App Partners](https://www.hubspot.com/partners/app/join) # Crear una guía de configuración de fichas de aplicaciones Source: https://developers.hubspot.es/docs/apps/developer-platform/list-apps/listing-your-app/create-an-app-listing-setup-guide # vNext Docs DP - Publicar la ficha de una aplicación Source: https://developers.hubspot.es/docs/apps/developer-platform/list-apps/listing-your-app/listing-your-app Sigue estos pasos para solicitar que publiquemos la ficha de tu aplicación en el mercado de aplicaciones de HubSpot. 'Mercado de aplicaciones | Publicar la ficha de una aplicación'; 'Sigue estos pasos para solicitar que publiquemos la ficha de tu aplicación en el mercado de aplicaciones de HubSpot.'; Después de crear una aplicación en tu cuenta de desarrollador que cumpla con los [requisitos del mercado de aplicaciones](https://developers.hubspot.com/docs), puedes enviarnos su ficha para que [la publiquemos en el mercado de aplicaciones](https://ecosystem.hubspot.com/marketplace/apps). El equipo de calidad del ecosistema de HubSpot revisará la ficha y te comunicará por correo electrónico cuando la aplicación ha sido aprobada o rechazada. Debes ser un [superadministrador](https://knowledge.hubspot.com/es/user-management/hubspot-user-permissions-guide#super-admin) para actualizar y enviar la ficha de la aplicación. ## Crear y enviar la ficha de una aplicación Antes de enviarnos la ficha de una aplicación, consulta la [página de requisitos](https://developers.hubspot.com/docs) para saber qué información incluir. * En tu [cuenta de desarrollador de aplicaciones](https://developers.hubspot.com/docs), navega a **Mercado** > **Fichas de aplicaciones**. * En la parte superior derecha, haz clic en **Crear ficha**. Si este botón está atenuado, es porque ya has creado fichas para todas tus aplicaciones. * Selecciona la **aplicación** de la que deseas crear una ficha y haz clic en **Siguiente**. Las aplicaciones que ya figuran en el mercado de aplicaciones no aparecerán aquí. * Haz clic en el menú desplegable **Selecciona el idioma principal de la ficha del \[nombre de la aplicación]** y selecciona el **idioma predeterminado** que verán los usuarios cuando naveguen por el mercado de aplicaciones. * Haz clic en **Siguiente**. El asistente de creación de la ficha tiene siete pestañas de información que rellenar. * [Información de la ficha](#listing-info) * [Detalles de la aplicación](#app-details) * [Precios](#pricing) * [Características de la aplicación](#app-features) * [Información de asistencia](#support-info) * [Información de prueba](#testing-info) * [Revisar información](#review-info) ### Información de la ficha En la pestaña *Información de la ficha*: * En la sección *Información de la aplicación*, agrega el **nombre de tu aplicación pública**, el **nombre de la empresa**, el **eslogan de la aplicación** y la **URL del botón de conexión**. Para las cuentas creadas después del 5 de marzo de 2025, tendrás que seleccionar la URL del botón instalar de las URL de redireccionamiento establecidas en [los ajustes de la aplicación](guides/apps/public-apps/overview). * En la sección *Ícono de la aplicación*, sube un ícono de 800 x 800 píxeles para representar tu aplicación. Aparecerá en el mercado de aplicaciones y en las cuentas de los usuarios conectados. Al crear el ícono: * **Debes hacer lo siguiente**: usar un archivo JPG, JPEG o PNG, rellenar todo el espacio disponible, que es 800 x 800 píxeles (la imagen debería tocar al menos dos bordes y ser una imagen de alta resolución sin pixelar). * **No debes hacer lo siguiente**: incluir texto en el ícono ni utilizar una marca denominativa ni dejar espacios en blanco adicionales alrededor del ícono. ![dev-doc-logo](https://www.hubspot.es/hubfs/Knowledge_Base_2021/dev-doc-logo.png) * En la sección *Clasifica tu aplicación*, puedes seleccionar hasta dos **categorías**. Más información sobre las [distintas categorías disponibles](https://developers.hubspot.com/docs). * También puedes configurar una **ruta de URL** y agregar **términos de búsqueda** que puedan utilizarse para encontrar la aplicación en el mercado de aplicaciones. ### Detalles de la aplicación En la pestaña *Detalles de la aplicación*: * En la sección *Video de demostración*, sube un **video** para mostrar cómo funciona tu aplicación. Consulta esta página sobre [cómo crear un gran video de demostración de aplicaciones](https://www.hubspot.com/partners/apps/resources/how-to-make-a-great-app-demo-video) para conocer las mejores prácticas y ejemplos de cómo crear un video de demostración. * En la sección *Capturas de pantalla*, agrega **imágenes** y **texto alternativo** que describa el funcionamiento de tu aplicación. Puedes agregar hasta ocho imágenes. * En la sección *Descripción de la aplicación*, ingresa un **resumen** de tu aplicación. La descripción debe incluir información sobre la funcionalidad de tu aplicación, los principales problemas empresariales que resuelve y las razones por las cuales los usuarios deberían instalarla. * Haz clic en **Agregar datos compartidos**. En la sección *Datos compartidos*, informa a los usuarios cómo circularán los datos entre tu aplicación y HubSpot. * En el panel de la derecha, selecciona qué objeto de la aplicación se sincroniza con qué objeto de HubSpot, y la dirección de la sincronización. En la sección *Descripción de la aplicación*, haz una breve **descripción** de cómo tu aplicación puede ayudar a los usuarios a conseguir sus metas. * Para agregar otra sincronización de objetos, haz clic en **Agregar otro objeto**. ![shared-data-app-listing](https://www.hubspot.es/hubfs/Knowledge_Base_2023_2024/shared-data-app-listing.png) * Haz clic en el menú desplegable **Características de HubSpot con las que tu aplicación es compatible** y selecciona las **casillas de verificación** correspondientes. Puedes agregar hasta 10 herramientas y características de HubSpot. * Haz clic en el menú desplegable **Otras herramientas con las que se integra tu software** y selecciona las **casillas de verificación** correspondientes. Puedes seleccionar hasta 6 herramientas o aplicaciones externas. * En el menú desplegable **Idiomas en los que está disponible tu aplicación**, selecciona todos los **idiomas** pertinentes. Solo puedes crear fichas adicionales en el mercado de aplicaciones en estos idiomas. ### Precios En la pestaña *Precios*: * Haz clic en el menú desplegable **Divisa** y selecciona las **casillas de verificación** correspondientes. Puedes elegir entre más de 100 monedas. * También puedes configurar los planes de precios de la aplicación agregando el **modelo**, el **nombre del plan**, el **eslogan**, los **detalles de los precios** y la **lista de características**. * Dependiendo del modelo de precios seleccionado, puede que tengas que agregar más información, como la frecuencia de pago, si hay tarifas únicas o si los precios son mensuales. Coloca el cursor sobre el **ícono de información** para consultar detalles sobre cada modelo de precios. ![DD - Precio de aplicaciones](https://www.hubspot.es/hubfs/Knowledge_Base_2023_2024/DD%20-%20App%20Pricing.png) * Para agregar planes de precios adicionales, haz clic en **Agregar otro plan**. Puedes agregar hasta 5 planes de precios. * En la sección *Crea enlaces a los planes de precios de tu software*, introduce la **URL** donde los usuarios pueden encontrar más información sobre tus planes de precios. * En la sección *Planes de precios para agencias*, introduce la **URL** donde los usuarios pueden obtener más información sobre los precios de los servicios de partner o de consultoría. ### Características de la aplicación En la pestaña *Características de la aplicación*, agrega las características y orienta a los clientes sobre cómo usarlas. No hay límite en el número de características que se pueden crear para tu aplicación. * En la parte superior derecha, haz clic en **Añadir característica**. * En la página *Detalles de las características*: * **Nombre de la característica:** ingresa el nombre de la característica. Esto debe describir lo que la característica hace. * **Grupos de permisos:** selecciona todos los grupos de permisos que un cliente necesita que tengan esta característica. Los grupos de permisos se utilizan para determinar si la cuenta de HubSpot del cliente es compatible con las características de la aplicación. * **Descripción:** incluye una descripción detallada sobre la característica y cómo puede ayudar a resolver los problemas empresariales de un cliente. * **Imagen:** agrega una imagen para la característica. Después de agregar una imagen, selecciona dónde quieres que muestre, **en la ficha de la aplicación** o **en la tarjeta de descubrimiento de características**. * Si prefieres mostrar la característica como una tarjeta de descubrimiento: * Selecciona una opción para el botón principal: * **Enlazar a una característica:** selecciona a qué característica de HubSpot debe enlazar el botón. * **Crear personalizado**: incluye **el texto del botón** y la **URL del botón**. * **Sin botón principal:** ningún botón se mostrará en la tarjeta de descubrimiento de características. * Selecciona una guía práctica para incorporar a tus clientes: * **Crear una guía desde cero:** introduce un **título**, una **descripción** y una **imagen o un video**. * **Enlace externo a la guía:** introduce la **URL de la guía**. * **Guía solo de video:** sube un **video**. * Para agregar otra guía, haz clic en **Agregar otra sección**. ![](https://www.hubspot.es/hubfs/image-png-Dec-13-2024-10-32-55-1239-AM.png) ### Información de asistencia Haz clic en la pestaña *Información de asistencia*: * En la sección *Información de contacto*, agrega un método de contacto de asistencia para los usuarios que tengan preguntas al utilizar tu aplicación. Es necesario que agregues un **correo electrónico de asistencia** y los **idiomas** en los que el servicio de asistencia al cliente está disponible. También puedes incluir enlaces al sitio web de tu empresa, al live chat, a la página de Facebook y a un número de teléfono. * En la sección *Recursos de asistencia*, incluye **enlaces** a la documentación de configuración de la aplicación. * En la sección *Términos del servicio y política de privacidad*, agrega **enlaces** a tu documentación sobre privacidad. ### Información de prueba En la pestaña *Información de prueba*: * En el campo *Instrucciones para la revisión de la aplicación*, ingresa las indicaciones para que los desarrolladores de HubSpot prueben la aplicación como parte del proceso de revisión. Más información sobre como [Proporcionar los detalles y las credenciales de prueba para tu aplicación](https://developers.hubspot.com/docs). * En la sección de *Puntos de contacto del App Partner Program*, añade detalles para que los miembros de tu equipo reciban información técnica y del programa sobre tu aplicación. * Debes incluir al menos un *Punto de contacto principal del App Partner Program* y un *desarrollador* para contactar. Debes incluir el **rol de la persona**, el **nombre** y **apellido**, el **correo electrónico** y el **país** de residencia. * Para agregar otra persona como punto de contacto, en la parte inferior, haz clic en **Agregar otro punto de contacto**. ### Revisar información En la pestaña *Revisar información*: En la sección *Revisar aplicación* aparecerá una lista de todos los errores existentes: * Para revisar los detalles de todos los errores de la ficha, en la parte superior, haz clic en **Abrir todos**. * Para ocultar los detalles de todos los errores de la ficha, en la parte superior, haz clic en **Contraer todos**. * Para resolver un error, haz clic en el **nombre del error**. Esto te dirigirá a la pestaña y la sección para resolver el error. ![](https://www.hubspot.es/hubfs/image-png-Dec-13-2024-11-25-02-2139-AM.png) * Si el botón *Validar y enviar* está atenuado, comprueba que hayas completado todos los campos obligatorios y que tengas permisos de *superadministrador*. * Si has omitido algún campo obligatorio, verás un número en el encabezado de la pestaña que indica el número de campos omitidos. Haz clic en cada **pestaña** para introducir la información que falta, luego vuelve a la pestaña *Revisar información*. * En la parte inferior, haz clic en **Ejecutar validación**. ![](https://www.hubspot.es/hubfs/image-png-Dec-13-2024-11-31-19-4860-AM.png) ## Crear y actualizar la versión localizada de la ficha de una aplicación que ya está en el mercado Para crear fichas en otros idiomas, tendrás que definir un idioma principal en la ficha actual de la aplicación y publicarla en ese idioma en el mercado de HubSpot. * En tu cuenta de desarrollador de aplicaciones, haz clic en **Mercado de aplicaciones** > **Fichas**. * Si ya tienes una aplicación en el mercado, verás un banner amarillo encima de la aplicación, que te pedirá que definas el idioma principal de la ficha. Haz clic en **Configurarlo ahora**. Tendrás que definir el idioma principal de la ficha de la aplicación antes de poder crear fichas en otros idiomas. * En el cuadro de diálogo, haz clic en el menú desplegable **Selecciona los idiomas en los que está disponible tu aplicación** y selecciona los **idiomas** pertinentes. * Haz clic en el menú desplegable \*\*Selecciona el idioma principal de la ficha del \[nombre de la aplicación]\*\*y selecciona el **idioma predeterminado** que verán los usuarios cuando naveguen por el mercado de aplicaciones. * Haz clic **Guardar.** Una vez que hayas definido un idioma principal, podrás agregar una ficha en otro idioma: * Coloca el cursor sobre la **ficha de la aplicación** y haz clic en **Más** > **Crear ficha en otro idioma**. * Si quieres traducir la ficha a otros idiomas automáticamente, haz clic para activar el interruptor de **Traducción automática**. * Si seleccionaste esta opción, las fichas traducidas se publicarán automáticamente e inmediatamente en el mercado. Las traducciones automáticas de fichas se saltarán la revisión del administrador. * Haz clic en el menú desplegable **Idioma de esta ficha** y selecciona el **idioma** en el que quieres crearla. * Cuando un usuario haya configurado el idioma en su cuenta, verá automáticamente la ficha en ese mismo idioma. Por ejemplo, si has creado una ficha en español y un usuario ha configurado el español como [idioma predeterminado en su cuenta](https://knowledge.hubspot.com/es/account-management/change-your-language-and-region-settings), la ficha le aparecerá en español. * Si se ha activado la opción *Traducción automática*, los idiomas seleccionados se traducirán y se publicarán automáticamente como fichas nuevas. * Haz clic en **Crear**. Si estás creando la ficha manualmente, sigue los pasos para crear y enviar una ficha en el idioma seleccionado. ## Editar la ficha publicada de una aplicación Una vez que la ficha de una aplicación está publicada en el mercado de aplicaciones, debes hacer lo siguiente para editarla: * En tu cuenta de desarrollador, navega a **Mercado** > **Fichas de aplicaciones**. * Coloca el cursor sobre la ficha que deseas editar y haz clic en **Más**. A continuación, selecciona **Editar**. * Después de aplicar los cambios, en la parte superior derecha, haz clic en **Validar y enviar**. * En el cuadro de diálogo, lee los términos y condiciones y, a continuación, selecciona las **casillas de verificación**. * Para traducir automáticamente cualquier cambio en las fichas localizables, selecciona la casilla de verificación **Traducir automáticamente todas mis fichas localizables compatibles**. Pasa el cursor por encima de la opción *mis fichas localizables compatibles* para ver qué fichas se traducirán automáticamente. * Clic **Aceptar y enviar**. ![supported localizable listings visible in the dialog box by hovering](https://www.hubspot.es/hubfs/Knowledge_Base_2023-24-25/view-supported-localizable-listings.png) ## Dejar de publicar una ficha de una aplicación * En tu cuenta de desarrollador, navega a **Mercado** > **Fichas de aplicaciones**. * Coloca el cursor sobre la ficha que quieres retirar y haz clic en **Más**. Luego, selecciona **Dejar de publicar ficha**. * En el cuadro de diálogo, escribe el motivo y haz clic en **Solicitar que deje de publicarse**. Estas solicitudes serán procesadas por el equipo del mercado de HubSpot en los 10 días hábiles posteriores al envío. # Mercado de aplicaciones | Categorías de las aplicaciones Source: https://developers.hubspot.es/docs/apps/developer-platform/list-apps/listing-your-app/understand-app-categories # Configura la programación para demostraciones desde la página de índice de la aplicación Source: https://developers.hubspot.es/docs/apps/developer-platform/list-apps/set-up-demo-scheduling-from-the-app-listing-page Encuentra más información sobre cómo permitir que los contactos envíen un formulario o programen una reunión desde la página de índice de tu aplicación. Cuando configures la página de índice de tu aplicación, puedes añadir una página de programación o un formulario para que los clientes potenciales puedan programar una demostración. ## Añadir una página de programación o un formulario a la ficha de una aplicación * En tu cuenta de desarrollador, navega a **Mercado** > **Fichas de aplicaciones**. * Pasa el cursor encima de una ficha y haz clic en **Más**, luego selecciona **Editar**. Más información sobre cómo [crear una ficha de aplicaciones](/docs/apps/developer-platform/list-apps/listing-your-app). * En la pestaña *Información de la ficha*, añade opciones para programar una demostración: * Para añadir un enlace de reuniones, haz clic en el menú desplegable **Añadir URL de reuniones** y selecciona una **página de programación**. Para crear una nueva página de programación, haz clic en **Crear un enlace para reuniones**. Más información sobre cómo crear [páginas de programación de reuniones](https://knowledge.hubspot.com/meetings-tool/create-and-edit-scheduling-pages). * Para añadir un formulario, haz clic en el menú desplegable **Añadir formulario de contacto** y selecciona un **formulario**. Para crear un nuevo formulario, haz clic en **crear un formulario de contacto** Más información sobre cómo [usar los formularios de contacto](https://knowledge.hubspot.com/forms/create-and-edit-forms). ![Configura tus opciones de programación de reuniones para demostraciones](https://www.hubspot.com/hubfs/Knowledge_Base_2023-24-25/add-meeting-or-form-to-app-listing.png) * En la parte superior derecha, haz clic en **Validar y enviar**. Una vez aprobados los cambios, tus clientes verán una opción en la parte superior derecha de la ficha de tu aplicación para programar una demostración o solicitar que se pongan en contacto contigo. Si has añadido una página de programación y un formulario de contacto, ambas opciones estarán disponibles en el menú desplegable *Programar demostración*. ![Menú desplegable en la ficha de la aplicación para programar demostraciones](https://www.hubspot.com/hubfs/Knowledge_Base_2023-24-25/schedule-demo-on-app-listing.png) # Mercado de aplicaciones | Proporcionar credenciales de prueba para una aplicación Source: https://developers.hubspot.es/docs/apps/developer-platform/list-apps/testing-credentials # Ver contactos creados desde el mercado de aplicaciones Source: https://developers.hubspot.es/docs/apps/developer-platform/list-apps/view-contacts-created-from-the-marketplace Encuentra más información sobre cómo acceder a una lista de contactos que han interactuado con tus fichas de aplicación. Cuando los contactos interactúan con la ficha de tu aplicación en el mercado de aplicaciones, se añaden automáticamente a una lista específica en la cuenta de desarrollador asociada. A partir de ahí, puedes ponerte en contacto con ellos para evaluar si la aplicación se ajusta a sus necesidades. ## Antes de comenzar Antes de comenzar a usar esta función, asegúrate de comprender bien los pasos previos que debes seguir, así como sus limitaciones. ### Comprender los requisitos * La cuenta de desarrollador asociada a la aplicación debe utilizar las herramientas gratuitas de HubSpot. * Los contactos aparecerán en la lista cuando realicen una de las siguientes acciones en la ficha de tu aplicación: * Hacer clic en un video o en una captura de pantalla. * Hacer clic en "Ver la guía de configuración". * Hacer clic en "Sitio web de la empresa". ### Comprender las limitaciones y consideraciones * Solo se añadirán a la lista los contactos que hayan iniciado sesión en HubSpot cuando accedan a la ficha de aplicaciones. ## Acceder al listado de contactos de la aplicación * En la cuenta de desarrollador de HubSpot asociada a tu aplicación, dirígete a **CRM** > **Listas**. * Haz clic en la **lista** llamada "Mercado de aplicaciones - \[Nombre de la aplicación]". Si tienes varias aplicaciones, cada una de ellas tendrá una lista distinta. ![Revisa la lista de los contactos que han interactuado con la ficha de tu aplicación](https://www.hubspot.com/hubfs/Knowledge_Base_2023-24-25/review-leads-from-marketplace-listing.png) * Puedes ver la siguiente información de los contactos: * Nombre * Apellido * Empresa * Correo electrónico # Especificar las áreas de arrastrar y soltar en una plantilla de correo electrónico personalizada Source: https://developers.hubspot.es/docs/cms/start-building/building-blocks/drag-and-drop/custom-email-template Obtén más información sobre cómo especificar las áreas de arrastrar y soltar en una plantilla de correo personalizada > **Productos compatibles** Las [áreas de arrastrar y soltar](https://developers.hubspot.es/docs/cms/start-building/building-blocks/drag-and-drop/overview) permiten a los desarrolladores crear secciones en las plantillas de correo personalizadas que admiten cambios en la disposición de los elementos, el diseño y el contenido directamente en el editor del correo. Esto permite a los desarrolladores crear unas pocas plantillas de correo con una estructura global, facilitando a los creadores de contenido la generación de múltiples páginas con distintos propósitos y diseños. > [!WARNING] > > **Nota:** Las plantillas de correo personalizadas solo pueden tener un área de arrastrar y soltar. **1. Crear una nueva plantilla HTML** Crea una nueva plantilla HTML que incluya el HubL y el HTML que conformarán la sección de arrastrar y soltar: * En tu cuenta de HubSpot, navega a **Contenido** > **Administrador de diseño**. * En la barra lateral izquierda, crea un nuevo archivo haciendo clic en **Archivo** > **Nuevo archivo**. * En el cuadro de diálogo, haz clic en el menú desplegable **¿Qué te gustaría diseñar?** y selecciona **HTML y HubL**. * Haz clic en **Siguiente**. * Haz clic en el menú desplegable **Tipo de plantilla** y luego selecciona **Correo**. * Escribe el **nombre** de la plantilla. * Para cambiar la ubicación de la plantilla, haz clic en **Cambiar** en *Ubicación del archivo*, y selecciona la nueva carpeta donde se creará la plantilla. * Haz clic en **Crear**. **2. Añadir etiquetas HubL al encabezado de la plantilla** Revisa las siguientes etiquetas necesarias y opcionales que puedes incluir en la sección `` de tu plantilla de correo para agregar elementos de diseño y mejorar la compatibilidad: ### Etiqueta necesaria `{{ dnd_area_stylesheet }}` Esta etiqueta permite lo siguiente: * Añadir recursos audiovisuales asociados * Corregir problemas de diseño conocidos en Outlook * Restablecer los márgenes y los rellenos * Activar el Anti-aliasing * Añadir algo de CSS ### Etiquetas opcionales Para asegurarte de que la plantilla se muestra de forma consistente en los principales clientes de correo electrónico, también puedes incluir las siguientes etiquetas opcionales de HubL en la plantilla: * `{{ email_header_includes }}`: esta etiqueta insertará CSS en la plantilla, lo que facilita la renderización del diseño, la resolución de problemas comunes de estilo y la incorporación de metadatos al HTML del correo. Al analizar esta etiqueta HubL, el siguiente contenido se añadirá dentro del `` del HTML del correo electrónico: | Parámetro | Descripción | | - | - | | `` | Evitar que el iOS 11 modifique la escala de los correos de manera automática | | `` | Indica a los navegadores y clientes de correo la forma en que se espera que interpreten los distintos caracteres. | | `` | Esta etiqueta habilita CSS3 y las solicitudes de recursos audiovisuales en Windows Phone 7.5, indica a Internet Explorer que renderice el contenido con la mayor calidad posible y permite al navegador elegir la versión de Internet Explorer con la que se debe renderizar el correo. | | `` | Ajusta el área visible a la anchura de la pantalla del dispositivo, lo que facilita la recepción del correo. | * `{{ reset_css_stylesheet }}`: incluir esta etiqueta solucionará varios problemas de diseño en Outlook, y también restablecerá los márgenes y rellenos del correo. -`{{ outlook_background_snippet }}`: esta etiqueta ajustará la imagen o el color de fondo en Outlook, siempre que se haya especificado una regla CSS de fondo asociada **3. Crear un área de arrastrar y soltar** Después de añadir la etiqueta HubL `{{ dnd_area_stylesheet }}` y cualquier otra etiqueta opcional a la sección `` de la plantilla, puedes configurar la sección `dnd_area` en el cuerpo de la plantilla. ### Crear un área vacía de arrastrar y soltar La sección `dnd_area` es lo que hace que una parte de la página web sea editable en cuanto a su estructura, diseño y contenido. El cuerpo de una etiqueta `dnd_area` suministra el contenido predeterminado para el área de arrastrar y soltar. El área de arrastrar y soltar puede estar entre las etiquetas `
` o ``. Una limitación del área de arrastrar y soltar es que la anchura mínima es de 624 píxeles y este valor no se puede cambiar. La etiqueta por sí sola generará una zona para que los creadores de contenido arrastren los módulos en el editor. Las líneas de código a continuación especificarían un área de arrastrar y soltar vacía: ```hubl theme={null} {% dnd_area "main" %} {% end_dnd_area %} ``` ### Crear un área de arrastrar y soltar También puedes personalizar el área de arrastrar y soltar para especificar secciones y columnas predeterminadas utilizando los campos `dnd_section` y `dnd_column`. Por ejemplo, el siguiente código HubL especificaría un área de arrastrar y soltar con 3 columnas: ```hubl theme={null} {% dnd_area "main" %} {% dnd_section padding={'top': 25, 'bottom': '20} %} {% dnd_column width=4 %} {% end_dnd_column %} {% dnd_column width=4 %} {% end_dnd_column %} {% dnd_column width=4 %} {% end_dnd_column %} {% end_dnd_section %} {% end_dnd_area %} ``` > [!WARNING] > > La etiqueta HubL `dnd_row` no es compatible actualmente con las plantillas de correo. **4. Añadir un área de arrastrar y soltar con módulos** Para rellenar la sección con contenido, se puede utilizar la etiqueta `dnd_module` para incluir un módulo haciendo referencia a su ruta. El módulo debe añadirse dentro de una sección y una columna para rellenar el área de arrastrar y soltar con contenido. En el siguiente ejemplo, se hace referencia a un módulo predeterminado de HubSpot, pero también es posible incluir módulos que hayas creado, especificando su ruta en el árbol de archivos de tus herramientas de diseño. Para especificar un valor predeterminado en el `dnd_module`, puedes utilizar la etiqueta `module_attribute`. ```hubl theme={null} {% dnd_area "main", full_width=False %} {% dnd_section padding={ 'top':'25', 'bottom':'20' }, full_width=False %} {% dnd_column width=6 %} {% dnd_module path='@hubspot/image_email', img={ 'alt':'NavyLogo', 'height':38, 'src':'email_dnd_template_images/NavyLogo.png', 'width':120 }, alignment='center', hs_enable_module_padding=True, hs_wrapper_css={ 'padding-bottom':'10px', 'padding-left':'20px', 'padding-right':'20px', 'padding-top':'10px' } %} {% end_dnd_module %} {% end_dnd_column %} {% dnd_column width=6 %} {% end_dnd_column %} {% end_dnd_section %} {% end_dnd_area %} ``` **5. Personaliza y crea el diseño de la plantilla de arrastrar y soltar** Cada etiqueta HubL de arrastrar y soltar (por ejemplo, `dnd_area`, `dnd_section`, `dnd_column`, etc.) incluye diferentes parámetros que puedes utilizar para definir un diseño predeterminado y especificar otros tipos de comportamientos, como la etiqueta que aparecerá en la barra lateral del editor de correo. Para saber más sobre los parámetros disponibles para cada etiqueta, consulta los enlaces que aparecen a continuación para cada una: * [dnd\_area](/docs/cms/reference/hubl/tags/dnd-areas#dnd-area) * [dnd\_section](/docs/cms/reference/hubl/tags/dnd-areas#dnd-section) * [dnd\_column](/docs/cms/reference/hubl/tags/dnd-areas#dnd-column) * [dnd\_module](/docs/cms/reference/hubl/tags/dnd-areas#dnd-module) # Plantillas de arrastrar y soltar Source: https://developers.hubspot.es/docs/cms/start-building/building-blocks/drag-and-drop/drag-and-drop-templates Las plantillas de arrastrar y soltar en el administrador de diseño son plantillas creadas con un visualizador de eventos. No se recomiendan para las plantillas nuevas, ya que las plantillas codificadas brindan una mejor experiencia. > **Productos compatibles** > [!WARNING] > > **No se recomiendan las plantillas de arrastrar y soltar para las nuevas plantillas.** Estas plantillas no pueden ser parte de un tema, por lo que no son compatibles con la funcionalidad del tema, como los campos y los módulos del tema. Las plantillas de arrastrar y soltar **NOT** son compatibles con CMS Hub Starter. Usa `dnd_area` en su lugar. Las plantillas de arrastrar y soltar no admiten varias de las características más nuevas del CMS ([membresías](/docs/cms/start-building/features/memberships/overview), áreas de [arrastrar y soltar](https://developers.hubspot.es/docs/cms/start-building/building-blocks/drag-and-drop/overview), [secciones reutilizables](/docs/cms/start-building/building-blocks/sections/sections), GraphQL y muchas otras características). Carecen de extensibilidad y no proporcionan una experiencia tan buena para los creadores de contenido y desarrolladores como las plantillas codificadas. En su lugar, recomendamos usar las plantillas codificadas [HTML + HubL](/docs/cms/start-building/building-blocks/templates/html-hubl-templates) con [áreas de arrastrar y soltar](https://developers.hubspot.es/docs/cms/start-building/building-blocks/drag-and-drop/overview), que ofrecen una mejor experiencia para desarrolladores y profesionales de marketing. Para un inicio rápido en el CMS, recomendamos consultar la [biblioteca de temas de HubSpot,](https://github.com/HubSpot/cms-theme-boilerplate) que se ha creado utilizando plantillas codificadas. Las [plantillas](https://developers.hubspot.es/docs/cms/start-building/building-blocks/templates/overview) de arrastrar y soltar fueron diseñadas para que los usuarios menos técnicos puedan crear fácilmente un sitio web en el CMS de HubSpot. Las plantillas de arrastrar y soltar aprovechan un creador visual de plantillas, que genera HTML + HubL en segundo plano. Con el fin de hacer que el creador visual funcione, la salida en HTML es controlada por HubSpot y no tienes control directo sobre las partes estructurales de la misma. Además, **se carga un archivo layout.css en la página para una cuadrícula de 12 columnas básicas** basada en Bootstrap 2. Esto hace que todos los sitios creados con plantillas de arrastrar y soltar respondan por opción predeterminada, lo que hace que las filas de contenido se apilen verticalmente. Para lograr una respuesta más avanzada y personalizada, deberás agregar tus propios estilos de respuesta. Las plantillas de arrastrar y soltar se crean en el administrador de diseño y, al interactuar con ellas a través de la API o las [herramientas de desarrollo local](/docs/developer-tooling/local-development/hubspot-cli/install-the-cli) se representan en formato JSON. Debido a la estructura de las plantillas de arrastrar y soltar, la única forma recomendada para editarlas es a través de la interfaz del administrador de diseño. **Si prefieres usar código, puedes usar el control de versiones o simplemente editar usando tus herramientas preferidas de forma local, las plantillas codificadas HTML + HubL ofrecen la mejor experiencia para los desarrolladores.** La funcionalidad [dnd\_area](/docs/cms/reference/hubl/tags/dnd-areas) de las plantillas HTML + HubL también proporciona una mejor experiencia para los creadores de contenido que la interfaz de arrastrar y soltar del administrador de diseño, ya que se mantiene en el editor de contenido visual. ## Creador de plantillas de arrastrar y soltar Para crear una plantilla de arrastrar y soltar, abre el administrador de diseño y, en el buscador, crea un nuevo archivo, elige una plantilla y el [tipo de plantilla](https://developers.hubspot.es/docs/cms/start-building/building-blocks/templates/overview#template-types) que estás creando. Las plantillas de arrastrar y soltar se componen de bloques de creación, estos bloques son módulos, grupos, grupos globales y columnas flexibles. [Aprende cómo usar el creador de plantillas de arrastrar y soltar](https://knowledge.hubspot.com/es/design-manager/structure-and-customize-template-layouts). ### Módulos Los módulos son componentes reutilizables que son partes editables de una página. Los módulos se componen de un fragmento de plantilla HTML + HubL, CSS, JS y campos. Los módulos pueden colocarse dentro de columnas flexibles y dnd\_areas para ser gestionados por los editores de contenido, siendo la principal forma en que administran el contenido de su sitio web. Puedes crear módulos para manejar cualquier número de funciones, búsquedas, galerías de imágenes, menús, animaciones de marketing complejas, calculadoras, comparaciones de productos, etc. Las posibilidades dependen de ti y de lo que crees que podría ser una buena experiencia de uso para los creadores de contenido. Los campos son la manera en que el editor de contenido controla el resultado. Los módulos no son únicos para las plantillas de arrastrar y soltar, son un bloque de creación central muy importante para el CMS de HubSpot. En las plantillas de arrastrar y soltar, los valores predeterminados para los campos del módulo se pueden configurar en el [inspector](https://knowledge.hubspot.com/es/design-manager/a-quick-tour-of-the-design-manager). [Más información sobre los módulos](https://developers.hubspot.es/docs/cms/start-building/building-blocks/modules/overview) ![Interfaz de Administrador de diseño con módulos resaltados](https://cdn2.hubspot.net/hubfs/53/image2-3.png) ### Grupos Los grupos son contenedores para otros grupos y módulos, pueden tener clases CSS y estructura HTML. Los grupos se manifiestan como estructuras HTML con clases de diseño para facilitar la colocación y el tamaño de los grupos. Los grupos también pueden tener un nombre interno. Con esto, puedes [agrupar los módulos](https://knowledge.hubspot.com/es/design-manager/structure-and-customize-template-layouts#group-modules) en el administrador de diseño, lo que facilita la identificación visual de las partes de una página. Un ejemplo de uso podría ser para barras laterales o banners. > [!WARNING] > > Dado que los archivos [HTML + HubL](/docs/cms/start-building/building-blocks/templates/html-hubl-templates) son la opción recomendada para los nuevos sitios, columnas, secciones y filas de las [áreas de arrastrar y soltar](https://developers.hubspot.es/docs/cms/start-building/building-blocks/drag-and-drop/overview) reemplazan en gran medida las funciones de los grupos. > > Además, un desarrollador puede crear parciales y [parciales globales](/docs/cms/start-building/building-blocks/global-content), los cuales pueden contener código libre además de áreas de arrastrar y soltar. > > Las áreas de arrastrar y soltar, los parciales y los parciales globales no son compatibles con las plantillas de arrastrar y soltar. ![Captura de pantalla del Administrador de diseño con el grupo de barras laterales seleccionado](https://designers.hubspot.com/hubfs/image4-1.png) ### Grupos globales Los grupos globales son grupos que cuando se editan modifican todo el sitio web y no solo a la página en la que se encuentran. Los grupos globales pueden existir en múltiples plantillas y se utilizan con mayor frecuencia para encabezados y pies de página de sitios. Los grupos globales son similares a los parciales, pero se limitan a la estructura que aplican las plantillas de arrastrar y soltar. Se pueden insentar en archivos HTML + HubL si es necesario, pero, en la mayoría de los casos, es más recomendable utilizar un parcial global. ![Interfaz de Administrador de diseño con grupos globales de encabezado y pie de página resaltados](https://cdn2.hubspot.net/hubfs/53/image1-3.png) ### Columnas flexibles Las columnas flexibles son un tipo especial de grupo. Pueden contener un conjunto predeterminado de módulos, pero los editores de contenido pueden agregar, eliminar y mover módulos dentro de ellas. Las columnas flexibles permiten reordenar los módulos de una manera unidimensional, verticalmente hacia arriba y hacia abajo. [A diferencia de las etiquetas dnd\_area](https://developers.hubspot.es/docs/cms/start-building/building-blocks/drag-and-drop/overview), \*\*las columnas flexibles no admiten secciones ni las opciones de diseño disponibles para los módulos dentro de ellas..\*\*Las columnas flexibles no son exclusivas para las plantillas de arrastrar y soltar, hay una [etiqueta HubL](/docs/cms/reference/hubl/tags/standard-tags#flexible-column) que se puede usar en plantillas [HTML + HubL](/docs/cms/start-building/building-blocks/templates/html-hubl-templates). [Aprende cómo agregar una columna flexible a una plantilla de arrastrar y soltar](https://knowledge.hubspot.com/es/design-manager/structure-and-customize-template-layouts#add-a-flexible-column). > [!TIP] > > En general, se recomienda usar las áreas de arrastrar y soltar, ya que la mayoría de las veces son más útiles y proporcionan todas las capacidades que proporcionan las columnas flexibles. > > Todavía puede haber casos útiles para utilizar una columna flexible, como en una barra lateral. Las áreas de arrastrar y soltar son mucho más flexibles para las áreas de contenido principal. ![Captura de pantalla del Administrador de diseño con el grupo de contenido principal seleccionado](https://designers.hubspot.com/hubfs/image3-2.png) El uso de columnas flexibles permite adaptarse a la naturaleza cambiante de los sitios web, que suelen evolucionar y mantenerse a lo largo del tiempo. Por ejemplo, una página de inicio de una empresa puede mostrar sus productos destacados y, con frecuencia, puede cambiar según las necesidades del negocio. Como los editores de contenido pueden agregar, eliminar y modificar elementos dentro de una columna flexible, el proceso se vuelve más ágil para los equipos de marketing y permite que los desarrolladores se concentren en lo que realmente disfrutan: crear experiencias innovadoras en lugar de hacer ajustes menores en las páginas. Del mismo modo, las páginas en un sitio pueden tener diferentes necesidades estructurales. Las columnas flexibles dan a los profesionales de marketing el control para crear esas páginas utilizando módulos personalizados. ### Agregar código personalizado a tus plantillas de arrastrar y soltar Hay múltiples formas de agregar código personalizado a tus plantillas de arrastrar y soltar. El método principal es a través de los módulos personalizados. Sin embargo, en algunos casos puede ser necesario agregar código que contenga los módulos o grupos. Para ello, haz clic en el módulo o grupo para verlo en el inspector y encontrar el campo con la estructura HTML. Agrega tu HTML. En algunos casos puede que debas agregar código al encabezado de tu HTML o código justo encima del ``. Con la plantilla abierta, asegúrate de no tener nada seleccionado. El inspector mostrará los campos para la plantilla en sí. Aquí puedes vincular hojas de estilo y JavaScript, además de agregar HTML adicional en la sección del encabezado o justo antes de la etiqueta ``. Para esto usarás el [inspector](https://knowledge.hubspot.com/es/design-manager/a-quick-tour-of-the-design-manager). El inspector tiene campos en el nivel de la plantilla para las [hojas de estilo, JavaScript](https://knowledge.hubspot.com/es/design-manager/a-quick-tour-of-the-design-manager##attach-stylesheets-and-javascript-files), [`` marcado](https://knowledge.hubspot.com/es/design-manager/a-quick-tour-of-the-design-manager#customize-your-template-s-head-and-body-options), etc. ![panel de inspectores de código personalizado de Administrador de diseño](https://designers.hubspot.com/hubfs/image5.png) # Resumen de las áreas de arrastrar y soltar Source: https://developers.hubspot.es/docs/cms/start-building/building-blocks/drag-and-drop/overview Las áreas de arrastrar y soltar permiten a los creadores de contenido colocar módulos, cambiar el diseño y algunos estilos dentro de los editores de contenido. Los desarrolladores crean diseños predefinidos. Las áreas de arrastrar y soltar te permiten crear áreas de páginas y parciales globales donde los creadores de contenido pueden colocar módulos, cambiar el diseño y añadir el estilo dentro del editor de contenido. Al utilizar las áreas de arrastrar y soltar, puedes crear menos plantillas, ya que los creadores de contenidos pueden crear diseños por su cuenta. A continuación, obtén más información sobre la experiencia y los conceptos de `dnd_area`. Una vez tengas todo listo para comenzar a crear, consulta la guióa de los [primeros pasos para usar dnd\_area](/docs/cms/start-building/building-blocks/drag-and-drop/tutorial), y la [referencia de dnd\_area](https://developers.hubspot.es/docs/cms/reference/hubl/tags/dnd-areas). > [!WARNING] > > ### Nota: > > Las áreas de arrastrar y soltar no se pueden utilizar en [publicaciones de blog](/docs/cms/start-building/building-blocks/templates/blog) ni [plantillas de correo electrónico](/docs/cms/start-building/building-blocks/templates/overview#email). ## La experiencia para los creadores de contenido Cuando los creadores de contenido crean una página utilizando una plantilla que tiene áreas de arrastrar y soltar, primero ven la página con los módulos predefinidos en el diseño que hayas definido como desarrollador. Este diseño inicial configura el aspecto que tendrán las páginas que utilicen esta plantilla. Utilizando las áreas de arrastrar y soltar, los creadores de contenidos pueden crear la página, incluyendo: * Añadir módulos, secciones, filas y columnas. * Cambiar el tamaño de los módulos y actualizar su contenido y estilo, como ajustar la alineación y añadir fondos. Esto les brinda la flexibilidad suficiente para realizar cambios simples en la página sin necesitar de un desarrollador para ajustes menores. > [!WARNING] > > ### Nota: > > Los creadores de contenido pueden cambiar la plantilla de una página por otra del mismo tipo, dependiendo de si tiene las etiquetas [dnd\_area](https://developers.hubspot.es/docs/cms/reference/hubl/tags/dnd-areas). > > Las plantillas creadas con el editor de diseño visual de arrastrar y soltar pueden cambiarse por otras plantillas de arrastrar y soltar o plantillas codificadas con o sin etiquetas `dnd_area`. > > * Las plantillas codificadas con etiquetas *dnd\_area* solo pueden cambiarse por otras plantillas codificadas con etiquetas `dnd_area`. > * Las plantillas codificadas sin etiquetas `dnd_area` solo pueden cambiarse por otras plantillas codificadas sin etiquetas `dnd_area`. > > Cuando se cambia la plantilla de la página, todo el contenido que se hubiera añadido a las áreas de arrastrar y soltar de la primera plantilla se mantendrá. ![La experiencia del editor de páginas para dnd\_areas](https://cdn2.hubspot.net/hubfs/53/drag-and-drop.gif) ## La experiencia para los desarrolladores Desarrollar con áreas de arrastrar y soltar es similar a trabajar con marcos comunes de CSS y sus cuadrículas. Primero, diseñas la página utilizando contenedores llamados [secciones](/docs/cms/start-building/building-blocks/sections/sections), que contienen filas. Dentro de esas filas hay módulos y columnas. Obtén más información [elementos](#drag-and-drop-area-elements) a continuación. Aunque podrías codificar casi todo en la plantilla, el objetivo de desarrollar con áreas de arrastrar y soltar es que establezcas un contenido predeterminado en la página, que luego podrá ser editado por un creador de contenido. Consulta la [biblioteca de plantillas del CMS HubSpot](https://github.com/HubSpot/cms-theme-boilerplate/tree/main/src/templates) para ver las etiquetas `dnd_area` en uso. ![dnd\_area codificado en VS Code](https://cdn2.hubspot.net/hubfs/53/dnd%20coded.png) ## Elementos de las áreas de arrastrar y soltar Cuando crees una página con áreas de arrastrar y soltar, debes incluir los siguientes elementos: * [**dnd\_area**](https://developers.hubspot.es/docs/cms/reference/hubl/tags/dnd-areas#dnd-area)**:** el elemento de arrastrar y soltar de nivel más alto que permite arrastrar y soltar módulos en el editor de contenidos. No puedes anidar áreas de arrastrar y soltar. Por ejemplo, un `dnd_section` no puede contener una etiqueta `dnd_area`. * [**dnd\_section**](https://developers.hubspot.es/docs/cms/reference/hubl/tags/dnd-areas#dnd-section)**:** el contenedor más externo en un `dnd_area`. Puede contener `dnd_row`, `dnd_column`, y `dnd_module`. No puedes anidar un `dnd_section` dentro de otros elementos de arrastrar y soltar. * [**dnd\_column**](https://developers.hubspot.es/docs/cms/reference/hubl/tags/dnd-areas#dnd-column)**:** puede contener `dnd_row`. Varias columnas dentro de un `dnd_row` alinearán horizontalmente el contenido de la fila. * [dnd\_row](https://developers.hubspot.es/docs/cms/reference/hubl/tags/dnd-areas#dnd-row)**:** puede contener `dnd_module` y `dnd_column`. * [dnd\_module](https://developers.hubspot.es/docs/cms/reference/hubl/tags/dnd-areas#dnd-module)**:** un contenedor de módulo en el que se pueden agregar el diseño, los estilos y el contenido del módulo. Obtén más información sobre cada una de estas etiquetas a continuación. Además, puedes consultar la [guía de introducción a las áreas de arrastrar y soltar](/docs/cms/start-building/building-blocks/drag-and-drop/tutorial) para tener un enfoque práctico. ![Relaciones de los elementos de arrastrar y soltar](https://www.hubspot.es/hubfs/Drag%20and%20Drop%20relationships.png) El siguiente diagrama desglosa aún más la jerarquía de los distintos elementos de arrastrar y soltar. ![Ejemplo de estructura](https://cdn2.hubspot.net/hubfs/53/Example%20structure.png) Para ver una demostración en video sobre cómo visualizar las áreas de arrastrar y soltar, consulta el siguiente video: [https://www.youtube.com/embed/RUs24n8DfzA](https://www.youtube.com/embed/RUs24n8DfzA) Sigue leyendo para saber más sobre las secciones, filas, columnas y módulos de arrastrar y soltar. ### Secciones Las secciones son un tipo especial de filas que se crean utilizando la etiqueta [`dnd_section`](https://developers.hubspot.es/docs/cms/reference/hubl/tags/dnd-areas#drag-and-drop-section-code-dnd-section-code-). Son el único elemento de arrastrar y soltar que puede ser descendiente directo de un área de arrastrar y soltar `dnd_area`. Puedes pensar en las secciones como un contenedor externo. Pueden permitir que el contenido tenga un ancho completo o que tenga un ancho máximo centrado y delimitado. Debido a que las secciones contienen las columnas y los módulos, facilitan la reorganización e implementación de grandes porciones de contenido. La etiqueta `dnd_section` no muestra un elemento HTML `
`. A continuación se muestra una captura de pantalla de cómo aparece una sección en el editor de páginas. ![Sección en el editor de páginas](https://cdn2.hubspot.net/hubfs/53/Section%20in%20page%20editor.png) Además de la etiqueta `dnd_section`, también puedes crear [plantillas de secciones](/docs/cms/start-building/building-blocks/sections/sections#create-reusable-sections), que son secciones predefinidas reutilizables a las que los creadores de contenido pueden acceder en el editor de páginas. Por ejemplo, podrías convertir la sección de la captura de pantalla anterior en una plantilla de sección, permitiendo que un creador de contenidos la agregue rápidamente a las páginas según sea necesario. Las secciones tienen capacidades únicas, incluyendo la posibilidad de utilizarlas de forma similar a una plantilla parcial estándar de hubL. ### Columnas Las columnas son contenedores de filas y módulos, y pueden colocarse dentro de una fila o sección. Las columnas se crean utilizando la etiqueta [`dnd_column`](https://developers.hubspot.es/docs/cms/reference/hubl/tags/dnd-areas#drag-and-drop-column-code-dnd-column-code-). Utiliza varias columnas dentro de una fila para colocar las filas y los módulos que los contienen de forma horizontal. Las columnas son regiones verticales que pueden contener filas. Puedes hacer columnas de diferentes tamaños cambiando su anchura. El tamaño de una fila es de 12 "columnas" de ancho, esto se refiere a la cuadrícula CSS. Las columnas dentro de una fila pueden ser de cualquier tamaño menor que 12 pero no pueden sumar más de 12. Cuando se colocan varias filas dentro de una columna, los módulos dentro de esas filas aparecerán apilados verticalmente. Dado que los módulos son columnas en sí, un módulo no puede ser descendiente directo de una columna, sino que debe estar contenido en una fila. ![dnd\_area column in page editor](https://cdn2.hubspot.net/hubfs/53/dnd_area%20column%20in%20page%20editor.png) La apariencia de una columna en el editor de páginas. ### Filas Las filas son las que contienen las columnas. Las filas son creadas en las plantillas utilizando la etiqueta [`dnd_row`](https://developers.hubspot.es/docs/cms/reference/hubl/tags/dnd-areas#drag-and-drop-row-code-dnd-row-code-). Como los módulos son columnas, puedes colocarlos directamente dentro de una fila. Esto causará que los módulos aparezcan horizontalmente adyacentes entre sí. Los módulos se pueden organizar verticalmente colocándolos dentro de las filas. Si quieres colocar un módulo por encima de otro, debes colocar ese módulo dentro de una fila. Luego, se agregaría otro módulo en una fila por encima o por debajo de esa primera fila. ![dnd\_area row in page editor](https://cdn2.hubspot.net/hubfs/53/dnd_area%20row%20in%20page%20editor.png) La apariencia de una fila en el editor de páginas. ### Módulos Los [módulos](/docs/cms/start-building/building-blocks/modules/overview) son una parte fundamental del CMS de HubSpot, actuando como bloques de creación reutilizables que se utilizan para crear un sitio y mostrar el contenido. Cuando se crea una plantilla se colocan módulos dentro de las filas y secciones de arrastrar y soltar utilizando la etiqueta [`dnd_module`](https://developers.hubspot.es/docs/cms/reference/hubl/tags/dnd-areas#drag-and-drop-module-code-dnd-module-code-). Los módulos también son columnas. Esto significa que si colocas dos etiquetas de módulo, o un módulo y una columna directamente al lado del otro, aparecerán uno al lado del otro horizontalmente. No se pueden colocar elementos de arrastrar y soltar dentro de un módulo. Los módulos no pueden ser elemento directos de un [`dnd_area`](https://developers.hubspot.es/docs/cms/reference/hubl/tags/dnd-areas#drag-and-drop-area-code-dnd-area-code-). ## Estructura y estilo HTML Las áreas de arrastrar y soltar y sus elementos cuando se renderizan tienen nombres de clase para una rejilla de 12 columnas basada en bootstrap 2. Para facilitar la puesta en marcha, puedes utilizar el archivo [\_layout.css](https://github.com/HubSpot/cms-theme-boilerplate/blob/main/src/css/objects/_layout.css) de la [biblioteca de recursos del CMS de HubSpot](https://github.com/HubSpot/cms-theme-boilerplate/). Esto proporciona estilos predeterminados para esos nombres de clase. No es obligatorio usar esta hoja de estilos; puedes proporcionar tus propios estilos en su lugar. Si estás construyendo tu sitio basado en la biblioteca de temas del CMS HubSpot y deseas utilizar tu propio CSS, es recomendable [eliminar la llamada al layout.css en la base.html](https://github.com/HubSpot/cms-theme-boilerplate/blob/5abaf2a4c45a95dbed1d459f7f0f6407350752ac/src/templates/layouts/base.html#L8). Para usar tu propia cuadrícula CSS, deberás referenciar los mismos nombres de clases de la cuadrícula, pero el estilo dependerá de ti. Las áreas de arrastrar y soltar cuando se renderizan crean divs con clases que son usadas por el editor de la página. Algunos ejemplos podrían ser `widget-span` y `widget-type-cell`. No deberías referenciar directamente a estas clases ya que son utilizadas por el editor de páginas y podrían cambiar en el futuro. En su lugar, en el [`dnd_area`](https://developers.hubspot.es/docs/cms/reference/hubl/tags/dnd-areas#drag-and-drop-area-code-dnd-area-code-) de HubL agrega un parámetro de clase con el nombre de la clase que deseas utilizar ```html theme={null}
``` ### Estilo y atributos del editor Con las áreas de arrastrar y soltar los creadores de contenido pueden ajustar de alguna forma el estilo de la página. Por ejemplo, pueden establecer que una sección tenga un fondo. Los desarrolladores pueden pasar valores predeterminados para esas configuraciones a través de los atributos. Cuando la página se renderiza, los estilos que se generan basados en esas configuraciones se agregan a `standard_header_includes`. ## Migrar columnas flexibles Si vas a cambiar las plantillas creadas por columnas flexibles para utilizar las áreas de arrastrar y soltar, ten en cuenta la siguiente información sobre las columnas flexibles. Las columnas flexibles no son lo mismo que las áreas de arrastrar y soltar. No puedes pasar de una plantilla que solo tiene una columna flexible a otra que solo tiene un área de arrastrar y soltar. Esta limitación se implementó porque el contenido no se asignaba desde la columna flexible al área de arrastrar y soltar. Para ilustrar el motivo, supongamos que creaste una nueva plantilla con una barra lateral y un área de contenido principal. La barra lateral es una columna flexible y tu contenido principal es un área de arrastrar y soltar. La herramienta de intercambio asignaría una columna flexible a otra columna flexible. Obtener más información sobre cómo [agregar áreas de arrastrar y soltar a los sitios web existentes](https://developers.hubspot.es/docs/cms/guides/improve-existing-sites/add-theme-features-to-existing-sites#drag-and-drop-areas). ## Recursos relacionados * [Agregar áreas de arrastrar y soltar a los sitios web existentes](https://developers.hubspot.es/docs/cms/guides/improve-existing-sites/add-theme-features-to-existing-sites#drag-and-drop-areas) * [Crear un área de soltar](/docs/cms/start-building/building-blocks/drag-and-drop/tutorial) * [Visullizar las áreas de arrastrar y soltar - YouTube](https://www.youtube.com/watch?v=RUs24n8DfzA\&feature=youtu.be) # Crear un área de arrastrar y soltar Source: https://developers.hubspot.es/docs/cms/start-building/building-blocks/drag-and-drop/tutorial Usa áreas de arrastrar y soltar para ayudar a los creadores de contenidos a realizar fácilmente cambios de diseño, estilo y contenido > **Productos compatibles** [Las áreas de arrastrar y soltar](https://developers.hubspot.es/docs/cms/start-building/building-blocks/drag-and-drop/overview) son secciones de una plantilla que actúan como contenedores vacíos que pueden modificarse directamente desde el editor de páginas. Crear áreas de arrastrar y soltar en una plantilla permite a los creadores de contenidos añadir y gestionar módulos en el editor de páginas según sea necesario, en lugar de depender de módulos estáticos integrados en la plantilla. ![Animación de módulos arrastrados a una página, con ajuste de columnas y filas](https://newinboundblog.hubspot.com/hubfs/a%20new%20approach.gif) Además de utilizar las áreas de arrastrar y soltar como zonas de colocación vacías para los creadores de contenidos, también puedes rellenar automáticamente estas áreas con varios módulos, diseños y contenidos para que sirvan como punto de partida. Este tutorial te guiará en la configuración de un área de arrastrar y soltar simple. Para obtener más recursos para desarrolladores sobre las áreas de arrastrar y soltar, consulta en [este boilerplate](https://github.com/HubSpot/cms-theme-boilerplate/blob/main/src/templates/home.html) las prácticas de implementación recomendadas, así como la [documentación de referencia sobre la etiqueta HubL del área de arrastrar y soltar](/docs/cms/reference/hubl/tags/dnd-areas). > [!WARNING] > > **Nota:** Un creador de contenido puede cambiar la plantilla de una página por otra del mismo tipo, dependiendo de si tiene etiquetas [dnd\_area](/docs/cms/reference/hubl/tags/dnd-areas). > > * Las plantillas de arrastrar y soltar creadas con el editor de diseño visual pueden cambiarse por otras plantillas de arrastrar y soltar o por plantillas codificadas con o sin etiquetas *dnd\_area*. > * Las plantillas codificadas con etiquetas *dnd\_area* solo pueden cambiarse por otras plantillas codificadas con etiquetas *dnd\_area*. > * Las plantillas codificadas sin etiquetas *dnd\_area* solo pueden cambiarse por otras plantillas codificadas sin etiquetas *dnd\_area*. > > Cuando se cambia la plantilla de la página, se conservará todo el contenido que se hubiera añadido a las áreas de arrastrar y soltar de la primera plantilla. **1. Crear una plantilla HTML nueva** Crea una nueva plantilla HTML para alojar el HubL y el HTML que conformarán la sección de arrastrar y soltar. > [!NOTE] > > Las áreas de arrastrar y soltar se basan en una cuadrícula adaptable de 12 columnas. Las etiquetas de arrastrar y soltar generan marcado con nombres de clase que designan columnas y filas. Debes agregar una hoja de estilo para asignar esos nombres de clase. Un ejemplo de estilos de diseño que podrías implementar se encuentra en la [biblioteca de recursos del CMS de HubSpot](https://github.com/HubSpot/cms-theme-boilerplate/blob/main/src/css/objects/_layout.css). Tu hoja de estilo puede agregarse a la plantilla usando [`{{ require_css() }}`](/docs/cms/reference/hubl/tags/standard-tags#require-css). **2. Áreas de arrastrar y soltar** La sección `dnd_area` es lo que hace que una parte de la página web sea editable en cuanto a su estructura, diseño y contenido. El cuerpo de una etiqueta `dnd_area` proporciona el contenido predeterminado del área de arrastrar y soltar. Esta etiqueta por sí sola generará una zona de caída para que los creadores de contenidos arrastren los módulos dentro del área de creación. ```hubl theme={null} {% dnd_area "body_dnd_area" %} {% end_dnd_area %} ``` **3. Crear una sección con un módulo** Una `dnd_section` es una fila de nivel superior, y solo puede ser elemento secundario directo de una `dnd_area`. Las secciones admiten una variedad de parámetros que controlan los valores predeterminados de los controles estilísticos que los creadores de contenido tienen para las secciones dentro del área de creación. A modo de ejemplo, el código siguiente crea una sección con una imagen de fondo (`background_image`). Esta sección está centrada por un parámetro `vertical-alignment` y tiene una anchura máxima de un campo de `1000px` para contenido infantil. Para obtener una lista completa de los parámetros admitidos en las etiquetas HubL de arrastrar y soltar, consulta la documentación de referencia de [esta etiqueta HubL específica](/docs/cms/reference/hubl/tags/dnd-areas). Para rellenar automáticamente la sección con contenido, el código también incluye una etiqueta `dnd_module` para incluir un módulo haciendo referencia a su ruta. En este ejemplo, el `dnd_module` está usando el módulo de texto enriquecido predeterminado de HubSpot, según lo establecido por el parámetro `path`. Se especifica un valor predeterminado para el módulo de texto enriquecido mediante la etiqueta `module_attribute`. ```hubl theme={null} {% dnd_area "body_dnd_area" %} {% dnd_section background_image = { 'backgroundPosition': 'MIDDLE_CENTER', 'backgroundSize': 'cover', 'imageUrl': 'https://www.dragndrop.com/bg-image.jpg' }, max_width=1000, vertical_alignment='MIDDLE' %} {% dnd_module path='@hubspot/rich_text' %} {% module_attribute "html"%} This is your main headline. Use this space to tell everyone about what you have to offer. {% end_module_attribute %} {% end_dnd_module %} {% end_dnd_section %} {% end_dnd_area %} ``` El resultado es que el área de arrastrar y soltar contiene un módulo que los creadores de contenidos pueden editar dentro del área de edición. Observa cómo ajustar el valor `max_width` en la sección `dnd_section` afecta al contenido. ![captura de pantalla del editor de páginas con la barra de herramientas del módulo mostrando](https://newinboundblog.hubspot.com/hubfs/dnd_rich_text.png) **4. Incluir varios módulos** Para incluir más de un módulo, usa varias etiquetas `dnd_module`. Al definir los parámetros `offset` y `width` que se basan en una cuadrícula de 12 columnas, puedes colocar un módulo de imagen junto al módulo de texto enriquecido, como se muestra abajo. ```hubl theme={null} {% dnd_area "body_dnd_area" %} {% dnd_section background_image={ 'backgroundPosition': 'MIDDLE_CENTER', 'backgroundSize': 'cover', 'imageUrl': 'https://www.dragndrop.com/bg-image.jpg' }, max_width=1000, vertical_alignment='MIDDLE' %} {% dnd_module path='@hubspot/rich_text', width=8, offset=0, label="Rich Text" %} {% module_attribute "html"%}

This is your main headline.

Use this space to tell everyone about what you have to offer. {% end_module_attribute %} {% end_dnd_module %} {% dnd_module path='@hubspot/linked_image', width=4, offset=8, img={ "src": "https://www.dragndrop.com/placeholder-image.jpg", "alt": "Stock placeholder image" } %} {% end_dnd_module %} {% end_dnd_section %} {% end_dnd_area %} ``` Ahora, la página también tiene un módulo de imagen editable, así como una manilla de arrastre, que permite a los creadores de contenido cambiar el ancho y el desplazamiento de los módulos. Observa cómo fijar un `vertical_alignment` en la `dnd_section` centra el contenido de forma vertical. ![captura de pantalla del editor de páginas mostrando un módulo de imagen agregado a una sección](https://newinboundblog.hubspot.com/hubfs/dnd_rich_image.png) **5. Incorporar columnas y filas** Para hacer más compleja la zona de arrastre, puedes incorporar filas y columnas utilizando las etiquetas `dnd_row` y `dnd_column`. Las filas y columnas actúan de forma similar a las secciones en el editor de contenido, donde los creadores de contenido pueden arrastrarlas, así como clonarlas, eliminarlas y darles estilo. ```hubl theme={null} {% dnd_area "body_dnd_area" %} {% dnd_section background_image={ 'backgroundPosition': 'MIDDLE_CENTER', 'backgroundSize': 'cover', 'imageUrl': 'https://www.dragndrop.com/bg-image.jpg' }, max_width=1000, vertical_alignment='MIDDLE' %} {% dnd_module path='@hubspot/linked_image', width=6, img={ "src": "https://www.dragndrop.com/placeholder-image.jpg", "alt": "Stock placeholder image" } %} {% end_dnd_module %} {% dnd_column width=6, offset=6 %} {% dnd_row padding={ 'bottom': 15 } %} {% dnd_module path='@hubspot/rich_text' %} {% module_attribute "html"%}

This is your main headline.

Use this space to tell everyone about what you have to offer. {% end_module_attribute %} {% end_dnd_module %} {% end_dnd_row %} {% dnd_row %} {% dnd_module path='@hubspot/form' %} {% end_dnd_module %} {% end_dnd_row %} {% end_dnd_column %} {% end_dnd_section %} {% end_dnd_area %} ``` Ahora, los creadores de contenido tendrán un mayor control estilístico sobre filas y columnas específicas, además de módulos y secciones. ![captura de pantalla del editor de páginas mostrando una fila con dos columnas, un módulo de imagen a la izquierda, un módulo de texto enriquecido y un módulo de formulario a la derecha.](https://newinboundblog.hubspot.com/hubfs/dnd_area_full.png) **6. Definir estilos genéricos para los componentes de arrastrar y soltar** Los distintos componentes de las áreas, las secciones, las columnas, las filas y los módulos de arrastrar y soltar tienen clases a las que se puede aplicar estilo usando CSS. Los estilos y opciones editables de estos componentes pueden definirse utilizando CSS en lugar de HubL. Por ejemplo, el relleno predeterminado se puede definir en las `dnd_sections` con el CSS: ```css theme={null} .dnd-section { padding: 80px 20px; } ``` Los selectores CSS genéricos para los componentes del área de arrastrar y soltar son `.dnd-section`, `.dnd-column`, `.dnd-row` y `.dnd-module`. Aparte de estas clases con prefijo `dnd`, los nombres de las clases de la cuadrícula en el marcado se basan en los nombres de bootstrap 2. Esto no significa que tengas que usar bootstrap 2 con áreas de arrastrar y soltar. Cuando agregas una `dnd_area` a la página, debes proporcionar los estilos que hacen que la cuadrícula funcione. Un ejemplo de estilos de diseño que podrías implementar se encuentra en la [biblioteca de recursos del CMS HubSpot](https://github.com/HubSpot/cms-theme-boilerplate/tree/main/src/css/objects). Tu hoja de estilo puede agregarse a la plantilla usando [`{{ require_css() }}`](/docs/cms/reference/hubl/tags/standard-tags#require-css). ## Tutoriales relacionados * [Primeros pasos para usar temas](/docs/cms/start-building/building-blocks/themes/getting-started) * [Primeros pasos con los módulos personalizados](/docs/cms/start-building/building-blocks/modules/overview) * [Cómo agregar capacidades de tema a un sitio existente](/docs/cms/best-practices/improve-existing-sites/add-theme-features-to-existing-sites) # Asignación de alias Source: https://developers.hubspot.es/docs/cms/start-building/building-blocks/fields/alias-mapping # Herencia de configuración de marca Source: https://developers.hubspot.es/docs/cms/start-building/building-blocks/fields/brand-and-settings-inheritance Aprende a utilizar la configuración de marcas, como logotipos y colores de marcas, dentro de un tema o en archivos HubL/HTML y CSS. Con [la configuración de marca](https://knowledge.hubspot.com/branding/edit-your-logo-favicon-and-brand-colors#customize-your-company-logo-and-colors), los usuarios pueden configurar los colores , logotipos y favicons de la marca de la empresa que se utilizarán en todo el contenido de HubSpot. Esto te permite acceder a esa configuración de marca con tokens en el archivo de un tema `fields.json` y dentro de los archivos HTML/HubL y CSS. También puedes acceder a los colores de las marcas dentro del archivo de un módulo `fields.json`. Después de agregar estos tokens dentro de un archivo `fields.json`, los creadores de contenido pueden editar sus valores dentro del editor de configuración del tema. Al agregar estas fichas en un HTML, HubL o CSS, los valores estarán codificados de forma rígida y los creadores de contenido no podrán modificarlos en el editor de la página. A continuación, conoce las variables de configuración de marca disponibles junto con ejemplos de implementación. ## Variables de configuración de marca La siguiente es una lista de opciones a las que se puede acceder desde el área de configuración de la marca dentro del valor del objeto `property_value_paths` o dentro de los archivos HTML/HubL y CSS. ### Colores Los colores de la marca se pueden acceder tanto dentro del [archivo fields.json ](#fields-json-color) de un tema o módulo, como dentro de los archivos HTML/HubL y CSS utilizando los siguientes tokens HubL: * **Principal:** * `{{brand_settings.primaryColor}}` * `{{brand_settings.colors[0]}}` ![marca-colores-primarios](https://knowledge.hubspot.com/hubfs/Knowledge_Base_2023_2024/brand-colors-primary.png) * **Secundario:** `{{brand_settings.secondaryColor}}` ![marca-colores-secundario](https://knowledge.hubspot.com/hubfs/Knowledge_Base_2023_2024/brand-colors-secondary.png) * **Colores de contraste:** * `{{brand_settings.accentColor1}}` * `{{brand_settings.accentColor2}}` * `{{brand_settings.accentColor3}}` ![marca-colores-acento](https://knowledge.hubspot.com/hubfs/Knowledge_Base_2023_2024/brand-colors-accent.png) * **Colores adicionales:** * `{{brand_settings.colors[1]}}` * `{{brand_settings.colors[2]}}` * `{{brand_settings.colors[3]}}` ![marca-colores-adicionales](https://knowledge.hubspot.com/hubfs/Knowledge_Base_2023_2024/brand-colors-additional.png) Para acceder directamente al código hexadecimal de un color, incluye un filtro `hex` en el token. Por ejemplo: `{{brand_settings.primaryColor.hex}}` Para incluir colores de configuración de la marca en el archivo `fields.json` de un tema o módulo, utiliza el siguiente formato: ```json theme={null} //Example of using the primary color in within a theme's // field.json file { "name": "branding_color", "label": "branding_color", "type": "color", "default": { "color": "#26ff55", "opacity": 60 }, "inherited_value": { "property_value_paths": { "color": "brand_settings.primaryColor" } } } ``` > [!WARNING] > > Hay ocasiones en que las cuentas pueden no tener colores adicionales configurados en su configuración de marcas. Si el código hace referencia a un color heredado que no existe en la configuración de la marca, se utiliza la siguiente lógica de reserva: > > * `secondaryColor` vuelve al primer color adicional (`colors[1]`). > * `accentColor1` vuelve al segundo color adicional (`colors[2]`). > * `accentColor2` vuelve al tercer color adicional (`colors[3]`). > * `accentColor3` vuelve al cuarto color adicional (`colors[4]`). > * Los colores adicionales (por ejemplo, `colors[3]`) volverán al valor `default`. Si no hay una propiedad predeterminada color establecido, se utilizará `primaryColor`. ### Logotipos Se puede acceder a los logotipos de marcas dentro del archivo `fields.json` de un módulo y dentro de los archivos HTML / HubL y CSS. Puedes usar los siguientes tokens para acceder al conjunto de logotipos principales dentro de la configuración de marcas: * `{{brand_settings.primaryLogo}}` * `{{brand_settings.logos[0]}}` ![logotipo-de-configuración-de-marca0](https://www.hubspot.com/hubfs/Knowledge_Base_2021/Developer/brand-settings-logo0.png) Se puede acceder a todos los logotipos adicionales mediante `{{brand_settings.logos[1-19]}}`. Además, puede acceder a los siguientes atributos del logotipo: * **URL del logotipo:** `{{brand_settings.primaryLogo.link}}` * **Texto alternativo del logotipot:** `{{brand_settings.primaryLogo.alt}}` * **Altura del logotipo:** `{{brand_settings.primaryLogo.height}}` * **Ancho del logotipo:** `{{brand_settings.primaryLogo.width}}` * **Enlace a la imagen del logotipo:** `{{brand_settings.primaryLogo.src}}` ### Favicons Sólo se puede acceder a los favicons de marca dentro de archivos HTML/HubL y CSS. Puedes usar los siguientes tokens para acceder al conjunto de logotipos principales dentro de la configuración de marcas: * `{{brand_settings.primaryFavicon}}` * `{{brand_settings.favicons[0]}}` ![marca-configuración-favicon0](https://www.hubspot.com/hubfs/Knowledge_Base_2021/Developer/brand-settings-favicon0.png) Se puede acceder a todos los favicons adicionales usando `{{brand_settings.favicons[1-19]}}`. Puedes acceder a la URL del logotipo directamente incluyendo un filtro `src`. Por ejemplo:`{{brand_settings.primaryFavicon.src}}` # Agregar fuentes personalizadas a un tema Source: https://developers.hubspot.es/docs/cms/start-building/building-blocks/fields/custom-fonts # oEmbed Source: https://developers.hubspot.es/docs/cms/start-building/building-blocks/fields/oembed # Escribir campos de módulos y temas mediante JavaScript Source: https://developers.hubspot.es/docs/cms/start-building/building-blocks/fields/write-fields-using-javascript # Contenido global Source: https://developers.hubspot.es/docs/cms/start-building/building-blocks/global-content El contenido global es el contenido que puede reutilizarse en todas tus plantillas para crear piezas coherentes de información coherentes, como encabezados de sitios web, pies de página, barras laterales, logotipos u otros componentes. El contenido global es el contenido que se comparte en todas las partes de un sitio web. Ejemplos comunes son los encabezados, los pies de página y las barras laterales de los sitios web. Como desarrollador, especificarás qué componentes deben ser globales mediante el uso de parciales globales o haciendo que los módulos sean globales. HubSpot ofrece una experiencia de edición diferente a los editores de contenido que facilita la edición del contenido global y la visualización previa de los cambios en todas las páginas antes de su publicación. Para obtener más información sobre cómo editar tu contenido global, consulta [cómo utilizar el contenido global en varias plantillas](https://knowledge.hubspot.com/design-manager/use-global-content-across-multiple-templates) en la base de conocimientos de HubSpot. ![Editor de contenido global](https://cdn2.hubspot.net/hubfs/53/5Cdocs/global-content/global-content-editor-4.png) ## Resumen El contenido global es más eficaz para mostrar la misma información en varias páginas. Por ejemplo, el encabezado y el pie de página de tu sitio web, como el encabezado de la parte superior de esta página. ![hubspot-developers-header](https://www.hubspot.com/hubfs/Knowledge_Base_2021/Developer/hubspot-developers-header.png) A continuación algunos ejemplos adicionales de áreas en las que puedes utilizar el contenido global: * Navegación secundaria para las diferentes secciones de tu sitio web * Pies de página de derechos de autor (o pies de página secundarios) * Barras laterales de publicaciones del blog (para mostrar las publicaciones recientes, listados de autores y más) > [!WARNING] > > Debido a que el contenido global se utiliza en múltiples lugares a lo largo de un sitio web, es aún más crucial [diseñar y construir tus parciales y módulos globales para la accesibilidad](/docs/cms/best-practices/improve-existing-sites/accessibility). ### Parciales globales vs. módulos globales Como desarrollador, puedes crear parciales globales y módulos globales, con algunas diferencias clave entre ellos: * Los parciales globales son un tipo de plantilla creada con HTML y HubL que se puede reutilizar en todo el sitio web. Los tipos de parciales más comunes son los encabezados, las barras laterales y los pies de página. * Los módulos globales son módulos que se componen de uno o varios contenidos que se pueden utilizar en varias páginas de tu sitio. Algunos tipos comunes de módulos globales pueden ser elementos como formularios de suscripción al blog, elementos de navegación secundaria y llamadas a la acción. Debes evitar incluir módulos globales dentro de los parciales globales, ya que ello puede crear una experiencia negativa en la edición de contenido. > [!NOTE] > > Todos los módulos y campos dentro de tus parciales globales y módulos globales son fácilmente editables dentro del [editor de contenido global](https://knowledge.hubspot.com/design-manager/use-global-content-across-multiple-templates). ## Parciales globales ### Crea un parcial global Un parcial global es un tipo de plantilla que puedes crear localmente a través de la CLI de HubSpot utilizando el comando [create](https://developers.hubspot.com/docs/developer-tooling/local-development/hubspot-cli/reference#create), como se muestra a continuación. ```shell theme={null} hs create template ``` Cuando se te pida que elijas un tipo de plantilla, selecciona `global partial`. Esto creará tu plantilla en el directorio deseado con las siguientes anotaciones de plantilla incluidas en el archivo HTML. ```html theme={null} ``` Para ver un ejemplo de un contenido parcial global, [consulta nuestra plantilla en GitHub.](https://github.com/HubSpot/cms-theme-boilerplate/blob/main/src/templates/partials/header.html) ### Añade áreas de arrastrar y soltar a los parciales globales Puedes habilitar las capacidades de arrastrar y soltar contenido dentro de tus parciales globales agregando etiquetas de `dnd_area` forma similar a la habilitación en las plantillas de página. Consulta nuestra [documentación sobre el área de arrastrar y soltar](/docs/cms/reference/hubl/tags/dnd-areas) para más información. ### Incluye un parcial global en tu plantilla actual Para agregar un parcial global en una de tus plantillas existentes, utiliza la etiqueta de HubL `global_partial` mientras haces referencia a la ruta del parcial. A continuación, verás un ejemplo de [la plantilla del CMS](https://github.com/HubSpot/cms-theme-boilerplate/blob/main/src/templates/layouts/base.html#L21) que utiliza esta etiqueta. ```hubl theme={null} {% global_partial path="../partials/header.html" %} ``` Cuando se emiten parciales globales, contienen una envoltura `
` alrededor del parcial global. Esto lo utiliza el editor de la página para identificar que la pieza de contenido es un parcial global. ```html theme={null}
``` > [!WARNING] > > ### Nota: > > No utilices `global_partial` dentro del `` de una plantilla. Hacerlo produciría un HTML no válido. > > En la mayoría de las situaciones en las que se quieres utilizar un parcial global en el encabezado, puede tener más sentido utilizar un módulo global en su lugar con un [`{%require_head%}`](/docs/cms/reference/hubl/tags/standard-tags#require-head) para insertar código personalizado en el encabezado y seguir proporcionando campos de módulo. ## Módulos globales Puedes crear módulos globales al igual que cualquier otro módulo usando la CLI ejecutando el comando `hs create`, como se muestra abajo. ```shell theme={null} hs create module ``` Un módulo global se diferencia por el indicador `global` en el archivo `meta.json` del módulo. ```json theme={null} // meta.json file { "css_assets": [], "external_js": [], "global": true, "help_text": "", "host_template_types": ["PAGE"], "js_assets": [], "other_assets": [], "smart_type": "NOT_SMART", "tags": [], "is_available_for_new_content": false } ``` También puedes [crear módulos globales en HubSpot utilizando el administrador de diseño](https://knowledge.hubspot.com/design-manager/create-and-edit-modules). Más información sobre cómo trabajar con módulos en los siguientes recursos relacionados: * [Resumen de los módulos](https://developers.hubspot.es/docs/cms/start-building/building-blocks/modules/overview) * [Módulos predeterminados de HubSpot](/docs/cms/reference/modules/default-modules) * [Configurar módulos](/docs/cms/reference/modules/configuration) * [Uso de módulos en plantillas](/docs/cms/reference/modules/using-modules-in-templates) # Búsqueda de contenido Source: https://developers.hubspot.es/docs/cms/start-building/building-blocks/modules/content-search Utilizando la funcionalidad de búsqueda nativa del sitio dentro del CMS de HubSpot, Búsqueda de contenido. El CMS de HubSpot tiene incorporada la funcionalidad de búsqueda en el sitio para permitir a tus visitantes encontrar fácilmente el contenido que están buscando. El CMS de HubSpot tiene integrada la funcionalidad de búsqueda en el sitio para permitir a tus visitantes encontrar fácilmente el contenido que están buscando. Todo tu contenido de HubSpot se indexa automáticamente en el motor de búsqueda nativo de HubSpot, eliminando la molestia de configurar una herramienta de búsqueda de terceros para tu sitio web. ## Buscando contenido El motor de búsqueda es accesible a través de la api [API de búsqueda del sitio](/docs/api-reference/cms-site-search-v3/guide). Esta API admite numerosas opciones de filtrado para permitirte crear una experiencia de búsqueda altamente personalizada y potente en tu sitio web. Por ejemplo, si quieres construir una búsqueda en tu blog, puedes consultar por `type=BLOG_POST` para que solo te devuelva las publicaciones del blog. O, si quieres construir la búsqueda en la versión española de tu sitio web, podrías consultar `language=es` para devolver solo las páginas en español. La API devuelve JSON que puede ser analizado con JavaScript para mostrar los resultados en tu sitio web. Todos los tipos de contenido devolverán el dominio de la página, el título, la url y el idioma. La descripción devuelta es una muestra del texto del contenido que mejor se ajusta al término de búsqueda. Un elemento `` envolverá perfectamente el texto coincidente, permitiéndote resaltar el texto coincidente con CSS. Dependiendo del tipo de contenido buscado, los resultados devuelven una información ligeramente diferente, por lo que puede mostrar los resultados para tipos de contenido únicos de manera diferente. Por ejemplo, las publicaciones del blog devolverán información sobre las etiquetas que tiene la publicación, quién es el autor y cuándo se publicó. ```json theme={null} // json { "total": 850, "offset": 0, "limit": 10, "results": [ { "id": 3761238962, "score": 0.30858153, "type": "SITE_PAGE", "domain": "designers.hubspot.com", "url": "https://developers.hubspot.com/docs/cms/search", "language": "en", "title": "Content Search", "description": "Using HubSpot’s native search engine, content search, to implement search on your website" }, { "id": 3254581958, "score": 0.30858153, "type": "BLOG_POST", "domain": "designers.hubspot.com", "url": "https://designers.hubspot.com/blog/getting-started-with-local-development", "featuredImageUrl":"https://designers.hubspot.com/hubfs/local-development.jpg" "title": "Getting Started with Local Development", "description":"The beta Local Development Tooling connects your local workflow to HubSpot, allowing you to utilize version control, your favorite text editor and various web development technologies when developing on the HubSpot CMS." "authorFullName": "William Spiro", "tags": [ "Website Development", "Local Development" ], "publishedDate": 1447938000000 } } ``` ## Implementación de la búsqueda en tu sitio web Hay dos módulos por opción predeterminada que puedes utilizar para implementar fácilmente la búsqueda en tu sitio web, que utilizan las [API de búsqueda del sitio](/docs/api-reference/cms-site-search-v3/guide): `search_input` `search_results`. ### Entrada de búsqueda en el sitio Un campo de entrada para que los visitantes introduzcan los términos de búsqueda. Este módulo puede existir en cualquier lugar de tu sitio web. Este módulo puede incluirse en una plantilla con `{% module "search_input" path="@hubspot/search_input" %}` ```hubl theme={null} {% module "search_input" path="@hubspot/search_input" %} ``` ### Resultados de la búsqueda del sitio Devuelve un listado de contenido basado en el término de búsqueda. Este módulo puede existir en cualquier lugar de tu sitio web. Este módulo puede incluirse en una plantilla con ```hubl theme={null} {% module "search_results" path="@hubspot/search_results" %} ``` Si la funcionalidad de estos módulos no es la que deseas que funcione la búsqueda en tu sitio web, puedes crear tus propios módulos o funcionalidad de búsqueda. Los módulos de búsqueda por opción predeterminada están diseñados para ser ampliados en función de tus necesidades de búsqueda. Puedes ver y clonar estos módulos en el Administrador de diseño buscando sus nombres en el Finder o puedes recuperarlos en tu entorno local utilizando la [CLI del CMS](https://developers.hubspot.com/docs/developer-tooling/local-development/hubspot-cli/reference) ejecutando `hs fetch @hubspot/search_input.module` o `hs fetch @hubspot/search_results.module`. ![módulo de búsqueda por opción predeterminada](https://cdn2.hubspot.net/hubfs/53/default%20search%20module.png) ## Plantilla de resultados de búsqueda Cada dominio tiene su propia página de resultados de búsqueda por opción predeterminada. La plantilla y la ruta de esta página se establecen en **Configuración > Sitio web > Páginas** en la pestaña [Páginas del sistema](https://app.hubspot.com/l/settings/website/pages/all-domains/system-pages) para dominios específicos. Consulta la [plantilla de resultados de búsqueda del tema CMS](https://github.com/HubSpot/cms-theme-boilerplate/blob/master/src/templates/system/search-results.html) como ejemplo. El dominio establecido para la página de resultados de búsqueda se conecta automáticamente a los módulos de búsqueda por opción predeterminada. Sin embargo, puedes usar la [API de búsqueda del sitio](/docs/api-reference/cms-site-search-v3/guide) para crear tus resultados de búsqueda como quieras en cualquier página de tu sitio web. ## ¿Cómo se determina la precedencia de la búsqueda? El orden de los resultados de la búsqueda se determina por una serie de comparaciones ponderadas del contenido de la página con el término de búsqueda del visitante. El contenido de la página se separa en campos de comparación con una ponderación distinta según dónde reside el contenido dentro de las HTML de tus páginas. Los campos de comparación se agrupan en orden de ponderación: 1. Título HTML 2. Metadescripción 3. Elementos HTML H1 4. Elementos HTML H2 5. Elementos HTML H3 6. Otros elementos HTML Ten en cuenta que esta lista está sujeta a cambios. Si deseas indicar a nuestro indexador que potencie específicamente ciertos elementos de una página, puedes envolver el contenido en una clase `hs-search-keyword`. ## Controlar la indexación durante el desarrollo Mientras se desarrolla un nuevo sitio, es útil poder probar la búsqueda en el sitio sin preocuparse de que éste sea indexado por motores de búsqueda como Google. En tu [`robots.txt`](https://knowledge.hubspot.com/es/seo/prevent-content-from-appearing-in-search-results) puedes decirle a HubSpot que rastree todo, mientras bloquea otros bots. ```shell theme={null} # Block all bots User-agent: * Disallow: / # Allow HubSpot Site Search Indexing User-agent: HubSpotContentSearchBot Allow: / ``` > [!WARNING] > > Si alguna de tus páginas tiene una metaetiqueta que especifica que no se indexe, la página seguirá sin ser indexada, aunque se permita en el `robots.txt`. > > Recuerda también revisar tu `robots.txt` antes del lanzamiento para asegurarse de que todo se indexa como quieres. ## Comportamiento de indexación por opción predeterminada Dado que el CMS conoce la intención de ciertos tipos de páginas, la búsqueda de contenido puede limitar de forma segura la indexación para permitir la indexación de páginas de tipo contenido. Ejemplos de páginas de contenido: * Páginas de sitio * Páginas de destino * Artículos de la base de conocimientos * publicaciones de blog **Las páginas del sistema y las páginas protegidas por contraseña no se indexan.** Las páginas restringidas de CMS Membership solo se mostrarán en la búsqueda de contenido de hubspot para los usuarios que hayan iniciado sesión y tengan acceso a las páginas. ## ¿Cómo puedo excluir páginas para que no aparezcan en los resultados de la búsqueda? Si bloqueas una página para que no sea indexada a los motores de búsqueda a través del archivo [`robots.txt`](https://knowledge.hubspot.com/es/seo/prevent-content-from-appearing-in-search-results) de tu sitio web o a través de las `metaetiquetas`, no se indexarán para la búsqueda del sitio. En tu `robots.txt` agrega un `disallow`. ```shell theme={null} # Block all bots User-agent: * Disallow: /path-to-page # Block just HubSpot Site Search Indexing User-agent: HubSpotContentSearchBot Disallow: /path-to-page ``` También puedes agregar una metaetiqueta `NOINDEX, NOFOLLOW` en `` a nivel de página o plantilla. ```html theme={null} ``` > [!TIP] > > No es necesario bloquear los robots utilizando tanto el `robots.txt` como la metaetiqueta. Hacerlo puede hacer que sea confuso después si decides permitir la indexación de una página. ## Cómo excluir secciones de una página para que no se indexen en la búsqueda A veces hay regiones de una página que no son útiles para aparecer en los resultados de búsqueda. Puede ser el contenido de un encabezado, un pie de página, una barra lateral, etc. En este caso, puedes agregar la clase `hs-search-hidden` a tu HTML para que la búsqueda ignore el contenido de esas regiones. # Módulos de correo predeterminados Source: https://developers.hubspot.es/docs/cms/start-building/building-blocks/modules/default-email-modules # Formularios de HubSpot Source: https://developers.hubspot.es/docs/cms/start-building/building-blocks/modules/forms Consulta cómo agregar formularios a tu sitio web de HubSpot o a páginas externas mediante módulos, HubL o el código de inserción. Luego, aprende a diseñarlos. Usa los formularios de HubSpot para recoger información de los visitantes del sitio web, a la que luego puedes acceder en HubSpot. Puedes compartir enlaces a formularios directamente con los usuarios, [enviar datos de formularios a través de la API](https://developers.hubspot.es/docs/api-reference/marketing-forms-v3/guide) e insertarlos en las páginas de tu sitio web utilizando el CMS. Los formularios son una parte fundamental de la suite de HubSpot y se pueden crear en cuentas de HubSpot con cualquier suscripción. Los formularios no solo son importantes para la conversión de clientes, sino también porque los datos de los formularios se pueden usar en otras herramientas y recursos de HubSpot, como en contenido inteligente, en listas, en workflows, en la personalización de contenido y en otros contextos. Después de [crear un formulario de HubSpot](https://knowledge.hubspot.com/es/forms/create-forms), puedes agregarlo a tus plantillas y a tus páginas. Hay varias formas de agregar un formulario a una plantilla, dependiendo de cómo vayas a usarlo: * [Usar el módulo de formulario predeterminado](#the-default-form-module) * [Agregar un campo de formulario a un módulo personalizado](#form-fields-in-custom-modules)[](#using-the-form-hubl-tag) * [Insertar usando el código de inserción del formulario](#using-the-form-embed-code) ## El módulo de formulario predeterminado Si tu plantilla tiene [áreas de arrastrar y soltar](/docs/cms/reference/hubl/tags/dnd-areas), los creadores de contenido pueden agregar el [módulo de formulario predeterminado](/docs/cms/reference/modules/default-modules#form) a una página desde el editor de páginas y, a continuación, configurar las opciones de formulario en la barra lateral izquierda. Para codificar un módulo de formulario directamente en una plantilla con áreas de arrastrar y soltar, haz referencia al módulo como `dnd_module`. ```hubl theme={null} {% dnd_area "dnd_area" class='body-container body-container__landing', label='Main section' %} {% dnd_section vertical_alignment='MIDDLE' %} {% dnd_column width=6, offset=6 %} {% dnd_row %} {% dnd_module path='@hubspot/form' %} {% end_dnd_module %} {% end_dnd_row %} {% end_dnd_column %} {% end_dnd_section %} {% end_dnd_area %} ``` Para agregar un módulo de formulario a una plantilla fuera de un área de arrastrar y soltar, haz referencia al módulo como un `module` estándar. ```hubl theme={null} {% module "form" path="@hubspot/form" form={ "form_id": "9e633e9f-0634-498e-917c-f01e355e83c6", "response_type": "redirect", "message": "Thanks for submitting the form.", "redirect_id": null, "redirect_url": "http://www.google.com" } %} ``` Con cualquier implementación, puedes agregar parámetros a la etiqueta del módulo para especificar determinados ajustes, como el formulario que se va a usar y las opciones de redireccionamiento, como se muestra en el ejemplo de código anterior. Consulta la [documentación predeterminada de los módulos](/docs/cms/reference/modules/default-modules#form) para obtener más información sobre los parámetros disponibles. ### Clonar el módulo predeterminado Además de usar el módulo predeterminado tal como está, puedes clonarlo para que sea editable, lo que te permite personalizarlo según sea necesario. Por ejemplo, podrías clonar el módulo de formulario predeterminado, agregar un campo de color y luego envolver el HTML del módulo en una etiqueta `
` con estilo para agregar el color como fondo: * En el administrador de diseño de la barra lateral izquierda, ve a la carpeta **@hubspot**, luego haz clic con el botón derecho en **form.module** y selecciona **Clonar módulo**. ![clonar módulo del formulario](https://www.hubspot.es/hubfs/Knowledge_Base_2023_2024/clone-form-module.png) * En la barra lateral derecha, haz clic en **Agregar campo** y luego selecciona **Color**. * Agrega una etiqueta `
` alrededor del contenido HTML y luego incluye un estilo para hacer referencia al campo de color, como: `
` ![clonar sección del módulo predeterminado](https://www.hubspot.es/hubfs/Knowledge_Base_2023_2024/default-form-module-clone-section.png) ## Campos de formulario en módulos personalizados Al crear un módulo personalizado, puedes incluir un formulario en él agregando un [campo de formulario](/docs/cms/reference/fields/module-theme-fields#form), junto con la adición del fragmento de código del campo al HTML del módulo. Por ejemplo, puede que quieras agregar un formulario de solicitud de consulta a un módulo que contenga una imagen de un producto y una propuesta de valor descriptiva. Para agregar un campo de formulario a un módulo personalizado desde el administrador de diseño: * En la barra lateral derecha del editor de módulos, haz clic en **Agregar campo** y luego selecciona **Formulario**. ![campo de selección de formulario del administrador de diseño](https://www.hubspot.es/hubfs/Knowledge_Base_2023_2024/design-manager-select-form-field.png) * Después de agregar el campo, coloca el cursor sobre el campo en la barra lateral derecha, luego haz clic en **Acciones** y selecciona **Copiar fragmento**. ![copiar fragmento en el campo del módulo](https://www.hubspot.es/hubfs/Knowledge_Base_2023_2024/module-field-copy-snippet.png) * Pega el fragmento en el campo HTML del módulo. ![pegar fragmento en el campo del módulo](https://www.hubspot.es/hubfs/Knowledge_Base_2023_2024/module-field-paste-snippet.png) ### Limitar las opciones de formulario en el editor Una vez que el módulo se agrega a una página, los creadores de contenido suelen tener control sobre muchos aspectos, incluido qué formulario usar y los campos del formulario en sí. Sin embargo, puedes limitar la cantidad de control dado en el editor de páginas modificando el archivo `fields.json` del módulo de formulario [localmente](/docs/developer-tooling/local-development/hubspot-cli/install-the-cli) para incluir los siguientes campos: | Parámetro | Tipo | Descripción | | - | - | - | | `disable_inline_form_editing` | Cadena | Define la propiedad`disable_inline_form_editing` como `true` para ocultar todos los controles de edición de formularios en línea en el módulo de formulario. Entre ellos se incluyen los campos de formulario, el texto del botón de envío, las opciones de privacidad y consentimiento de datos y el CAPTCHA. | | `required_property_types` | Matriz | Una matriz que especifica qué formularios se pueden seleccionar en función de los tipos de propiedad de los campos de formulario. Los valores incluyen: `"CONTACT"`, `"COMPANY"`, y `"TICKET"`. | Por ejemplo, si has creado un módulo que solo debe usarse con formularios que permiten a los visitantes ponerse en contacto con los diversos departamentos de tu empresa, podrías permitir que los creadores de contenido solo puedan seleccionar formularios que utilicen propiedades de tickets. ```json theme={null} // Form field { "id": "843b4f0f-0ed7-5b10-e86a-5cc8a0f11a0c", "name": "form_field_1", "display_width": null, "label": "Form", "required": false, "locked": false, "type": "form", "disable_inline_form_editing": true, "required_property_types": ["TICKET"], "default": { "response_type": "inline", "message": "Thanks for submitting the form." } } ``` ## Usar el código de inserción del formulario Cuando un módulo o etiqueta de HubL no es la opción ideal, o si quieres agregar un formulario a una página externa, puedes insertarlo con el [código de inserción del formulario](https://knowledge.hubspot.com/es/forms/how-can-i-share-a-hubspot-form-if-im-using-an-external-site#add-the-form-embed-code). También puedes personalizar ese código de inserción para que el formulario sea más funcional. Puedes consultar todas las opciones de personalización del código de inserción del formulario y otra información relevante en la guía de referencia de formularios. > [!WARNING] > > ### Nota: > > * Las opciones de personalización de formularios solo están disponibles para formularios creados en HubSpot que se han [configurado como HTML sin formato](https://knowledge.hubspot.com/es/forms/how-can-i-share-a-hubspot-form-if-im-using-an-external-site#with-css-in-your-external-stylesheet-marketing-hub-professional-enterprise-or-legacy-marketing-hub-basic-only). La cuenta de HubSpot debe tener una suscripción a ***Marketing Hub*** o a ***Content Hub*** *Pro* o *Enterprise*. > * Los formularios de HubSpot solo deben cargarse utilizando el archivo JavaScript alojado en HubSpot. No se puede hacer una copia del código de inserción del formulario y autoalojarlo. Si decides autoalojar el código de inserción, las mejoras que HubSpot aplique para mejorar la seguridad, el antispam, la accesibilidad y el rendimiento no se propagarán a tu formulario. A continuación se muestra un ejemplo de un código de incrustación del formulario sin ninguna personalización. ```html theme={null} ``` | Parámetro | Tipo | Descripción | | - | - | - | | `portalId` | Número o cadena | El ID de la cuenta de HubSpot en la que se creó el formulario. Se utiliza para obtener la definición del formulario. | | `formId` | Cadena | El ID del formulario, que se utiliza para recuperar la definición del formulario. | | `region` | Cadena | La [región](https://knowledge.hubspot.com/es/account-security/hubspot-cloud-infrastructure-and-data-hosting-frequently-asked-questions) de la cuenta donde se creó el formulario. Se utiliza para obtener la definición del formulario. Los valores posibles son `na1` o `eu1`. | ### Añadir internacionalización De forma predeterminada, HubSpot incluye una serie de mensajes de validación en muchos idiomas diferentes, a los que puedes acceder utilizando el parámetro `locale`. También puedes agregar idiomas personalizados o anular los mensajes de error y los meses/días del selector de fechas que se muestran en el formulario utilizando el parámetro `translation`. Obtén más información sobre la internacionalización y los mensajes de error de validación de formularios en la [documentación de referencia de los formularios](https://developers.hubspot.es/docs/reference/cms/forms). ```js theme={null} hbspt.forms.create({ portalId: "", formId: "", locale: "en", translations: { en: { fieldLabels: { email: "Electronic mail", }, required: "Hey! That's required!", submitText: "Custom Submit Button Text", submissionErrors: { MISSING_REQUIRED_FIELDS: "Please fill in all required fields!", }, }, }, }); ``` ## Eventos de formulario Hay dos maneras de vincular la funcionalidad a los eventos en formularios: usar devoluciones de llamada en el código de inserción del formulario de HubSpot y usar eventos de formulario globales. Puedes consultar más información sobre las devoluciones de llamada del código de inserción del formulario y los eventos de formulario globales en la [documentación de referencia de formularios](https://developers.hubspot.es/docs/reference/cms/forms). ```js theme={null} // Example form embed code callback hbspt.forms.create({ portalId: "", formId: "", onBeforeFormSubmit: function ($form) { // YOUR SCRIPT HERE }, }); // Example listener window.addEventListener("message", event => { if (event.data.type === "hsFormCallback" && event.data.eventName === "onFormSubmitted") { someAnalyticsLib("formSubmitted"); console.log("Form Submitted! Event data: ${event.data}"); } }); ``` ## Estilos de formulario Si bien HubSpot ofrece estilos [que se aplican de forma global](https://knowledge.hubspot.com/es/forms/set-global-form-colors-and-fonts) y estilos [que se aplican sobre formularios específicos](https://knowledge.hubspot.com/es/forms/create-forms#style-and-preview-your-form), también puedes diseñar un formulario según cómo se agregue a las páginas de tu CMS. > [!WARNING] > > ### Nota: > > Todos los formularios generados en el CMS de HubSpot (excepto el uso del código de inserción de formularios) ignorarán cualquier estilo que se defina mediante los ajustes globales o los ajustes individuales del formulario. ### Dar estilo a formularios con el módulo predeterminado o la etiqueta de HubL Los formularios de HubSpot agregados a las páginas de HubSpot se pueden diseñar utilizando el CSS de tu sitio web. HubSpot incluye varias clases y atributos diferentes en los formularios, que se generan donde se puede aplicar opciones de estilo. Como punto de partida, consulta información sobre el [boilerplate de HubSpot para CSS de formularios](https://github.com/HubSpot/cms-theme-boilerplate/blob/main/src/css/elements/_forms.css), donde encontrarás las prácticas recomendadas para diseñar formularios. ### Dar estilo a formularios con un módulo personalizado Los formularios de los módulos personalizados pueden diseñarse con CSS en el panel CSS del módulo, en el administrador de diseño. Al limitar el ámbito del CSS al módulo, puedes asegurarte de que cada vez que se agrega el módulo a una página, el estilo viene con él. Se recomienda agregar un envoltorio al formulario y luego usar ese envoltorio como el selector de nivel superior del CSS. Esto evitará que los estilos de formulario del módulo personalizado se sobrescriba con estilos adicionales en la hoja de estilos principal de tu sitio web. A continuación se muestra una captura de pantalla del módulo personalizado con los estilos de formulario agregados al panel CSS. ![Módulo personalizado con CSS](https://cdn2.hubspot.net/hubfs/53/5Cdocs/forms/form-module-css-pane-4.jpg) ### Definir estilos personalizados para formularios insertados Si tienes una suscripción ***Marketing Hub*** o ***CMS Hub*** *Pro* o *Enterprise*, puedes utilizar definiciones de variables CSS para definir estilos globales, personalizar botones y otras entradas, así como dar estilo a tus formularios de varios pasos y barras de progreso. Obtén más información sobre cómo aplicar [definiciones CSS personalizadas a tu formulario insertado](https://developers.hubspot.es/docs/reference/cms/forms#define-custom-styling-for-embedded-forms-using-css). ### Estilo de formularios agregados a través del código de inserción de formulario Al usar el código de inserción de formulario, puedes diseñar el formulario usando la [los ajustes de estilo globales](https://knowledge.hubspot.com/es/forms/set-global-form-colors-and-fonts) o el CSS de tu sitio web. Los ajustes globales permiten configurar las opciones predeterminadas de cada formulario de la cuenta. También puedes [sobrescribir o anular estos estilos con otros en un formulario individual dentro del editor de formularios](https://knowledge.hubspot.com/es/forms/create-forms#style-and-preview-your-form). ![Estilos de formulario globales](https://cdn2.hubspot.net/hubfs/53/5Cdocs/forms/global-form-styling-options-4.png) Si tienes una suscripción a ***Marketing Hub*** o ***CMS Hub*** *Pro* o *Enterprise*, puedes seleccionar la opción **Establecer como formulario HTML sin formato** al crear un formulario. Esta configuración hace que el formulario se represente como HTML en lugar de un iframe, lo que facilita el estilo del formulario incrustado con CSS. Consulta en la base de conocimientos más información sobre cómo [dar estilos a los formularios insertados](https://knowledge.hubspot.com/es/forms/how-can-i-share-a-hubspot-form-if-im-using-an-external-site). ![Definir como formulario HTML sin formato](https://cdn2.hubspot.net/hubfs/53/5Cdocs/forms/set-as-raw-html-form-4.jpg) # Ocultar módulos y secciones en el editor de páginas Source: https://developers.hubspot.es/docs/cms/start-building/building-blocks/modules/hide-modules-and-sections # Menús y navegación Source: https://developers.hubspot.es/docs/cms/start-building/building-blocks/modules/menus-and-navigation HubSpot tiene algunas herramientas integradas para facilitar la creación y administración de estos menús, y en el lado del código, múltiples soluciones para mostrar los menús para que puedas elegir la solución que tenga más sentido para tu sitio web. Incluye menús de navegación en tu sitio web para ayudar a los usuarios a encontrar la información que necesitan. Los menús de navegación suelen estar ubicados en los encabezados, barras laterales y pies de página de un sitio web. HubSpot ofrece algunas soluciones integradas para agregar menús a tus páginas, dependiendo de tu caso de uso, pero también puedes crear tus propios menús cuando sea necesario. Tu cuenta también incluye una [página de configuración para crear y administrar menús](#navigation-settings), a la que pueden hacer referencia los distintos métodos de menú. * **Menús predeterminados:** HubSpot proporciona dos tipos de menús predeterminados que se pueden usar de forma inmediata según sea necesario. Estos menús se pueden agregar como módulos en el editor de páginas en [áreas de arrastrar y soltar](https://developers.hubspot.es/docs/cms/start-building/building-blocks/drag-and-drop/overview) o en plantillas, o puedes agregarlos a módulos personalizados usando [etiquetas HubL](#menu-hubl-tags). * **Menú:** comúnmente utilizado para la navegación global, como en el encabezado o pie de página del sitio web, el menú estándar predeterminado te permite seleccionar un menú que hayas establecido en los ajustes de tu navegación, y luego configurarlo aún más con opciones como niveles máximos, configuración de pantalla y orientación. * **Menú simple:** comúnmente utilizado para la navegación específica de la página, como las páginas pilares, el módulo de menú simple te permite crear menús a nivel de página. En lugar de hacer referencia a un menú que has creado en la configuración de navegación, los elementos de menú simples se administran en el editor de contenido y tienen menos opciones de configuración que el menú estándar. Esto permite a los creadores de contenido actualizar menús en páginas específicas según sea necesario sin afectar la navegación global. * **Menús personalizados:** cuando las opciones de menú predeterminadas no se ajusten a tus necesidades, puedes crear tus propias soluciones personalizadas. Esto puede ir desde la creación de módulos personalizados que incluyen menús predeterminados utilizando las [etiquetas menu y simple\_menu de HubL](#menu-hubl-tags) estándar, hasta el uso de la [función menu() de HubL](#menu-hubl-function) para crear una solución completamente personalizada utilizando grupos de repetidores o HubDB. Dicho esto, al crear un menú personalizado complicado, debes tener en cuenta la experiencia del editor. En muchos casos, puede tener más sentido usar los campos `menu` y `simple_menu` junto con la función `menu()` para que haya un equilibrio entre la solución personalizada y la experiencia de edición intuitiva. A continuación, encontrarás más información sobre las diferentes formas de incluir menús en las páginas y cómo gestionar la configuración de navegación en HubSpot. ## Configuración de navegación En cada cuenta, HubSpot incluye la [configuración de navegación](https://knowledge.hubspot.com/website-pages/set-up-your-site-s-navigation-menus) para que puedas crear menús de varios niveles a los cuales hacer referencia en los módulos y etiquetas del menú. Esto crea una única fuente de referencias para un conjunto de elementos del menú, por lo que solo tendrás que actualizar un menú una vez para actualizar todas las páginas que hacen referencia a ese menú. Puedes crear tantos menús como sea necesario, y cada menú viene con opciones para clonar, eliminar, cambiar el nombre y mostrar el historial de revisiones. Para crear y gestionar menús en HubSpot, ve a **Configuración** > **Sitio web** > **Menús de navegación**. Obtén más información sobre la configuración de navegación en la [Base de conocimientos de HubSpot](https://knowledge.hubspot.com/website-pages/set-up-your-site-s-navigation-menus). ![Área de configuración de la navegación](https://cdn2.hubspot.net/hubfs/53/image2-4.png) Cuando se trabaja con menús en HubL, es posible que necesites utilizar el ID del menú para referenciarlo. Esto no se aplica a los menús simples, ya que sus elementos de menú se establecen en el editor. Al crear un módulo personalizado, la forma más fácil de obtener el ID del menú es creando un campo de menú. Este campo permite al creador de contenido seleccionar un menú a partir de un menú desplegable y devuelve el ID del menú. Si necesitas codificar el ID del menú, puedes recuperarlo de la URL cuando veas el menú en la página de configuración de navegación. ![menu-id-in-url](https://www.hubspot.com/hubfs/Knowledge_Base_2023_2024/menu-id-in-url.png) Ten en cuenta que, cuando llegues por primera vez a la página, el ID del menú predeterminado no se mostrará en la URL. Para obtener el ID de ese menú predeterminado, tendrás que seleccionar un menú diferente y luego volver a seleccionar el menú predeterminado. > [!NOTE] > > Una de las mejores prácticas para los encabezados de los sitios, que a menudo contienen la larga navegación principal, es ofrecer un ["enlace "saltar al contenido"](/docs/cms/best-practices/improve-existing-sites/accessibility#adding-a-skip-to-content-link). Esto ayuda a los usuarios que navegan con el teclado a saltarse los menús largos. ## Etiquetas de menú HubL Utiliza las etiquetas `menu` y `simple_menu` de HubL para agregar la funcionalidad del menú a los módulos personalizados. Al agregar la etiqueta a un módulo, se renderizará el menú de la página. Para permitir que los creadores de contenido configuren las opciones del menú en el editor de páginas, también tendrás que incluir el [menú](/docs/cms/reference/fields/module-theme-fields#form) o el [campo de menú simple](/docs/cms/reference/fields/module-theme-fields#simple-menu) en el módulo. A continuación, obtén más información sobre cada tipo de etiqueta de menú. ### Menú estándar La [etiqueta HubL Menú](/docs/cms/reference/hubl/tags/standard-tags#menu) genera un menú HTML estándar con nombres de clase ya proporcionados para los niveles de profundidad, los estados activos y si el elemento tiene hijos. La etiqueta de menú se puede utilizar dentro de los [módulos personalizados](https://developers.hubspot.es/docs/cms/start-building/building-blocks/modules/overview), por lo que es una manera fácil de crear menús de navegación para la navegación principal y la barra lateral. Esta etiqueta espera que proporciones el [ID del menú](#menu-id). ```hubl theme={null} {% menu "menu" %} {% menu "my_menu" id=456, site_map_name='Default', overrideable=False, root_type='site_root', flyouts='true', max_levels='2', flow='horizontal', label='Advanced Menu' %} ``` ### Menú simple La etiqueta [menú simple](/docs/cms/reference/hubl/tags/standard-tags#simple-menu) funciona igual que la etiqueta HubL de menú generando [un menú HTML estándar](https://developers.hubspot.es/docs/guides/cms/content/default-menu-markup) con nombres de clase para los niveles de profundidad, estados activos y si el elemento tiene hijos. La diferencia es que esta etiqueta espera que proporciones un dictado de la estructura del menú en lugar de un ID de menú. Esto es útil para cuando quieres que los campos de un módulo determinen la estructura de un menú en lugar de utilizar la configuración de navegación. Por ejemplo, es posible que quieras utilizar este tipo de módulo para la tabla de contenido de una página pilar. ```hubl theme={null} {% simple_menu menu_tree=[{"contentType": null, "subCategory": null, "pageLinkName": null, "pageLinkId": null, "isPublished": false, "categoryId": null, "linkParams": null, "linkLabel": "Home", "linkTarget": null, "linkUrl": "http://www.hubspot.com", "children": [], "isDeleted": false}, {"contentType": null, "subCategory": null, "pageLinkName": null, "pageLinkId": null, "isPublished": false, "categoryId": null, "linkParams": null, "linkLabel": "About", "linkTarget": null, "linkUrl": "http://www.hubspot.com/internet-marketing-company", "children": [{"contentType": null, "subCategory": null, "pageLinkName": null, "linkUrl": "http://www.hubspot.com/company/management", "isPublished": false, "children": [], "linkParams": null, "linkLabel": "Our Team", "linkTarget": null, "pageLinkId": null, "categoryId": null, "isDeleted": false}], "isDeleted": false}, {"contentType": null, "subCategory": null, "pageLinkName": null, "pageLinkId": null, "isPublished": false, "categoryId": null, "linkParams": null, "linkLabel": "Pricing", "linkTarget": null, "linkUrl": "http://www.hubspot.com/pricing", "children": [], "isDeleted": false}] %} ``` ## Módulos de menú predeterminado HubSpot proporciona módulos predeterminados que puedes agregar a las plantillas codificadas, así como páginas a través del editor de páginas cuando una plantilla incluye [áreas de arrastrar y soltar](/docs/cms/reference/hubl/tags/dnd-areas). Cada módulo tendrá una experiencia de edición diferente, con el menú estándar con más opciones de configuración que el menú simple. Debido a que los módulos no pueden anidarse, no se pueden colocar dentro de otros módulos. En su lugar, debes utilizar las [etiquetas de menú o menú simple](#hubl-menu-tags). ```hubl theme={null} {% module "main_nav" path="@hubspot/menu", label="Menu" id="123456" %} {% module "menu" path="@hubspot/simple_menu", label="Simple Menu" menu_tree=[{"contentType": null, "subCategory": null, "pageLinkName": null, "pageLinkId": null, "isPublished": false, "categoryId": null, "linkParams": null, "linkLabel": "Home", "linkTarget": null, "linkUrl": "http://www.hubspot.com", "children": [], "isDeleted": false}, {"contentType": null, "subCategory": null, "pageLinkName": null, "pageLinkId": null, "isPublished": false, "categoryId": null, "linkParams": null, "linkLabel": "About", "linkTarget": null, "linkUrl": "http://www.hubspot.com/internet-marketing-company", "children": [{"contentType": null, "subCategory": null, "pageLinkName": null, "linkUrl": "http://www.hubspot.com/company/management", "isPublished": false, "children": [], "linkParams": null, "linkLabel": "Our Team", "linkTarget": null, "pageLinkId": null, "categoryId": null, "isDeleted": false}], "isDeleted": false}, {"contentType": null, "subCategory": null, "pageLinkName": null, "pageLinkId": null, "isPublished": false, "categoryId": null, "linkParams": null, "linkLabel": "Pricing", "linkTarget": null, "linkUrl": "http://www.hubspot.com/pricing", "children": [], "isDeleted": false}] %} ``` ### Marcado de menú estándar Los módulos de menú predeterminados funcionan con sus respectivas etiquetas de menú de HubL (`menu` y `simple_menu`) para generar un menú HTML estándar. Al igual que otros módulos de HubSpot, los módulos de menú están envueltos en el marcado de la envoltura del módulo. Estas etiquetas `div` y `span` hacen que el módulo sea editable con el editor de contenidos. El marcado de menú de los módulos de menú y menú simple es el mismo, con la excepción de algunas de las clases aplicadas a la envoltura y a los contenedores de menú. ```html theme={null} ``` Como se muestra arriba, el menú real se muestra como un `ul` envuelto en un `div` con la clase `hs-menu-wrapper`. Esta envoltura tendrá clases adicionales en función de cómo esté configurado el módulo en el editor de páginas, como habilitar los controles flotantes. Obtén más información sobre las [clases agregadas mediante esta configuración](#classes-added-by-settings) a continuación. Dentro del `ul`, cada elemento del menú es una etiqueta `a` envuelta en un `li`. La etiqueta `li` tiene una clase que indica la profundidad del elemento en el árbol de menús (por ejemplo, `hs-menu-depth-1`). Cuando un elemento de menú contiene un elemento secundario anidado, el `li` correspondiente tendrá la clase adicional de `hs-item-has-children`. El menú secundario se representa como un `ul` anidado con la clase `hs-menu-children-wrapper`. Cuando visitas una página que está incluida en tu árbol de menús, la clase `active-branch` se agrega a los elementos `li` principales y una clase de **`active`** se agrega al elemento `li` particular de esa página. ### Estilo de menú estándar A nivel de módulo, ya sea editando un módulo de menú en el editor de páginas o editando un campo de menú en un módulo personalizado, tendrás algunas opciones de configuración. Los campos *Menú*, *Tipo de menú avanzado* y *Niveles máximos* te permiten controlar que los elementos del menú se representen como `li` en el marcado de página. Pero las opciones de orientación y de controles flotantes afectarán a los selectores CSS agregados a la envoltura de menú `div`. Luego, puedes orientar estos selectores en tu CSS. ![menu-options-in-editor](https://www.hubspot.com/hubfs/Knowledge_Base_2023_2024/menu-options-in-editor.png) A continuación, obtén más información sobre las clases que se agregan a la envoltura de menú `div` en función de estos ajustes de campo. | Clase | Descripción | | - | - | | `hs-menu-flow-horizontal` | Se agrega al `div` de la envoltura cuando el menú está configurado en orientación horizontal. | | `hs-menu-flow-vertical` | Se agrega al `div` de la envoltura cuando el menú está configurado en orientación vertical. | | `flyouts` | Se agrega al `div` de la envoltura cuando se selecciona *Activar controles flotantes*. | | `no-flyouts` | Se agrega al `div` de la envoltura cuando no se selecciona *Activar controles flotantes*. | Para empezar a diseñar los menús, a continuación se muestran algunos ejemplos de selectores CSS que se pueden utilizar para diseñar la etiqueta de menú y el módulo de menú predeterminado. ```css theme={null} /* Menus */ .hs-menu-wrapper ul { /* Targets all unordered lists within HubSpot menus */ } /* Horizontal Menu ========================================================================== */ .hs-menu-wrapper.hs-menu-flow-horizontal ul { /* Targets all unordered lists within horizontal menus */ } .hs-menu-wrapper.hs-menu-flow-horizontal ul li { /* Targets all list items within horizontal menus */ } .hs-menu-wrapper.hs-menu-flow-horizontal ul li a { /* Targets all links within horizontal menus */ } .hs-menu-wrapper.hs-menu-flow-horizontal > ul { /* Targets the top-level unordered list within horizontal menus */ } .hs-menu-wrapper.hs-menu-flow-horizontal > ul li.hs-menu-depth-1 { /* Targets top-level list items within the top-level unordered list */ } .hs-menu-wrapper.hs-menu-flow-horizontal > ul li a { /* Targets top-level list links within the top-level unordered list */ } .hs-menu-wrapper.hs-menu-flow-horizontal > ul li.hs-item-has-children { /* Targets list items with children with the top-level unordered list */ } .hs-menu-wrapper.hs-menu-flow-horizontal.flyouts > ul li.hs-item-has-children ul.hs-menu-children-wrapper { /* Targets second-level unordered lists when flyouts are enabled (for styling dropdowns) */ } .hs-menu-wrapper.hs-menu-flow-horizontal > ul li.hs-item-has-children ul.hs-menu-children-wrapper li a { /* Targets links within second-level unordered lists */ } .hs-menu-wrapper.hs-menu-flow-horizontal.flyouts > ul li.hs-item-has-children ul.hs-menu-children-wrapper li.hs-item-has-children ul.hs-menu-children-wrapper { /* Targets third-level unordered lists (for styling dropdowns)*/ } .hs-menu-wrapper.hs-menu-flow-horizontal.flyouts > ul li.hs-item-has-children:hover > ul.hs-menu-children-wrapper { /* Targets second-level unordered list when top-level menu item is hovered (use to reveal dropdowns) */ } .hs-menu-wrapper.hs-menu-flow-horizontal > ul li.hs-item-has-children.active-branch { /* Targets top-level active branch unordered list */ } .hs-menu-wrapper.hs-menu-flow-horizontal > ul li.hs-item-has-children.active-branch > ul.hs-menu-children-wrapper { /* Targets second-level unordered list within active branch */ } .hs-menu-wrapper.hs-menu-flow-horizontal li.active a { /* Targets the link within the active list item */ } /* Vertical Menu ========================================================================== */ .hs-menu-wrapper.hs-menu-flow-vertical ul { /* Targets all unordered lists within vertical menus */ } .hs-menu-wrapper.hs-menu-flow-vertical ul li a { /* Targets all list items within vertical menus */ } .hs-menu-wrapper.hs-menu-flow-vertical ul li a { /* Targets all links within vertical menus */ } .hs-menu-wrapper.hs-menu-flow-vertical > ul { /* Targets the top-level unordered list within vertical menus */ } .hs-menu-wrapper.hs-menu-flow-vertical > ul li.hs-menu-depth-1 > a { /* Targets top-level links in vertical menus */ } .hs-menu-wrapper.hs-menu-flow-vertical > ul li.hs-item-has-children { /* Targets top-level list items with children */ } /* No flyouts ========================================================================== */ .hs-menu-wrapper.hs-menu-flow-vertical.no-flyouts .hs-menu-children-wrapper { /* Targets child menus when flyouts are disabled */ } .hs-menu-wrapper.hs-menu-flow-horizontal.no-flyouts > ul li.hs-item-has-children ul.hs-menu-children-wrapper { /* Targets second-level child menus when flyouts are disabled */ } ``` ## Función menu() de HubL La función [menu()](/docs/cms/reference/hubl/functions#menu) existe para permitirte crear estructuras de menú totalmente personalizadas. Devuelve un objeto por el que se puede iterar para generar un menú, hay muchas [propiedades proporcionadas para los elementos del menú](/docs/cms/reference/hubl/variables#menu-node-variables). Ten en cuenta que cuando utilizas la función de menú [eres totalmente responsable de la accesibilidad de tu menú](/docs/cms/best-practices/improve-existing-sites/accessibility), la estructura y el estilo. ```hubl theme={null} {% set node = menu(987) %} {% for child in node.children %} {{ child.label }}
{% endfor %} {% set default_node = menu("default") %} {% for child in default_node.children %} {{ child.label }}
{% endfor %} ``` La [biblioteca de temas de CMS Hub](https://github.com/HubSpot/cms-theme-boilerplate) contiene un [módulo de menú de ejemplo construido con la función menu()](https://github.com/HubSpot/cms-theme-boilerplate/blob/main/src/modules/menu.module/module.html). Puedes modificar eso para satisfacer tus necesidades para hacer menús complicados. # Resumen de los módulos Source: https://developers.hubspot.es/docs/cms/start-building/building-blocks/modules/overview Entender los módulos es clave para entender el CMS de HubSpot y su potencia. Los módulos son componentes reutilizables que se pueden usar en plantillas o agregarse a páginas por medio de áreas de arrastrar y soltar y columnas flexibles. Entender los módulos es clave para entender el CMS de HubSpot y su potencia. Los módulos son componentes reutilizables que se pueden usar en plantillas o agregarse a páginas por medio de [áreas de arrastrar y soltar](/docs/cms/start-building/building-blocks/drag-and-drop/tutorial) y [columnas flexibles](https://developers.hubspot.es/docs/cms/reference/hubl/tags/standard-tags#flexible-column). Además de utilizar los módulos que HubSpot proporciona, los desarrolladores pueden crear sus propios módulos para todo, desde testimonios hasta galerías de fotos. Los módulos se crean [con las herramientas de desarrollo locales](/docs/cms/start-building/building-blocks/modules/overview) o [con el Administrador de diseño](https://knowledge.hubspot.com/design-manager/create-and-edit-modules). Un módulo consta de dos partes: 1. Una [interfaz de usuario](#the-user-interface-for-editing) creada a través de una lista de campos que los usuarios verán al editar una instancia del módulo. 2. Un fragmento de plantilla HTML+HubL con CSS y JS asociados que define cómo se generará el HTML ## Un ejemplo Para entender mejor lo que es un módulo, veamos un simple módulo de "Miembro del equipo". El módulo consiste en una foto, el nombre del miembro del equipo, su título y una breve biografía, y cuando forma parte de una página web del CMS: ![Instancia del módulo de miembros del equipo](https://cdn2.hubspot.net/hubfs/53/team-member-module-instance.png) ### La interfaz de usuario para la edición El desarrollador construye la interfaz de usuario (UI) de los módulos mediante campos. A continuación, el desarrollador elige qué campos utilizar en función del tipo de módulo que se está construyendo, los datos que se necesitan y la experiencia de edición. En este caso, el módulo incluye: 1. Un campo de imagen, para la foto de un miembro del equipo 2. Dos campos de texto, para el nombre y el cargo del miembro del equipo 3. Y un campo de texto enriquecido, para una breve biografía. Cuando un creador de contenido edita un módulo, la interfaz de usuario se construye basándose en los campos que el desarrollador ha agregado al módulo y en cómo está configurado cada campo. ![Editor del módulo de miembros del equipo](https://cdn2.hubspot.net/hubfs/53/team-member-editor.png) ## Módulo frente a instancia de módulo Hay dos términos que se utilizan con frecuencia en relación con los módulos. Es importante entender la diferencia entre ellos. * **Módulo** - bloques de construcción reutilizables que se pueden agregar a las plantillas y páginas. * **Instancia de módulo** - los módulos individuales renderizados en la página. Pueden tener valores de campo separados y, como resultado, tener un aspecto diferente de otras instancias de módulos que son para el mismo módulo. ## Fields.json Los campos de un módulo se definen en JSON como una matriz de objetos. Cada campo tiene un nombre, un tipo y un valor predeterminado. También hay otras propiedades disponibles en función del tipo de campo que controla la experiencia de edición. ```json theme={null} // fields.json [ { "name": "team_member_photo", "label": "Team Member Photo", "required": true, "responsive": true, "resizable": true, "type": "image", "default": { "src": "", "alt": "" } }, { "name": "team_member_name", "label": "Team member name", "required": true, "type": "text", "default": "Joshua Beck" }, { "name": "team_member_position", "label": "Team member position", "required": true, "type": "text", "default": "CEO, Co-Founder" }, { "name": "team_member_bio", "label": "Team member bio", "required": true, "type": "richtext", "default": "

Joshua has over 20 years of experience in the tech industry. He helped start this company in 2015 with the mission of helping people grow. In his spare time he loves hanging out with his kids, going to the beach, and cooking.

" } ] ``` Para obtener más información sobre todos los campos disponibles, consulta [Campos de Módulos y Temas](https://developers.hubspot.es/docs/cms/reference/fields/module-theme-fields). ### Uso de los datos de los campos del módulo para la representación de HTML Los valores de cada campo están disponibles en el fragmento HTML+HubL de un módulo a través de una variable `module`. Se puede acceder a los datos de cada campo a través de las propiedades de la variable del módulo. Utilizando el módulo de miembros del equipo como ejemplo, se puede acceder al nombre del miembro del equipo a través de `{{ module.team_member_name }}`. ```hubl theme={null}
{{ module.team_member_image.alt }}

{{ module.team_member_name }}

{{ module.team_member_position }}

{{ module.team_member_bio }}
``` ## Usar módulos en plantillas Los módulos se agregan a las plantillas utilizando la etiqueta [module](https://developers.hubspot.es/docs/cms/reference/modules/using-modules-in-templates#basic-module-syntax), [module\_block](https://developers.hubspot.es/docs/cms/reference/modules/using-modules-in-templates#block-syntax) o [dnd\_module](https://developers.hubspot.es/docs/cms/reference/hubl/tags/dnd-areas) y especificando la ruta del módulo como parámetro. Los valores predeterminados de los campos de un módulo también pueden anularse a nivel de plantilla agregando parámetros a la etiqueta del módulo que corresponde al nombre del campo, como se muestra en la segunda parte del ejemplo siguiente. ```hubl theme={null} {% module "unique_identifier" path="/modules/team-member.module" %} {# override default values in a module instance #} {% module "unique_identifier" path="/modules/team-member.module", team_member_name="Brian Halligan", team_member_position="CEO" %} ``` > [!NOTE] > > Los módulos no pueden agregarse unos dentro de otros. La mayoría de las veces que se quiere hacer esto, suele ser por razones de diseño. Las secciones en las [áreas de arrastrar y soltar](/docs/cms/start-building/building-blocks/drag-and-drop/overview), son a menudo el mejor curso de acción. ## Los módulos son una gran herramienta en la caja de herramientas de la accesibilidad Los módulos se utilizan en todo un sitio web, a veces en varias páginas, incluso varias veces en una página. Por ello, [construir el HTML, el CSS y el JS de tu módulo teniendo en cuenta la accesibilidad](https://developers.hubspot.es/docs/cms/best-practices/improve-existing-sites/accessibility) puede tener un efecto profundo en la facilidad de uso de tu sitio para las personas con y sin discapacidades o impedimentos. ## Los módulos pueden facilitar la localización En un sentido similar al de la accesibilidad, la construcción de módulos de manera que todo el contenido del módulo se base en campos, hace posible la localización posterior. Por ejemplo, podrías tener un módulo como "Artículos destacados". En lugar de codificar el texto "Artículos destacados", utiliza un campo de texto o de texto enriquecido. A continuación, se puede cambiar el texto para otros idiomas. Para saber más sobre la localización en el CMS, consulta el apartado [varios idiomas](https://developers.hubspot.es/docs/cms/start-building/features/multi-language-content). ## Primeros pasos Para empezar, consulta nuestro tutorial de [Primeros pasos con módulos](/docs/cms/start-building/building-blocks/modules/overview). ## Ir más allá * [Configurar un módulo](https://developers.hubspot.es/docs/cms/reference/modules/configuration) * [Usar módulos en plantillas](https://developers.hubspot.es/docs/cms/reference/modules/using-modules-in-templates) * [Módulos predeterminados](https://developers.hubspot.es/docs/cms/reference/modules/default-modules) * [Editor de módulos](/docs/cms/start-building/building-blocks/modules/overview) # Resumen del tema Source: https://developers.hubspot.es/docs/cms/start-building/building-blocks/overview Construir temas de CMS de HubSpot que permitan a los desarrolladores construir sistemas de diseño para que los creadores de contenido trabajen dentro de ellos. Un tema es una colección portátil y contenida de materiales para desarrolladores diseñada para permitir una experiencia de edición de contenido flexible. Puedes [construir temas localmente usando la CLI de HubSpot](/docs/developer-tooling/local-development/hubspot-cli/install-the-cli) utilizando las herramientas, tecnologías y workflows que prefieras. Los temas y todos sus archivos también son portables entre entornos y cuentas. Para ver un video de cómo empezar a desarrollar temas, ve el video de HubSpot Academy a continuación: ## Temas como un paquete Los temas son un paquete que se extiende por toda la aplicación de HubSpot en varios lugares para permitir una experiencia eficiente de creación de contenido. Los desarrolladores pueden utilizar los temas para construir un sistema de diseño con el que los creadores de contenido puedan trabajar. Cualquier cantidad de flexibilidad, o barandillas pueden ser construidas en un tema para satisfacer las necesidades de tu negocio. ### Crear páginas Cuando los creadores de contenido comienzan a crear nuevas páginas, se les pide que empiecen por seleccionar el tema desde el que van a crear una página, seguido de la selección de la plantilla que van a utilizar dentro del tema. ![Selección de temas dentro de HubSpot](https://cdn2.hubspot.net/hubfs/53/theme%20selection.gif) La imagen de vista preliminar del tema, así como otras configuraciones de un tema, se definen en el [archivo theme.json](#theme-json). ### Campos temáticos Los temas permiten a los desarrolladores crear un conjunto de [campos temáticos](#fields-json), similares a los campos de los módulos, que permiten a los creadores de contenido ajustar varios mandos y diales diseñados por un desarrollador para permitir el control estilístico global de un sitio web sin tener que editar el CSS. Los desarrolladores [utilizan HubL para acceder a los valores de los campos temáticos](#using-theme-field-values) en todo su CSS. Los creadores de contenido utilizan el Editor de temas para modificar los campos del tema, previsualizar esos cambios con las plantillas existentes dentro de un tema y publicar sus cambios. ![temas](https://cdn2.hubspot.net/hubfs/53/themes.gif) Los campos de los temas son dictados por el [archivo fields.json de un tema](#fields-json). Al editar un tema en [modo de prueba](/docs/cms/start-building/building-blocks/overview#test-mode), también puedes copiar la configuración JSON del tema. Esto te permite pegar cualquier actualización en el archivo `fields.json` local del tema. ![copy-theme-settings-test-mode](https://www.hubspot.com/hubfs/Knowledge_Base_2021/Developer/copy-theme-settings-test-mode.png) ### Módulos de tema Los módulos de un tema deben estar diseñados específicamente para su uso dentro de las plantillas de ese tema. El editor de contenido destacará estos módulos temáticos, lo que hará que los creadores de contenido puedan agregar de forma rápida y sencilla módulos a las páginas que están construyendo y que están diseñados para funcionar bien en el contexto de esa página. Los módulos predeterminados y el resto de módulos de tu cuenta HubSpot seguirán estando disponibles. ![Módulos temáticos dentro de un tema](https://cdn2.hubspot.net/hubfs/53/theme%20modules.png) Al desarrollar un tema, puedes [ocultar módulos y secciones del editor de páginas](/docs/cms/start-building/building-blocks/modules/hide-modules-and-sections) para crear una experiencia de creación de contenido más ágil. ## Estructura de los archivos del tema Un tema es un único directorio de archivos. Puedes incluir archivos HTML, CSS y Javascript, módulos y archivos adicionales que pueden organizarse de cualquier manera dentro de los subdirectorios de la carpeta del tema principal. Se necesitan dos archivos JSON para construir un tema: `theme.json` y `fields.json`. Estos archivos deben incluirse en la carpeta raíz del tema. Para comenzar con un ejemplo, consulta la [plantilla de CMS de HubSpot](https://github.com/HubSpot/cms-theme-boilerplate). ![estructura de los archivos del tema](https://designers.hubspot.com/hs-fs/hubfs/theme%20file%20structure.png?width=599\&height=452\&name=theme%20file%20structure.png) > [!NOTE] > > En este momento los archivos .json sólo pueden ser creados y cargados a una cuenta de HubSpot a través de las [herramientas de desarrollo local](/docs/developer-tooling/local-development/hubspot-cli/install-the-cli). ### theme.json El archivo `theme.json` contiene la metainformación para tu directorio de temas, como la etiqueta legible de los temas, su captura de pantalla de vista preliminar y varias configuraciones de cómo debe comportarse el tema. Tu archivo `theme.json` tendrá un aspecto similar al siguiente: ```json theme={null} // theme.json { "label": "Cool Theme", "preview_path": "./templates/home-page.html", "screenshot_path": "./images/templates/homepage.jpg", "enable_domain_stylesheets": false, "version": "1.0", "author": { "name": "Jon McLaren", "email": "noreply@hubspot.com", "url": "https://theme-provider.com/" }, "documentation_url": "https://theme-provider.com/cool-theme/documentation", "license": "./license.txt", "example_url": "https://theme-provider.com/cool-theme/demo", "is_available_for_new_content": true } ``` | Parámetro | Tipo | Descripción | | - | - | - | | `label` | Cadena | La etiqueta legible del tema, utilizada en varios lugares en los que el tema se muestra en toda la aplicación HubSpot, como la pantalla de selección de plantillas y el editor de temas. | | `preview_path` | Cadena | Una ruta relativa a un archivo de plantilla en el tema que debería ser la plantilla predeterminada, utilizada cuando se previsualiza un tema en el editor de temas. | | `screenshot_path` | Cadena | Una ruta relativa a un archivo de imagen que se utiliza para dar una instantánea del aspecto del tema en varios lugares donde se produce la selección del tema, como en la pantalla de selección de plantillas. | | `enable_domain_stylesheets` | Booleano | Activar o desactivar las hojas de estilo adjuntas a los dominios en la configuración del sitio web para que se incluyan en las plantillas del tema. El valor predeterminado es `false`. | | `version` | Cadena | Número entero de la versión que admite `.` versiones. | | `Author` | Objeto | Objeto para proporcionar información sobre ti como proveedor del tema.`name` El nombre del proveedor. `email` La dirección de correo electrónico de soporte del proveedor. `url` El sitio web del proveedor. | | `documentation_url` | Cadena | Enlace a la documentación del tema. | | `example_url` | Cadena | Enlace de ejemplo del tema activo. | | `license` | Cadena | Un [identificador SPDX](https://spdx.org/licenses/) válido o la ruta relativa a la licencia dentro del tema. Esta licencia dicta el uso y la modificación que permite el creador del tema. Útil cuando se envía al mercado. | | `is_available_for_new_content` | Booleano | Booleano que determina si un tema se muestra en la página del creador de contenido para su selección. El valor predeterminado es `true`. | ### fields.json El archivo `fields.json` controla los campos disponibles y los grupos de campos en el editor de temas, incluidos los [campos de estilo](https://developers.hubspot.es/docs/cms/reference/fields/overview#style-fields). Los campos que incluyas dependerán del control que quieras que tengan los creadores de contenido en el editor de páginas. El número de campos disponibles para los temas es más limitado que para los módulos, ya que los campos del tema son mejores para las opciones de estilo, mientras que el [contenido global](/docs/cms/start-building/building-blocks/global-content) es mejor para el contenido del tema. Por ejemplo, en lugar de agregar un campo de texto al `field.json` del tema para el eslogan de tu sitio, deberías agregarlo como un módulo global para que los creadores de contenido puedan actualizar el eslogan desde el editor de la página en lugar del editor del tema. Los campos que están disponibles para su uso en los temas son: * [Boolean](/docs/cms/reference/fields/module-theme-fields#boolean) * [Border](/docs/cms/reference/fields/module-theme-fields#border) * [Choice](/docs/cms/reference/fields/module-theme-fields#choice) * [Color](/docs/cms/reference/fields/module-theme-fields#color) * [Font](/docs/cms/reference/fields/module-theme-fields#font) * [Image](/docs/cms/reference/fields/module-theme-fields#image) * [Number](/docs/cms/reference/fields/module-theme-fields#number) * [Spacing](/docs/cms/reference/fields/module-theme-fields#spacing) Para obtener una documentación completa sobre las posibles opciones de los campos temáticos, consulta la [documentación sobre módulos y campos temáticos](/docs/cms/reference/fields/module-theme-fields). #### Utilizar los valores de los campos temáticos Para acceder a los valores del campo, utiliza la notación de puntos y antepón la ruta al valor en `fields.json` con el tema. Puedes utilizar el valor de los campos temáticos en tus hojas de estilo utilizando una sintaxis como `{{ theme.path.to.value }}`. Por ejemplo, el campo de la fuente que se describe a continuación: ```json theme={null} // fields.json [ { "type": "group", "name": "typography", "label": "Typography", "children": [ { "type": "font", "name": "h1_font", "label": "Heading 1", "load_external_fonts": true, "default": { "color": "#000", "font": "Merriweather", "font_set": "GOOGLE", "variant": "700", "size": "48" } } ] } ] ``` Se debe referenciar en el CSS con: ```css theme={null} h1 { font-size: {{ theme.typography.h1_font.size }}px; font-family: {{ theme.typography.h1_font.font }}; color: {{ theme.typography.h1_font.color }}; text-decoration: {{ theme.typography.h1_font.styles.text-decoration }}; font-style: {{ theme.typography.h1_font.styles.font-style }}; font-weight: {{ theme.typography.h1_font.styles.font-weight }}; } ``` ## Vista preliminar de temas Para los desarrolladores, a veces es necesario poder probar que los campos de tu tema funcionan correctamente, pero no quieren afectar a las páginas reales. Ahí es donde entra el modo de prueba de temas. ### Modo de prueba El modo de prueba te ofrece un entorno seguro para poder jugar con los campos de tu tema y asegurarte de que funcionan como espera. La interfaz tiene el mismo aspecto que la [vista preliminar/el editor de temas que pueden ver los creadores de contenido](https://knowledge.hubspot.com/website-and-landing-pages/edit-your-theme-settings#edit-theme-settings), pero puedes estar seguro de que no estás cambiando la configuración real de tu sitio web. Para protegerte contra actualizaciones accidentales de la configuración del tema, la publicación estará bloqueada en el modo de prueba. Puedes saber si estás en modo de prueba cuando `?testmode=true` aparece en la barra de direcciones y un ícono de modo de prueba se muestra en el encabezado del editor de temas. ![Modo de prueba/vista preliminar de temas](https://f.hubspotusercontent00.net/hubfs/53/theme-test-mode.png) Hay dos maneras de habilitar el modo de prueba: * Para activar el modo de prueba del administrador de diseño: * En el administrador de diseño, selecciona tu **tema** en el Finder. * En la parte superior de la barra lateral izquierda, haz clic en el botón **Vista previa**. ![copy-theme-settings-test-mode-design-manager (1)](https://www.hubspot.com/hubfs/Knowledge_Base_2021/Developer/copy-theme-settings-test-mode-design-manager%20\(1\).png) * Para activar el modo de prueba desde el editor de páginas: * En el editor de páginas, haz clic en la pestaña **Diseño** en la barra lateral izquierda y luego haz clic en **Editar configuración del tema**. ![page-editor-edit-theme](https://www.hubspot.com/hubfs/Knowledge_Base_2021/Developer/page-editor-edit-theme.png) * Agrega `?testmode=true` a la URL, y luego presiona **Intro**. Estarás en modo de prueba. Otro método es abrir la configuración del tema desde el editor de la página. Luego, una vez dentro, agrega el parámetro de consulta `?testmode=true` a la URL en la barra de direcciones. ## Recursos relacionados * [Primeros pasos para usar temas](/docs/cms/start-building/building-blocks/themes/getting-started) * [Cómo agregar capacidades temáticas a los sitios existentes](/docs/cms/best-practices/improve-existing-sites/add-theme-features-to-existing-sites) * [Plantilla de temas de HubSpot](/docs/cms/start-building/building-blocks/themes/hubspot-cms-boilerplate) # Secciones Source: https://developers.hubspot.es/docs/cms/start-building/building-blocks/sections/sections Las secciones son el elemento secundario más externo de un dnd_area. Las secciones pueden reutilizarse mediante plantillas de sección o guardándolas en el editor de páginas. El contenedor más externo de un [área de arrastrar y soltar](https://developers.hubspot.es/docs/cms/start-building/building-blocks/drag-and-drop/overview) se llama sección. Las secciones no pueden anidarse dentro de ningún otro [elemento dnd](https://developers.hubspot.es/docs/cms/start-building/building-blocks/drag-and-drop/overview#drag-and-drop-areas-and-their-elements), pero pueden contener módulos, [filas](https://developers.hubspot.es/docs/cms/start-building/building-blocks/drag-and-drop/overview#row) y [columnas](https://developers.hubspot.es/docs/cms/start-building/building-blocks/drag-and-drop/overview#column). En el editor de páginas, los creadores de contenido pueden añadir secciones a la página, y luego modificarlas y aplicarles el estilo que necesiten. Los creadores de contenidos también pueden crear y guardar secciones para utilizarlas en otras páginas dentro del mismo tema, haciendo más eficiente la creación de contenidos. En este artículo, aprenderás más sobre las secciones y cómo utilizarlas en el editor de páginas. Al desarrollar un tema, puedes [ocultar módulos y secciones](/docs/cms/start-building/building-blocks/modules/hide-modules-and-sections) del editor de páginas para optimizar la experiencia de creación de contenido. ![editor de páginas añadir sección reutilizable UI](https://www.hubspot.es/hubfs/page%20editor%20add%20reusable%20section%20UI.gif) ## Resumen Las secciones pueden ser creadas [en el editor de contenidos por un creador de contenidos](https://knowledge.hubspot.com/es/website-pages/edit-page-content-in-a-drag-and-drop-area#create-a-section) o incorporadas por un desarrollador en un archivo [`dnd_area`](https://developers.hubspot.es/docs/cms/start-building/building-blocks/drag-and-drop/overview)con la etiqueta [`dnd_section`](/docs/cms/reference/hubl/tags/dnd-areas#drag-and-drop-section-code-dnd-section-code-). Las opciones de estilo disponibles en el editor también se pueden utilizar al codificar una plantilla. Por ejemplo: ```hubl theme={null}
{% dnd_area 'dnd_area' label='Main section', %} {% dnd_section background_image={ 'backgroundPosition': 'MIDDLE_CENTER', 'backgroundSize': 'cover', 'imageUrl': 'https://example.com/path/to/image.jpg' }, margin={ 'top': 32, 'bottom': 32 }, padding={ 'top': '1em', 'bottom': '1em', 'left': '1em', 'right': '1em' }, max_width=1200, vertical_alignment='MIDDLE' %} {% end_dnd_section %} {% end_dnd_area %}
``` Para obtener una documentación completa de todos los parámetros disponibles de los elementos de arrastrar y soltar y ejemplos de uso, obtén más información sobre [las etiquetasdnd\_area ](/docs/cms/reference/hubl/tags/dnd-areas). Puedes usar secciones para estructurar rápidamente plantillas que sean fáciles de leer. Como solo estás especificando en el contexto donde las instancias específicas de la plantilla son diferentes, aún puedes volver y modificar esa plantilla de sección. > [!WARNING] > > **Nota:** Modificar una sección la actualizará en todas las instancias donde se encuentre, excepto para las páginas existentes que utilicen una plantilla que haga referencia a esa sección. Por otra parte, las páginas creadas previamente con una plantilla que incluía una sección deberán actualizarse manualmente para utilizar la nueva versión de dicha sección. Así evitarás hacer cambios accidentalmente. Para actualizar una sección a la última versión, un creador de contenidos puede ir al editor de páginas, añadir la nueva sección a la página y, luego, eliminar la versión antigua. ## Crear secciones reutilizables Dentro de un tema, puedes incluir secciones preconfiguradas que los creadores de contenido pueden añadir a las páginas que utilicen ese tema dentro del editor de páginas. Estas secciones reutilizables se crean como archivos de plantilla de sección y se codifican con la misma sintaxis que utilizarías dentro de un `dnd_area`. > [!WARNING] > > **Nota:** Para que una sección esté disponible para varios temas, tendrás que añadir el archivo de la plantilla de la sección a cada tema. Del mismo modo, las secciones creadas por los creadores de contenidos en el editor de contenidos solo estarán disponibles dentro de ese tema. A continuación, aprenderás a crear los archivos de plantilla de sección y a referenciarlos en otros archivos de plantilla. ### Archivos de plantillas de secciones Las plantillas de sección se indican con `templateType: section` en su [anotación de plantilla](/docs/cms/start-building/building-blocks/templates/html-hubl-templates#template-annotations). ```html theme={null} ``` | Parámetro | Tipo | Descripción | Valor | | - | - | - | - | | `templateType` | Cadena | Define el tipo de plantilla que determina dónde puede usarse y qué datos estarán disponibles para su uso. | `section` | | `label` | Cadena | Se utiliza en el editor de páginas para proporcionar un nombre legible de la sección. | | | `description` | Cadena | Descripción adicional de la sección más allá de lo que puede inlcuir una etiqueta. Se muestra en el editor de páginas. 255 caracteres como máximo. | | | `screenshotPath` | Cadena/ruta | Ruta a una captura de pantalla de la sección. Se utiliza para dar a los creadores de contenidos una referencia visual del aspecto de la sección. | | Una plantilla de sección debe comenzar y terminar con una etiqueta `dnd_section` . Solo puede existir un `dnd_section` dentro de una plantilla de sección. Dentro de esa sección, puedes colocar módulos, filas y columnas, siguiendo las mismas reglas de `dnd_area` que se aplican al [añadir un dnd\_area a una plantilla de página](/docs/cms/reference/hubl/tags/dnd-areas#dnd-area). La excepción es que solo defines el contenido para una sección y sus elementos secundarios de arrastrar y soltar. ```hubl theme={null} {% dnd_section padding={ 'top': 200, 'right': 20, 'bottom': 200, 'left': 20 }, background_image={ 'backgroundPosition': 'MIDDLE_CENTER', 'backgroundSize': 'cover', 'imageUrl': context.backgroundImage || get_asset_url('../images/blank-page-banner.png') }, max_width=778, vertical_alignment='MIDDLE' %} {% dnd_column %} {% dnd_row %} {% dnd_module path='@hubspot/rich_text' %} {% module_attribute 'html' %}
{{ context.content || '

Communicate Your Way

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus dapibus posuere mi, in pretium ante posuere a. Aliquam a risus at eros molestie pretium.

' }}
{% end_module_attribute %} {% end_dnd_module %} {% end_dnd_row %} {% dnd_row %} {% dnd_module path='../modules/button', button_text={{ context.buttonText || 'Subscribe' }} horizontal_alignment='CENTER' %} {% end_dnd_module %} {% end_dnd_row %} {% end_dnd_column %} {% end_dnd_section %} ``` ### Añadir un parcial de sección a una plantilla Después de crear una sección, puedes hacer referencia a ella dentro de `dnd_area` utilizando una etiqueta `include_dnd_partial` . Esta etiqueta proporciona la ruta que usa al archivo de la sección, como se muestra a continuación: ```hubl theme={null} {% dnd_area 'dnd_area' class='body-container body-container--home-page', label='Main section' %} {# Banner Section #} {% include_dnd_partial path='../sections/banner.html' context={} %} {# End Banner Section #} {% end_dnd_area %} ``` > [!NOTE] > > En el ejemplo anterior, ten en cuenta el argumento de contexto de la etiqueta `include_dnd_partial` . Esto te permite pasar variables específicas de la instancia desde la plantilla de página a la sección, reemplazando los valores predeterminados en el archivo de la sección. Para más información, [consulta el contexto de la sección](#section-context) . ### Contexto de la sección Puedes utilizar variables de contexto de la sección para anular los valores predeterminados al nivel de la sección y el módulo. Las variables de contexto de la sección tú las defines y no están asociadas directamente a los módulos y sus campos. En la plantilla de tu página puedes ajustar estas variables de contexto mediante el parámetro `context` de la etiqueta `include_dnd_partial` . ```hubl theme={null} {% dnd_area 'dnd_area' class='body-container body-container--home-page', label='Main section' %} {# Banner Section #} {% include_dnd_partial path='../sections/banner.html' context={ 'content': '

Home Page

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus dapibus posuere mi, in pretium ante posuere a. Aliquam a risus at eros molestie pretium.

', 'buttonText': 'Buy Now' } %} {# End Banner Section #} {% end_dnd_area %} ``` Cualquier variable que añadas a tu parámetro `context` estará disponible para referenciarla dentro de tu plantilla de sección. El siguiente ejemplo muestra cómo ajustar la URL de la imagen y el contenido del área de texto enriquecido y del botón en contexto, si existe. ```hubl theme={null} {% dnd_section background_image={ 'backgroundPosition': 'MIDDLE_CENTER', 'backgroundSize': 'cover', 'imageUrl': context.backgroundImage || get_asset_url('../images/blank-page-banner.png') }, max_width=778 %} {% dnd_column %} {% dnd_row %} {% dnd_module path='@hubspot/rich_text' %} {% module_attribute 'html' %}
{{ context.content || '

Communicate Your Way

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus dapibus posuere mi, in pretium ante posuere a. Aliquam a risus at eros molestie pretium.

' }}
{% end_module_attribute %} {% end_dnd_module %} {% end_dnd_row %} {% dnd_row %} {% dnd_module path='../modules/button', button_text={{ context.buttonText || 'Subscribe' }} horizontal_alignment='CENTER' %} {% end_dnd_module %} {% end_dnd_row %} {% end_dnd_column %} {% end_dnd_section %} ``` > [!NOTE] > > Ten en cuenta que en todas partes donde se utilizan las variables de contexto, hay un filtro `||` *OR* para proporcionar contenido predeterminado en caso de que no se especifique ninguno. Por ejemplo, en el módulo botón, si `context.buttonText` tiene un valor, la página lo utilizará. De lo contrario, el texto será `Subscribe`. ### Clases de secciones En las plantillas de sección, puedes añadir clases al contenedor de la sección utilizando el parámetro clase. Esto añadirá la clase que especifiques al campo class del elemento html de la sección dnd. Siempre que sea posible, se recomienda utilizar controles de estilo integrados en las secciones para que los creadores de contenidos puedan modificarlos. > [!WARNING] > > **Nota:** Las clases de secciones solo se admiten en las plantillas de sección. ```hubl theme={null} {% dnd_section class='my-hero-section' padding={ 'top': 200, 'right': 20, 'bottom': 200, 'left': 20 }, background_image={ 'backgroundPosition': 'MIDDLE_CENTER', 'backgroundSize': 'cover', 'imageUrl': context.backgroundImage || get_asset_url('../images/blank-page-banner.png') }, max_width=778, vertical_alignment='MIDDLE' %} ... ``` > [!WARNING] > > Los creadores de contenido no pueden editar, añadir o eliminar clases. Sólo pueden "eliminarse" recreando una sección manualmente en el editor. > > Además, debes evitar cambiar el diseño de los elementos secundarios de sección utilizando CSS o JavaScript. Hacerlo puede crear una experiencia desagradable para el creador de contenidos durante la de edición de páginas. ### Vista previa de tu sección La forma más sencilla de obtener una vista previa de tu sección mientras desarrollas, es utilizar el administrador de diseño. Abre una plantilla que contenga una etiqueta [`dnd_area`](/docs/cms/reference/hubl/tags/dnd-areas) que llama a tu plantilla de sección utilizando una etiqueta `include_dnd_partial` . En la esquina superior derecha, haz clic en vista previa. De esta forma puedes seguir actualizando tu sección y ver tus cambios reflejados al instante. Esto es mucho más eficaz que tener que crear una página nueva para cada cambio que hagas. ## Copiar HubL de la sección En el editor de páginas, puedes copiar el marcado HubL de una sección para reutilizar el código según sea necesario. Esto puede ser útil cuando se quiere recrear una sección de arrastrar y soltar en un archivo codificado. Para copiar el marcado HubL de una sección: * Ve al contenido: * **Páginas web**: en tu cuenta de HubSpot, navega hasta **Marketing** > **Sitio web** > **Páginas web**. * **Páginas de destino**: en tu cuenta de HubSpot, navega hasta **Marketing** > **Landing Pages**. * Coloca el cursor sobre una página y haz clic en **Editar**. * En el editor de páginas, agrega el siguiente parámetro a la URL y luego presiona **Introducir**: `?developerMode=true` * Una vez la página cargue de nuevo, estarás en modo desarrollador. Parra salir del modo de desarrollador en cualquier momento, haz clic en **Salir del modo de desarrollador** en la parte superior derecha. ![exit-modo-desarrollador0](https://www.hubspot.es/hubfs/exit-developer-mode0.png) * Coloca el cursor sobre la sección que quieras copiar y haz clic en el **icono de flecha hacia abajo** . Selecciona **Copiar como HubL**. La marca HubL se copiará en tu portapapeles. ![copy-section-hubl-menu](https://www.hubspot.es/hubfs/Knowledge_Base_2021/Developer/copy-section-hubl-menu.png) ## Recursos relacionados * [Resumen de las áreas de arrastrar y soltar](https://developers.hubspot.es/docs/cms/start-building/building-blocks/drag-and-drop/overview) * [Etiquetas HubL del área de arrastrar y soltar](/docs/cms/reference/hubl/tags/dnd-areas) * [Usar módulos en plantillas](/docs/cms/reference/modules/using-modules-in-templates) * [Primeros pasos con las áreas de arrastrar y soltar](/docs/cms/start-building/building-blocks/drag-and-drop/tutorial) * [Cómo activar el modo desarrollador en el editor de páginas del CMS Hub - YouTube](https://www.youtube.com) # Plantillas de blog Source: https://developers.hubspot.es/docs/cms/start-building/building-blocks/templates/blog Las plantillas de índice y publicaciones de blog pueden utilizarse para personalizar la apariencia del blog en un sitio. > **Productos compatibles** Los blogs de HubSpot consisten en páginas de índice de blogs y en las publicaciones individuales del blog. Además de listar las publicaciones individuales del blog, la plantilla de índice del blog también se utiliza para renderizar las páginas de índice de autores y etiquetas. Puedes crear una sola plantilla para representar todas las páginas de índice y publicaciones de blog, o puedes crear dos plantillas separadas. A continuación, encuentra más información sobre el marcador de la plantilla del blog, los componentes de la plantilla y las opciones de personalización. ## Crear una plantilla compartida para las páginas de índice y de publicación Para crear una plantilla que muestre las páginas de índice y publicaciones, agrega [la anotación](/docs/cms/start-building/building-blocks/templates/html-hubl-templates#template-annotations) `templateType: blog` al principio de tu archivo de plantilla. Si se utiliza una plantilla para representar ambas cosas, se utilizará una [instrucción "if"](/docs/cms/reference/hubl/if-statements) que evalúe si el usuario está viendo una página de índice o una publicación individual. Si estás utilizando [el administrador de diseño de arrastrar y soltar](/docs/cms/start-building/building-blocks/drag-and-drop/drag-and-drop-templates), esta instrucción `if` está incorporada en la interfaz de usuario de los botones del módulo de contenido del blog. Utilizando la instrucción `if is_listing_view` , puedes escribir por separado el código de la publicación y el de la lista. ```hubl theme={null} {% if is_listing_view %} Markup for blog listing template {% else %} Markup for blog post template {% endif %} ``` ## Crear plantillas separadas para listados y publicaciones Alternativamente, puedes elegir tener plantillas separadas para [las publicaciones del blog](https://developers.hubspot.es/docs/cms/start-building/building-blocks/templates/overview#blog-post) y [las páginas de índice](https://developers.hubspot.es/docs/cms/start-building/building-blocks/templates/overview#blog-listing), lo que puede ayudar a que tu código sea más ordenado y fácil de leer como desarrollador, a la vez que facilita la selección de plantillas para los creadores de contenido. En lugar de utilizar la anotación `templateType: blog` en la parte superior de una plantilla, incluye las siguientes [anotaciones](https://developers.hubspot.es/docs/cms/start-building/building-blocks/templates/overview#template-types) en la parte superior de tus dos plantillas: * **Plantilla de publicación de blog:** `templateType: blog_post` * **Plantilla de listado de blog:** `templateType: blog_listing` ![plantilla-anotacion-blog-listing](https://www.hubspot.es/hubfs/Knowledge_Base_2021/Developer/template-annotation-blog-listing.png) Cuando se crean plantillas separadas para publicaciones y listados, no es necesaria la validación `is_listing_view`. En su lugar, seleccionarás manualmente [plantillas separadas](https://knowledge.hubspot.com/es/blog/manage-your-blog-template-and-settings#select-your-blog-templates) dentro de los ajustes del blog de la cuenta. También puedes [migrar una plantilla de blog unificada existente para que sea una plantilla de entrada de blog o una plantilla de listado de blog](https://developers.hubspot.es/docs). ### Cambiar las plantillas de las páginas de índice La anotación `templateType: blog_listing` hace que la plantilla esté disponible para su [selección en los ajustes del blog](https://knowledge.hubspot.com/es/blog/manage-your-blog-template-and-settings) específicamente para la vista del listado. Con este tipo de plantilla, los creadores de contenido también pueden editar la página de índice dentro del editor de páginas. Al incluir también [áreas de arrastrar y soltar](https://developers.hubspot.es/docs/cms/start-building/building-blocks/drag-and-drop/overview) en la plantilla, los módulos se pueden añadir y eliminar en el editor de páginas como se hace en otras páginas del CMS. Echa un vistazo a [las plantillas de blog de la biblioteca de recursos del CMS de HubSpot](https://github.com/HubSpot/cms-theme-boilerplate/pull/349) para ver ejemplos de cómo incluir áreas de arrastrar y soltar. El listado de publicaciones de blog se genera mediante un [bucle "for"](/docs/cms/reference/hubl/loops) que itera a través de las entradas de tu blog. `contents` es una secuencia predefinida de contenido que contiene todas las entradas de ese blog. ```hubl theme={null} {% for content in contents %}
Post item markup that renders with each iteration.
{% endfor %} ``` > [!NOTE] > > Se recomienda hacer que todas las cadenas de texto de la plantilla de listado de tu blog estén controladas por campos. Esto facilita la creación de blogs [multilingües](/docs/cms/start-building/features/multi-language-content) y da más control a los creadores de contenidos. ## Crear un listado de módulos de blog Puedes permitir que los creadores de contenido coloquen módulos en el perímetro del contenido del listado del blog, como en los laterales, o encima y debajo. Para ello, se recomienda crear un módulo que utilice un [bucle "for" de listado de blogs](/docs/cms/start-building/building-blocks/templates/blog#blog-listing-for-loop). Echa un vistazo al [módulo de índice de blogs de la plantilla del CMS](https://github.com/HubSpot/cms-theme-boilerplate/tree/main/src/modules/blog-listings.module). [](https://github.com/HubSpot/cms-theme-boilerplate/tree/main/src/modules/blog-listings.module) Aunque HubSpot proporciona la [configuración del blog](https://knowledge.hubspot.com/es/blog/manage-your-blog-template-and-settings#select-your-blog-templates) para mostrar resúmenes y utilizar imágenes destacadas, también puedes crear estas funciones en tu módulo. Esto le permite a los creadores de contenidos ajustar estas características en el editor de páginas, en lugar de los ajustes del blog. ## Autor del blog, etiqueta y páginas de índice sencillas Además de las páginas de índice y publicaciones de blogs, los blogs de HubSpot también tienen páginas para los autores de blogs, etiquetas de entradas de blog y páginas de índice sencillas. Estas páginas adicionales utilizan la misma plantilla que la página de índice del blog para mostrar su contenido. > [!NOTE] > > Como la plantilla de la página de índice también la comparten el autor del blog, la etiqueta y la página de índice sencilla, las actualizaciones publicadas en la plantilla también se aplicarán a esas páginas. Para configurar el diseño de estas páginas individualmente, puedes utilizar las instrucciones `if` para representar de manera condicional el contenido de cada tipo de página. ### If blog\_author Dentro del marcador estándar del listado de blogs de HubSpot, hay una instrucción `if blog_author`. Esta instrucción se evalúa como "true" al visualizar la página de un autor, donde se listan las publicaciones que ha publicado. La biblioteca de la plantilla incluye el nombre del autor, su biografía y sus cuentas en las redes sociales. ```hubl theme={null} {% if blog_author %}
{% if blog_author.avatar %}
{% endif %}

{{ blog_author.display_name }}

{{ blog_author.bio }}

{% if blog_author.has_social_profiles %} {% endif %}
{% else %} ``` ### Etiqueta "If" Puedes utilizar una instrucción `if tag` para renderizar código solo en una página de índice de temas del blog, que los visitantes verán al hacer clic en un tema del blog en tu sitio. El siguiente ejemplo es un fragmento que utiliza la variable de título de la página para imprimir automáticamente el nombre de la etiqueta en la parte superior de una página de índice de etiquetas. ```hubl theme={null} {% if tag %}

Posts about {{ page_meta.html_title|split(" | ")|last }}

{% endif %} ``` ### Instrucción "If not" simple\_list\_page Hay dos tipos de páginas de índice de blogs que se pueden generar para mostrar los listados de publicaciones de blog: la página de índice normal y la página de índice simple: * El índice estándar recorre la cantidad de publicaciones especificadas en la configuración de listado de blogs y aplica paginación según corresponda. * Un índice simple es un listado de todas las publicaiones y no admite la paginación. - El índice simple no se ve afectado por la [configuración del límite de publicaciones del blog](/docs/cms/start-building/introduction/developer-environment/website-settings#number-of-posts-per-listing-page) y generalmente solo contiene enlaces a las 200 publicaciones más recientes del blog. La dirección de tu página de índice simple es la URL de tu blog con `/all` agregado al final de la ruta. Puedes utilizar una instrucción `if not simple_list_page` para determinar qué mostrar en un índice simple frente a uno normal. A continuación se muestra una versión simplificada de esta isntrucción. > [!NOTE] > > Observa que la instrucción `if` utiliza la lógica inversa, lo que significa que `else` define la vista de índice simple. Opcionalmente se puede utilizar una [instrucción "unless"](/docs/cms/reference/hubl/if-statements#unless-statements) en su lugar. ```hubl theme={null} {% if not simple_list_page %} Iterated post markup for regular listing {% else %}

{{ content.name }}

{% endif %} ``` ## Paginación del índice Las páginas de índice del blog tienen una paginación autogenerada. Tu plantilla de índice puede incluir la lógica para permitir a los visitantes encontrar fácilmente tus publicaciones de blog. La [biblioteca del blog](https://boilerplate.hubspotcms.com/blog) logra una paginación simple y numérica a través del [siguiente marcador](https://github.com/HubSpot/cms-theme-boilerplate/blob/main/src/modules/blog-pagination.module/module.html): ```hubl theme={null} {% if contents.total_page_count > 1 %}
{% set page_list = [-2, -1, 0, 1, 2] %} {% if contents.total_page_count - current_page_num == 1 %}{% set offset = -1 %} {% elif contents.total_page_count - current_page_num == 0 %}{% set offset = -2 %} {% elif current_page_num == 2 %}{% set offset = 1 %} {% elif current_page_num == 1 %}{% set offset = 2 %} {% else %}{% set offset = 0 %}{% endif %} {% icon name="chevron-left" style="SOLID", width="13", no_wrapper=True %} Prev {% for page in page_list %} {% set this_page = current_page_num + page + offset %} {% if this_page > 0 and this_page <= contents.total_page_count %} {{ this_page }} {% endif %} {% endfor %} Next {% icon name="chevron-right" style="SOLID", width="13", no_wrapper=True %}
{% endif %} ``` ## Marcador de la biblioteca A continuación, puedes ver la estructura estándar del marcado de las plantillas de las páginas de publicaciones y de índice del blog. También puedes ver este marcado en la plantilla del CMS en GitHub, como se indica en cada sección. ### Marcador de la plantilla del blog Todas las publicaciones de un blog se generan mediante una única plantilla de blog. `Content` es un objeto de datos predefinido que contiene información sobre la entrada de blog solicitada. Las [plantillas de publicaciones](https://boilerplate.hubspotcms.com/blog) se presentan con los [siguientes marcadores](https://github.com/HubSpot/cms-theme-boilerplate/blob/main/src/templates/blog-post.html): ```hubl theme={null}

{{ content.name }}

{{ content.post_body }}
{% if content.tag_list %} {% endif %}
{% module "blog_comments" path="@hubspot/blog_comments", label="Blog Comments" %}
``` La información del autor del post del blog también está disponible dentro de los datos de `content`. ```hubl theme={null} {{ content.blog_post_author.display_name }}

Written by {{ content.blog_post_author.display_name }}

{{ content.blog_post_author.bio }}

{% if content.blog_post_author.has_social_profiles %}
{% endif %} ``` ### Marcador de plantillas de índice El contenido de la [biblioteca de la página de índice del blog](https://boilerplate.hubspotcms.com/blog) para el bucle "for" se renderiza con el [siguiente marcador](https://github.com/HubSpot/cms-theme-boilerplate/blob/main/src/templates/blog-index.html): ```hubl theme={null} {% for content in contents %} {# On the blog homepage the first post will be featured above older posts #} {% if (loop.first && current_page_num == 1 && !topic) %}

{{ content.name }}

{{ content.post_list_content }}
{% else %}

{{ content.name }}

{{ content.post_list_content|truncatehtml(100) }}
{% endif %} {% endfor %} ``` ## Recursos relacionados * [Variables del blog](/docs/cms/reference/hubl/variables#blog-variables) * [Plantillas de blog](/docs/cms/start-building/building-blocks/templates/blog) * [Plantilla de temas de HubSpot](/docs/cms/start-building/building-blocks/themes/hubspot-cms-boilerplate) * [Cómo crear un blog](https://knowledge.hubspot.com/es/blog/create-a-new-blog) * [Importa tu blog a HubSpot](https://knowledge.hubspot.com/es/blog/import-your-content-into-hubspot) # Marcador de plantillas de correo electrónico Source: https://developers.hubspot.es/docs/cms/start-building/building-blocks/templates/email-template-markup El siguiente artículo incluye información sobre cómo se codifican las plantillas de correo electrónico estándar de HubSpot. Dado que los clientes de correo electrónico solo admiten ciertas funciones de HTML y CSS, codificar plantillas de correo electrónico que se muestren de forma coherente en todos ellos requiere experiencia y paciencia. Para facilitar el proceso, las plantillas de correo electrónico de HubSpot se pueden crear como diseños de plantillas fáciles de usar o como archivos codificados. > **Productos compatibles** En este artículo, aprenderás cómo se codifican las plantillas de correo electrónico estándar de HubSpot. Al crear plantillas de correo electrónico personalizadas, ten en cuenta que los clientes de correo electrónico solo admiten [determinadas funciones HTML y CSS](http://www.campaignmonitor.com/css/). Por eso, codificar plantillas de correo electrónico que se muestren de forma coherente en todos ellos requiere experiencia y paciencia. Consulta la base de conocimientos de HubSpot para aprender a [crear diseños de plantillas en la aplicación](https://knowledge.hubspot.com/es/design-manager/create-page-email-and-blog-templates-in-the-layout-editor) o a [guardar un correo electrónico existente como plantilla](https://knowledge.hubspot.com/es/marketing-email/save-marketing-emails-as-templates). ## Variables necesarias para la plantilla de correo electrónico Para poder enviar correos electrónicos con HubSpot, tus plantillas deben incluir cierta información. Consulta las [variables HubL necesarias de correo electrónico](/docs/cms/reference/hubl/variables#required-email-template-variables). Cuando trabajes con plantillas codificadas, también querrás utilizar [módulos](https://developers.hubspot.es/docs/cms/start-building/building-blocks/modules/overview) para asegurarte de que el contenido del correo electrónico pueda editarse fácilmente en cada uno de los correos. ## hs-inline-css y data-hse-inline-css Uno de los aspectos más complicados de la codificación de plantillas de correo electrónico para que se muestran correctamente en todos los clientes de correo, es [la falta de soporte para CSS](http://www.campaignmonitor.com/css/) en un ` {# coded OR drag-and-drop email templates: #}
Column 1 Column 2
``` ```text output.txt theme={null}
Column 1 Column 2
``` ## Plantilla de correo adaptable El diseño de la plantilla de correo electrónico predeterminado de HubSpot utiliza el siguiente marcador. Estos diseños adaptables incluyen consultas de medios que hacen que las imágenes y las tablas sean adaptables. Los diseños adaptables utilizan [variables de color y fuente](/docs/cms/reference/hubl/variables#color-and-font-settings) que conectan con **Configuración > Marketing > Correo electrónico**. > [!WARNING] > > Al trabajar con el diseño adaptable de HubSpot, cualquier `` con una clase que incluya el texto "column" se volverá adaptable. ```hubl theme={null} {% if content.html_title and content.html_title != "" %}{{ content.html_title }}{% else %}{{ content.body.subject }}{% endif %} {% if content.meta_description %}{% endif %}
{% text "preview_text" label="Preview Text This will be used as the preview text that displays in some email clients", value="", no_wrapper=True %}
{% if content.create_page %}
Not rendering correctly? View this email as a web page here.
{% endif %}
{% content_attribute "email_body" %}

Hi {{ contact.firstname }},

Describe what you have to offer the customer. Why should they read? What did you promise them in the subject line? Tell them something cool. Make them laugh. Make them cry. Well, maybe don't do that...

Use a list to:

  • Explain the value of your offer
  • Remind the reader what they’ll get out of taking action
  • Show off your skill with bullet points
  • Make your content easy to scan

LINK TO A LANDING PAGE ON YOUR SITE (This is the really important part.)

Now wrap it all up with a pithy little reminder of how much you love them.

Aw. You silver-tongued devil, you.

Sincerely,

Your name

{% end_content_attribute %}
{% text "social_sharing_label" label='Social Sharing Label' %}
{% widget_block social_sharing "Social Sharing" label="Social Sharing", use_page_url=False %} {% end_widget_block %}
{% hubspot_footer %}
``` ## Plantilla de correo básico Los diseños básicos de las plantillas de HubSpot utilizan un marcador diferente y no incluyen las consultas de medios que hacen que el correo electrónico sea adaptable. Los diseños básicos también utilizan [variables de color y fuente](/docs/cms/reference/hubl/variables#color-and-font-settings) que se conectan con **Configuración > Marketing > Correo electrónico**. ```hubl theme={null} {% if content.html_title and content.html_title != "" %}{{ content.html_title }}{% else %}{{ content.body.subject }}{% endif %} {% if content.meta_description %}{% endif %}
{% text "preview_text" label="Preview Text This will be used as the preview text that displays in some email clients", value="", no_wrapper=True %}
{% if content.create_page %}
Not rendering correctly? View this email as a web page here.
{% endif %}
{% content_attribute "email_body" %}

Hi {{ contact.firstname }},

Describe what you have to offer the customer. Why should they read? What did you promise them in the subject line? Tell them something cool. Make them laugh. Make them cry. Well, maybe don't do that...

Use a list to:

  • Explain the value of your offer
  • Remind the reader what they’ll get out of taking action
  • Show off your skill with bullet points
  • Make your content easy to scan

LINK TO A LANDING PAGE ON YOUR SITE (This is the really important part.)

Now wrap it all up with a pithy little reminder of how much you love them.

Aw. You silver-tongued devil, you.

Sincerely,

Your name

{% end_content_attribute %}
{% text "social_sharing_label" overrideable=True, label="Social Sharing Label" %}
{% widget_block social_sharing "Social Sharing" label='Social Sharing', overrideable=True, use_page_url=False %} {% end_widget_block %}
{% hubspot_footer %}
``` ## Comenzar desde cero Cuando empiezas desde cero creando un correo electrónico .html en el administrador de diseño, HubSpot generará automáticamente el marcador a continuación. ```hubl theme={null} {% if content.html_title and content.html_title != '' %}{{ content.html_title }}{% else %}{{ content.body.subject }}{% endif %} {% if content.meta_description %}{% endif %}
{% text "preview_text" label="Preview Text This will be used as the preview text that displays in some email clients", value="", no_wrapper=True %}
{% if content.create_page %}
Not rendering correctly? View this email as a web page here.
{% endif %} ``` # Plantillas HTML + HubL Source: https://developers.hubspot.es/docs/cms/start-building/building-blocks/templates/html-hubl-templates Las plantillas del CMS de HubSpot están escritas en HTML y HubL. Estas plantillas son capaces de contener secciones fáciles de editar por los mismos creadores de contenido. Las plantillas HTML + HubL se pueden utilizar para [cualquier tipo de plantilla](https://developers.hubspot.es/docs/cms/start-building/building-blocks/templates/overview#template-types) en el CMS de HubSpot. Estas plantillas son archivos .html que admiten el [lenguaje de plantillas HubL](/docs/cms/reference/hubl/operators-and-expression-tests). Como estas plantillas codificadas son compatibles con HubL, la mejor experiencia de previsualización es utilizar la [vista preliminar de la plantilla en el administrador de diseño](https://knowledge.hubspot.com/es/website-pages/understand-a-hubspot-template-setup) o ver las páginas en una cuenta de entorno de pruebas. Las plantillas HTML + HubL pueden contener [parciales](#partials), que se pueden utilizar para separar segmentos de código de uso común, como un encabezado o un pie de página. Las plantillas HTML + HubL dan un mayor control a los desarrolladores que [las plantillas de arrastrar y soltar del administrador de diseño visual](/docs/cms/start-building/building-blocks/drag-and-drop/drag-and-drop-templates). Los desarrolladores, a su vez, pueden ofrecer una mejor experiencia de uso a los creadores de contenido mediante la [funcionalidad de arrastrar y soltar](/docs/cms/reference/hubl/tags/dnd-areas), lo que solo es posible con las plantillas HTML + HubL. ![image1-2](https://cdn2.hubspot.net/hubfs/53/image1-2.png) > [!NOTE] > > La plantilla anterior es la [plantilla base.html](https://github.com/HubSpot/cms-theme-boilerplate/blob/main/src/templates/layouts/base.html) incluida en la [biblioteca de recursos del CMS de HubSpot](/docs/cms/start-building/building-blocks/themes/hubspot-cms-boilerplate), que es una excelente manera de comenzar a desarrollar con HubSpot. ## Familiaridad y herramientas Dado que las plantillas HTML + HubL son archivos codificados, puedes usar tus herramientas preferidas para editarlas localmente. Recomendamos usar las [herramientas de desarrollo local](https://developers.hubspot.com/docs/developer-tooling/local-development/hubspot-cli/reference) de HubSpot para que puedas [subir](https://developers.hubspot.com/docs/developer-tooling/local-development/hubspot-cli/reference#upload), [obtener](https://developers.hubspot.com/docs/developer-tooling/local-development/hubspot-cli/reference#fetch), [ver](https://developers.hubspot.com/docs/developer-tooling/local-development/hubspot-cli/reference#watch), [crear](https://developers.hubspot.com/docs/developer-tooling/local-development/hubspot-cli/reference#create) y administrar de forma segura archivos en el sistema de archivos del desarrollador, así como en el administrador de archivos. Crear plantillas HTML + HubL con HubSpot es similar a usar otro lenguaje de plantillas que ya hayas usado antes. La diferencia clave es que HubSpot adopta un enfoque definido sobre las prácticas recomendadas para ciertas tareas con el fin de ofrecer la mejor experiencia a los creadores de contenido, además de encargarse de gran parte del mantenimiento y la optimización del rendimiento, reduciendo la carga de trabajo para los desarrolladores. Por ejemplo, si quieres cargar un archivo CSS en una página para ciertos módulos, en lugar de usar ``, debes incluir la hoja de estilo a través de `css_assets` en el [archivo meta.json del módulo](/docs/cms/reference/modules/configuration#adding-css-and-javascript-dependencies). Esto permite que HubSpot cargue CSS de forma condicional solo cuando el módulo está presente en una página, reduciendo la carga de CSS innecesario Más información sobre cómo [optimizar el workflow de desarrollo de HubSpot](/docs/cms/start-building/introduction/developer-environment/creating-an-efficient-development-workflow). ## Anotaciones de la plantilla Las anotaciones de la plantilla, incluidas en la parte superior de una plantilla, configuran ajustes importantes de la plantilla, como el tipo de plantilla y si se puede usar para crear contenido nuevo. Las anotaciones de la plantilla se pueden cambiar en cualquier momento durante el proceso de desarrollo. A continuación, encuentra más información sobre las anotaciones de plantilla disponibles. ```html theme={null} ... ``` | Anotación | Tipo | Descripción | | - | - | - | | `templateType` | Cadena | Especifica qué tipo de plantilla es un archivo. Los valores incluyen:
  • Plantillas estándar:
    • [página](https://developers.hubspot.es/docs/cms/start-building/building-blocks/templates/overview#page)
    • [correo electrónico](https://developers.hubspot.es/docs/cms/start-building/building-blocks/templates/overview#email)
    • [blog\_listing](https://developers.hubspot.es/docs/cms/start-building/building-blocks/templates/overview#blog-listing)
    • [blog\_post](https://developers.hubspot.es/docs/cms/start-building/building-blocks/templates/overview#blog-post)
    • [blog](https://developers.hubspot.es/docs/cms/start-building/building-blocks/templates/overview#blog)
  • Parciales: [global\_partial](/docs/cms/start-building/building-blocks/templates/html-hubl-templates#global-partials)
  • Plantillas del sistema:
    • [error\_page](https://developers.hubspot.es/docs/cms/start-building/building-blocks/templates/overview#error-pages)
    • [password\_prompt\_page](https://developers.hubspot.es/docs/cms/start-building/building-blocks/templates/overview#password-prompt)
    • [membership\_login\_page](https://developers.hubspot.es/docs/cms/start-building/building-blocks/templates/overview#membership-login)
    • [membership\_register\_page](https://developers.hubspot.es/docs/cms/start-building/building-blocks/templates/overview#membership-register)
    • [membership\_reset\_page](https://developers.hubspot.es/docs/cms/start-building/building-blocks/templates/overview#membership-password-reset)
    • [membership\_reset\_request\_page](https://developers.hubspot.es/docs/cms/start-building/building-blocks/templates/overview#membership-reset-request)
    • [email\_subscription\_preferences\_page](https://developers.hubspot.es/docs/cms/start-building/building-blocks/templates/overview#email-subscription-preferences)
    • [email\_backup\_unsubscribe\_page](https://developers.hubspot.es/docs/cms/start-building/building-blocks/templates/overview#email-backup-unsubscribe)
    • [email\_subscriptions\_confirmation\_page](https://developers.hubspot.es/docs/cms/start-building/building-blocks/templates/overview#email-subscription-unsubscribe-confirmation)
    • [search\_results\_page](https://developers.hubspot.es/docs/cms/start-building/building-blocks/templates/overview#search-results-page)
| | `isAvailableForNewContent` | Cadena | Especifica si una plantilla está disponible para su selección en el proceso de creación de contenido. Los valores incluyen: `true`, `false`. Las plantillas definidas como `false` no necesitan incluir las [variables requeridas](/docs/cms/reference/hubl/variables#required-page-template-variables). Las plantillas del tipo `page` que se definen como "false" también se pueden usar como [parciales estándar](#partials). | | `enableDomainStylesheets` | Cadena | Especifica si la plantilla debe cargar [hojas de estilo del dominio](https://knowledge.hubspot.com/es/design-manager/create-edit-and-attach-css-files-to-style-your-site#attach-or-remove-stylesheets-on-a-domain-level). Los valores incluyen: `true`, `false`. | | `Label` | Cadena | Descripción sencilla de la plantilla, que se muestra en la pantalla de selección de plantillas. Por ejemplo, `About Page`, `Homepage`, `Pricing`. | | `screenshotPath` | Cadena | La captura de pantalla que se muestra cuando un creador de contenido está seleccionando una plantilla. Esta captura de pantalla debería facilitar la diferenciación de tus plantillas. | ## Incluye encabezado y pie de página Las plantillas de HubSpot requieren la presencia de dos etiquetas a menos que el archivo sea una plantilla parcial. Estas son las etiquetas: * `{{ standard_header_includes }}`: se utiliza para agregar el CSS requerido de forma combinada y minimizada. * `{{ standard_footer_includes }}`: se utiliza para agregar de forma dinámica el javascript en la parte inferior de una página, para elementos como el script de seguimiento de HubSpot y los módulos. Estas etiquetas deben estar presentes en una plantilla o en los elementos secundarios [parciales](#partials) para poder publicarse y utilizarse. ## Parciales Las plantillas parciales son archivos HTML + HubL que pueden incluirse en otros archivos codificados. Los parciales te permiten adoptar un enfoque más modular al compartir el marcador entre múltiples plantillas. Por ejemplo, un encabezado se puede convertir en parcial para que puedas incluirlo fácilmente como componente sin necesidad de volver a codificarlo. ### Parciales estándar Un parcial estándar es una plantilla o componente reutilizable con contenido que se puede editar en páginas individuales. Esto permite a los creadores de contenido cambiar el contenido según sea necesario, a diferencia de los parciales globales que siempre comparten contenido. Por ejemplo, el siguiente código arrastraría el módulo de la barra lateral a otro archivo de plantilla. Los parciales estándar deben incluir las siguientes [anotaciones](/docs/cms/start-building/building-blocks/templates/html-hubl-templates#template-annotations) en la parte superior del archivo de plantilla: * `templateType: page` * `isAvailableForNewContent: false` ```hubl theme={null} {% include "../partial/sidebar.html" %} ``` ### Parciales globales Un parcial global es un tipo de [contenido global](/docs/cms/start-building/building-blocks/global-content#global-partials) que se puede usar en múltiples plantillas con contenido que se comparte en todas las instancias del parcial. Los parciales globales a menudo se usan para encabezados y pies de página, que puedes ver un ejemplo en el [encabezado](https://github.com/HubSpot/cms-theme-boilerplate/blob/main/src/templates/partials/header.html) y el [pie de página](https://github.com/HubSpot/cms-theme-boilerplate/blob/main/src/templates/partials/footer.html) de la biblioteca de recursos del CMS de HubSpot. Estos parciales se llaman en el [base.html](https://github.com/HubSpot/cms-theme-boilerplate/blob/main/src/templates/layouts/base.html) utilizando la etiqueta `global_partial`. Los parciales globales deben incluir la [anotación](/docs/cms/start-building/building-blocks/templates/html-hubl-templates#template-annotations) `templateType: global_partial` en la parte superior del archivo. ```hubl theme={null} {% global_partial path="../partials/header.html" %} ``` ### Bloques y extensiones Al crear plantillas complejas, puedes crear bloques compartimentados que amplíen una plantilla principal. Por ejemplo, puedes crear una plantilla principal que incluya las variables requeridas [`standard_header_includes`](/docs/cms/reference/hubl/variables#required-page-template-variables) y [`standard_footer_includes`](/docs/cms/reference/hubl/variables#required-page-template-variables). Dentro de esa plantilla, se define un bloque único utilizando la siguiente sintaxis, donde el `body` es un nombre único: ```hubl theme={null} {% block body %} {% endblock body %} ``` En la plantilla secundaria, puedes extender la plantilla principal e insertar más contenido en el bloque `body`. ```hubl theme={null} {% extends "./layouts/base.html" %} {% block body %}

Page Content

  • Bullet 1
  • Bullet 2
  • Bullet 3
{% endblock %} ``` Este método se utiliza en la [plantilla base.html](https://github.com/HubSpot/cms-theme-boilerplate/blob/main/src/templates/layouts/base.html) de la biblioteca de recursos del CMS de HubSpot, que luego se extiende por las otras plantillas en la [carpeta de plantillas](https://github.com/HubSpot/cms-theme-boilerplate/tree/main/src/templates). ### Grupos globales También se pueden incluir los [grupos globales](https://knowledge.hubspot.com/es/design-manager/use-global-content-across-multiple-templates) creados con el creador de plantillas de arrastrar y soltar en el administrador de diseño. La sintaxis se muestra a continuación: ```hubl theme={null} {% include "/path/to/global_header.template.json" %} ``` # Resumen de plantillas Source: https://developers.hubspot.es/docs/cms/start-building/building-blocks/templates/overview Las plantillas son envoltorios de páginas o correos electrónicos reutilizables que generalmente incluyen módulos y parciales en un diseño. Los creadores de contenido seleccionan una plantilla para utilizarla antes de crear una página o un correo electrónico. Las plantillas definen el diseño de tus páginas, correos electrónicos y temas de HubSpot. Una plantilla se compone de módulos y parciales, y puede hacer referencia a otros materiales como hojas de estilo y archivos JavaScript. Las plantillas pueden ser creadas usando la [CLI de HubSpot](/docs/cms/start-building/introduction/react-plus-hubl/react-plus-hubl-quickstart) o en [el administrador de diseño de HubSpot](https://knowledge.hubspot.com/es/design-manager/create-page-email-and-blog-templates-in-the-layout-editor). Para los creadores de contenido, la plantilla es lo primero que seleccionarán al crear una página o un correo electrónico. A continuación, aprende a crear una plantilla, los diferentes tipos de plantillas y lo que se incluye en ellas. ## Crear una plantilla Para crear una plantilla, puedes utilizar el [administrador de diseño en HubSpot](https://knowledge.hubspot.com/es/design-manager/create-page-email-and-blog-templates-in-the-layout-editor) o ejecutar el comando CLI `hs create template`. ```shell theme={null} hs create template [dest] ``` | Parámetro | Descripción | | - | - | | `name` | El nombre de la plantilla | | `dest` | La ruta del directorio local en el que deseas crear la plantilla. Si no se incluye, la plantilla se creará en el directorio en el que te encuentres. | * Utilizando las teclas de flecha, desplázate hasta el [tipo de plantilla](#template-types) que quieras crear y luego pulsa **introducir**. La plantilla se creará localmente. Cuando quieras que la plantilla esté disponible para su uso en tu cuenta de HubSpot, [sube](https://developers.hubspot.com/docs/developer-tooling/local-development/hubspot-cli/reference#upload) la plantilla a tu cuenta. También puedes utilizar el comando [watch](https://developers.hubspot.com/docs/developer-tooling/local-development/hubspot-cli/reference#watch) para subir automáticamente todos los archivos nuevos y las ediciones de los archivos existentes en el directorio de trabajo actual y los directorios secundarios. ## Ver vista preliminar de la plantilla Después de actualizar una plantilla, puedes obtener una vista previa para asegurarte de que se vea y actúe como esperas. Hay algunas formas en que HubSpot puede obtener una vista previa de una plantilla, como: * **Visualización previa de una plantilla en el administrador de diseño:** es mejor para verificaciones visuales rápidas o cuando se necesita una vista previa de una publicación, anuncio o plantilla combinada del blog. * **Crear un nuevo activo a partir de una plantilla:** lo mejor para probar el editor de arrastrar y soltar y la experiencia de creación de contenido. ### Vista previa en el administrador de diseño Una vista previa de las plantillas usando el administrador de diseño puede ser especialmente útil para verificaciones visuales rápidas. El generador de vista previa de plantillas también te permite configurar opciones de presentación, como las dimensiones de viewport. Para obtener una vista previa de una plantilla en el administrador de diseño: * En tu cuenta de HubSpot, dirígete a **Marketing** > **Archivos y plantillas** > **Administrador de diseño**. * Con el explorador de archivos de la barra lateral izquierda, haz clic en la **plantilla** de la que deseas una vista previa. * En la parte superior derecha, haz clic en **Vista preliminar**. * Selecciona **Vista preliminar en directo con opciones de visualización** para obtener una vista preliminar de la plantilla con opciones para probar la capacidad de respuesta y la configuración del dominio, como las hojas de estilo. Esta opción muestra la página dentro de un iframe. Esto también te permite seleccionar entre blogs y la publicación del blog o la vista de listado para las plantillas de blog. * Selecciona **Vista previa sin opciones de visualización** para obtener una vista preliminar de la plantilla sin opciones adicionales. ![template-preview-options](https://www.hubspot.es/hubfs/Knowledge_Base_2021/Developer/template-preview-options.png) ### Vista preliminar con una nueva página Al cambiar las áreas de arrastrar y soltar, los valores de los parámetros predeterminados en los módulos u otros cambios significativos, es mejor [crear una página web](https://knowledge.hubspot.com/es/website-and-landing-pages/create-and-customize-pages), un [blog](https://knowledge.hubspot.com/es/blog/create-a-new-blog), una [publicación de blog](https://knowledge.hubspot.com/es/blog/create-and-publish-blog-posts) o un [correo electrónico](https://knowledge.hubspot.com/es/marketing-email/create-and-send-marketing-emails) utilizando la plantilla. A continuación, puedes probar diferentes valores de los campos de los módulos y probar cómo se verá tu plantilla y optimizarla para obtener la mejor experiencia. Puedes publicar estos materiales o dejarlos en borrador para fines de prueba. Además, puedes usar la [preparación de contenido](https://knowledge.hubspot.com/es/website-and-landing-pages/redesign-and-relaunch-a-site-with-content-staging#new) o una [cuenta de entorno de pruebas de desarrollador](https://offers.hubspot.com/free-cms-developer-sandbox) para crear y ver recursos sin afectar una cuenta de producción. ## Tipos de plantilla Las plantillas pueden utilizarse para diferentes tipos de contenido, como páginas web y publicaciones de blog. En las plantillas codificadas, se designa el tipo de plantilla agregando una anotación en la parte superior del archivo. A continuación, conoce los diferentes tipos de plantillas y las anotaciones que puedes utilizar para designar cada tipo. > [!WARNING] > > ### Nota: > > Los creadores de contenido pueden cambiar la plantilla de una página por otra del mismo tipo, dependiendo de si tiene las etiquetas [dnd\_area](https://developers.hubspot.es/docs/cms/reference/hubl/tags/dnd-areas). > > * Las plantillas creadas con el editor de diseño visual de arrastrar y soltar pueden cambiarse por otras plantillas de arrastrar y soltar o plantillas codificadas con o sin etiquetas `dnd_area`. > * Las plantillas codificadas con etiquetas *dnd\_area* solo pueden cambiarse por otras plantillas codificadas con etiquetas `dnd_area`. > * Las plantillas codificadas sin etiquetas `dnd_area` solo pueden cambiarse por otras plantillas codificadas sin etiquetas `dnd_area`. ### Página ```html theme={null} templateType: page ``` Las plantillas de página son el tipo de plantilla más abierto. Pueden servir como cualquier tipo de página web o [landing page](https://blog.hubspot.com/blog/tabid/6307/bid/7177/what-is-a-landing-page-and-why-should-you-care.aspx). Los [diseños](#layout-css) de página no están precargados con ningún componente. Las plantillas de páginas codificadas vienen precargadas con un marcador escaso que incluye las etiquetas HubL sugeridas para la metainformación, el título y los [includes](#included-cms-files) de encabezado y pie de página necesarios. Algunos ejemplos de páginas que suelen utilizar una plantilla de página son, entre otros, los siguientes: * [Página de inicio](https://github.com/HubSpot/cms-theme-boilerplate/blob/main/src/templates/home.html) * [Acerca de nosotros](https://github.com/HubSpot/cms-theme-boilerplate/blob/main/src/templates/about.html) * [Contacto](https://github.com/HubSpot/cms-theme-boilerplate/blob/main/src/templates/contact.html) ### Correo electrónico ```html theme={null} templateType: email ``` Las plantillas de correo electrónico son utilizadas por la [herramienta de correo electrónico](https://www.hubspot.es/products/marketing/email). Tienen el conjunto de requisitos más estricto, ya que tienen que ser vistos en muchos clientes de correo electrónico diferentes y ajustarse a las prácticas recomendadas para garantizar una correcta capacidad de entrega. Tanto las plantillas de correo electrónico de [HTML + HubL](/docs/cms/start-building/building-blocks/templates/html-hubl-templates) como las del administrador de diseño de arrastrar y soltar vienen preconfiguradas con componentes básicos en el momento de la creación. Las plantillas con este `templateType` solo son visibles para la selección de plantillas al [crear un correo electrónico](https://knowledge.hubspot.com/es/marketing-email/edit-marketing-email-content-and-design). Para cumplir con la normativa [CAN-SPAM](https://knowledge.hubspot.com/es/marketing-email/edit-email-footer-addresses), las plantillas de correo electrónico tienen un conjunto de [variables obligatorias](https://developers.hubspot.es/docs/cms/reference/hubl/variables#required-email-template-variables) que deben incluirse. Las plantillas de correo electrónico también tienen una funcionalidad incorporada de [inline-css](/docs/cms/start-building/building-blocks/templates/email-template-markup#hs-inline-css-and-data-hse-inline-css) agregada a los elementos ` {% end_require_css %} {##### Module HTML #####} ``` ### Estilos y JavaScript * Estilos: * Los módulos deben tener un grupo de estilo que no esté vacío. * No se recomienda la codificación de estilos inline dentro de los módulos. Por el contrario, usa estilos inline dinámicos al habilitar campos para controlar el estilo. * JavaScript * JavaScript debe poder representar múltiples instancias de un módulo. Javascript en el panel de JS solo se cargará una vez por página, independientemente del número de eventos del módulo. * Javascript debe hacer referencia a los elementos DOM según los nombres de clase específicos del módulo para garantizar que los elementos que están fuera del módulo no sean afectados de manera accidental. Al crear módulos, puedes usar una variable incorporada llamada `{{name}}`. Esta variable extrae el ID de instancia del módulo (que se puede usar solo en el panel de HTML y HubL) para ayudar en el marcado de CSS y JS para módulos complejos. [Más información sobre esto en nuestra documentación para desarrolladores.](/docs/cms/reference/modules/files#require-css-block) ## Organización de campos Deben cumplirse los siguientes requisitos de organización y agrupación de campos. ### Pestaña de contenido * Cuando hay al menos un control dentro de un grupo de campos, todos los controles deben agruparse en categorías etiquetadas según su función. * Los campos de módulo agregados a la pestaña *Contenido* deben proporcionar formas de personalizar el contenido de un módulo. Por ejemplo, controles de imagen, ícono, texto alternativo y controles de enlaces. ### Pestaña de estilos Los grupos de campos de estilo de módulo deben ser coherentes y seguir un patrón. A continuación, se encuentra un orden recomendado para los grupos de campos de estilo. Estos grupos pueden estar en el nivel superior o [anidados en un grupo profundo](#multi-level-grouping). Los grupos vacíos también se pueden eliminar: * [Ajustes preestablecidos](#presets) * Texto * Fondo * Borde * Hover * Esquina * Espaciado * Alineación * Grupos de estilos personalizados que no se ajustan a lo anterior * Avanzado Los siguientes tipos de campos deben estar incluidos en la pestaña *Estilos* si están presentes: * [Alineación](/docs/cms/reference/fields/module-theme-fields#alignment) * [Imagen de fondo](/docs/cms/reference/fields/module-theme-fields#background-image) * [Borde](/docs/cms/reference/fields/module-theme-fields#border) * [Color](/docs/cms/reference/fields/module-theme-fields#color) * [Fuente](/docs/cms/reference/fields/module-theme-fields#font) * [Degradado](/docs/cms/reference/fields/module-theme-fields#gradient) * [Espaciado](/docs/cms/reference/fields/module-theme-fields#spacing) * [Alineación del texto](/docs/cms/reference/fields/module-theme-fields#text-alignment) Al mover campos de la pestaña *Contenido* a la pestaña *Estilos*, puedes encontrar más información sobre cómo [usar la asignación de alias](/docs/cms/start-building/building-blocks/fields/alias-mapping) para conservar el estilo de los módulos que ya están en uso en páginas activas. * Las opciones de animación siempre deben colocarse cerca de la parte inferior de la lista de grupos de campos. * Las opciones que permiten a los creadores de contenido agregar fragmentos de código o CSS deben agruparse al final de la lista de grupos de campos bajo un campo con la etiqueta *Avanzado*. * Los controles deben estar estandarizados en todos los módulos. Por ejemplo, todos los elementos que pueden tener un control de radio de borde deben ofrecer ese control. Evita ofrecer controles en algunos módulos que estén ausentes en otros. * Los campos de módulo agregados a la pestaña *Estilo* deben proporcionar formas de diseñar el módulo. Por ejemplo: * Las opciones de estilo, como color, estilo de texto, alineación, espaciado, borde y radio de esquina. * Animaciones, como efectos de colocar el cursor y elementos deslizantes. * Ajustes preestablecidos, como temas oscuros y claros que están destinados a cambiar muchos estilos al mismo tiempo. ### Ejemplos de organización de campo #### Ajustes preestablecidos Los ajustes preestablecidos se pueden usar cuando se quiere dar a los creadores de contenido un conjunto limitado de opciones, a menudo vinculadas a la configuración del tema. Por ejemplo, el módulo *Ícono* incluido en el tema Growth contiene valores predeterminados para colores *Oscuros* y *Claros*, lo que permite que haya coherencia cuando se usa en todo el sitio web. #### Agrupación multinivel Al decidir si mantener los campos de estilo en el nivel superior o anidarlos, considera el siguiente ejemplo. El módulo *Ícono* incluido en el tema Growth enumera todos sus estilos en el nivel superior porque es un componente y, por lo tanto, sus opciones de estilo afectan a un componente. ![growth-theme-icon-module](https://www.hubspot.es/hubfs/Knowledge_Base_2021/Developer/growth-theme-icon-module.png) El módulo *Tarjeta de conferencista* incluido en el tema Growth contiene múltiples componentes: la imagen de la tarjeta y su contenido en el texto. Por lo tanto, los estilos de módulo se agrupan por componentes para que los creadores de contenido tengan un proceso más claro para diseñar cada componente. ![growth-theme-speaker-card](https://www.hubspot.es/hubfs/Knowledge_Base_2021/Developer/growth-theme-speaker-card.png) #### Agrupar campos individuales El siguiente módulo de botón contiene agrupaciones para *Ajustes preestablecidos*, *Texto*, *Fondo* y mucho más. Aunque el grupo de campos *Esquina* contiene solo el control de radio de esquina, se agrupa para crear una experiencia uniforme en la creación de contenido. ![module-requirements-2\_1](https://www.hubspot.es/hubfs/Knowledge_Base_2021/Developer/module-requirements-2_1.png)![button-styles](https://www.hubspot.es/hubfs/Knowledge_Base_2023/button-styles.png) # Pautas del mercado de plantillas de HubSpot Source: https://developers.hubspot.es/docs/cms/marketplace/template-guidelines El mercado de plantillas de HubSpot ayuda a miles de clientes que no pueden permitirse trabajar con un desarrollador a aumentar su presencia online. Lo conforman desarrolladores, como tú, que crean magníficos temas, plantillas y módulos muy fáciles de usar. 'El mercado de plantillas de HubSpot ayuda a miles de clientes que no pueden permitirse trabajar con un desarrollador a aumentar su presencia online. Lo conforman desarrolladores, como tú, que crean magníficos temas, plantillas y módulos muy fáciles de usar.'; El [mercado de plantillas de HubSpot](https://ecosystem.hubspot.com/marketplace/templates) ayuda a miles de clientes que no pueden permitirse trabajar con un desarrollador a aumentar su presencia online. Lo conforman desarrolladores que crean plantillas fáciles de usar para los clientes. En el mercado de plantillas de HubSpot, puedes vender dos tipos de recursos: [temas](https://ecosystem.hubspot.com/es/marketplace/website) y [módulos](https://ecosystem.hubspot.com/es/marketplace/modules). ## ¿Por qué debo vender plantillas en el mercado? El mercado de HubSpot tiene mucho que ofrecer a los desarrolladores y agencias que buscan crear un nuevo flujo de ingresos. * **No exclusivo:** Seguro que has trabajado mucho creando tus recursos. Por eso, no deberías limitarte solo a tener tu plantilla en nuestro mercado y en ningún otro lugar. Eso significa que puedes usar tus plantillas fuera del mercado para tus propios proyectos. * **Desarrolla tus recursos una vez, véndelos varias veces:** Una vez que tu plantilla aparece en el mercado, se convierte en una oportunidad que se multiplica. Solo tienes que desarrollar una plantilla una vez y vendérsela a varios clientes. * **Haz crecer tu negocio:** Muchos de los desarrolladores que venden sus plantillas (tanto gratuitas como de pago) en nuestro mercado, han visto crecer sus negocios tanto a partir de los ingresos del mercado como de los servicios adicionales solicitados por los compradores. * **Únete a una comunidad de creadores y muestra tus habilidades:** Conecta con un ecosistema creciente y solidario para dar forma al futuro de nuestro mercado y, al mismo tiempo, dar más visibilidad a tus ofertas y servicios. ## Resumen y requisitos Para comenzar a vender en el mercado de plantillas, [crea una cuenta de proveedor](https://app.hubspot.com/signup-hubspot/asset-provider). Todas las plantillas deben cumplir con los requisitos de diseño y calidad del código. Cada tipo de plantilla también tiene sus propios requisitos que deben cumplirse para que se incluya en el mercado. Puedes consultar esos requisitos más abajo. Antes de comenzar a crear plantillas para el mercado, HubSpot recomienda encarecidamente revisar las [pautas de diseño](https://www.hubspot.com/template-providers), [branding](https://www.hubspot.com/providers/template/branding-guidelines), [uso de marcas comerciales](https://legal.hubspot.com/es/tm-usage-guidelines) y [uso del contenido](https://www.hubspot.com/content-usage-guidelines). Las plantillas que infrinjan estas pautas se eliminarán inmediatamente del mercado como se describe en los términos adicionales de HubSpot. ### Requisitos de los temas Un conjunto portátil e independiente de plantillas, módulos, contenido global y opciones de estilo; todo diseñado para trabajar de forma conjunta y que los marketers puedan editar su contenido de la forma más intuitiva. [Ver los requisitos de los temas](https://developers.hubspot.es/docs) ### Requisitos de los módulos Los temas del mercado contendrán módulos, que son componentes reutilizables que se pueden usar en plantillas o agregarse a páginas en áreas de arrastrar y soltar, y con columnas flexibles. También puedes subir módulos independientes. Estos módulos pueden agregarse a cualquier tema del editor de contenido de HubSpot. [Ver los requisitos de los módulos](https://developers.hubspot.es/docs) ### Requisitos de la página del recurso Estos son los requisitos que se deben cumplir al subir plantillas y sus fichas al mercado. Estas normas se aplican a todas las plantillas del mercado. [Consulta los requisitos sobre las fichas de las plantillas](https://developers.hubspot.com/docs) ### Políticas del mercado de plantillas Son los requisitos y la información de cumplimiento de las fichas de las plantillas en el mercado. [Ver las políticas del mercado de plantillas](https://developers.hubspot.com/docs) ## Publicar y actualizar temas en el mercado de plantillas Una vez que hayas creado una plantilla, envíala para que la aprobemos y publiquemos en el mercado. Una vez enviadas, las plantillas se someterán a un proceso de revisión y aprobación por parte de nuestro equipo. [Aprende a publicar y actualizar tus plantillas en el mercado](https://developers.hubspot.com/docs). ## Pasarelas de pago admitidas Actualmente, HubSpot ofrece a los proveedores del mercado la posibilidad de conectar las siguientes pasarelas para recibir pagos: * PayPal [países admitidos](https://www.paypal.com/us/webapps/mpp/country-worldwide) | [pagos transfronterizos](https://www.paypal.com/us/cshelp/article/what-are-the-cross-border-fees-when-selling-internationally-help550) * Stripe [países admitidos](https://stripe.com/global) | [pagos transfronterizos](https://docs.stripe.com/connect/cross-border-payouts) Los pagos de los clientes se reciben a través del pago conectado en tu cuenta de proveedor del mercado: * En tu cuenta de HubSpot, ve a **Mercado** > **Información del proveedor**. * En la sección *Método de pago* puedes ver o actualizar la información de pago. HubSpot no es responsable de los problemas que puedan darse en el portal de pago durante el proceso de compra. HubSpot no toma una parte de ninguna transacción y todas las transacciones se manejan independientemente de la plataforma de HubSpot. Si tu método de pago deja de funcionar por cualquier motivo, es posible que tus recursos se eliminen temporalmente para evitar una experiencia negativa para el cliente. HubSpot tiene clientes en todo el mundo. Al configurar pasarelas de pago, te recomendamos que aceptes pagos en monedas internacionales (pagos transfronterizos). HubSpot recomienda a los proveedores del mercado de plantillas que utilicen el portal de pago de Stripe si está disponible en su país. Si Stripe no está [disponible en tu país](https://stripe.com/global), te recomendamos que uses PayPal. ## Solicitudes de reembolso Ocasionalmente, un comprador podría solicitar un reembolso. HubSpot recomienda definir claramente la política de reembolso en la descripción de la ficha del recurso, y proporcionar un enlace a la documentación sobre la política de reembolso. HubSpot recomienda a los proveedores que satisfagan todas las solicitudes de reembolso válidas. Consulta más información sobre las [pautas generales de las solicitudes de reembolso](https://knowledge.hubspot.com/resources/marketplace-refund-guidelines). ## Gestionar transacciones Por cada plantilla que descarga un cliente del mercado, se crea un registro de un negocio en tu cuenta de proveedor. Todos los negocios se agregarán a una cartera de negocios llamada *Transacciones del mercado* con la etapa del negocio *Transacciones*. Cuando se emite un reembolso por una transacción, se definirá la propiedad *Reembolsado en* en el registro del negocio. Los proveedores pueden [personalizar el pipeline de negocios y las etapas del negocio,](https://knowledge.hubspot.com/object-settings/set-up-and-customize-pipelines) y [usar las propiedades del negocio en los workflows](https://knowledge.hubspot.com/workflows/choose-your-workflow-actions#property-management)[.](https://knowledge.hubspot.com/object-settings/set-up-and-customize-pipelines) ## Eliminar fichas de plantillas HubSpot se reserva el derecho de eliminar fichas del mercado por razones que incluyen, pero no se limitan a: * Errores presentes en la plantilla. * Plantillas de terceros en momentos en los que no se pueden subir. * Plantillas que sean incompatibles con los [navegadores admitidos por HubSpot.](https://knowledge.hubspot.com/account-security/browsers-supported-by-hubspot) * Uso de material protegido por derechos de autor, como imágenes, iconos, fuentes, audio y video, que no estén autorizados para la distribución. * Plantillas que hacen seguimiento a usuarios sin su consentimiento informado y de inclusión voluntaria explícita. * Plantillas (lo que incluye la vinculación al contenido del mercado o a la demostración de la plantilla) que incluyan el siguiente contenido: * Promoción o implicación con actividades ilegales. * Contenido despectivo, despreciativo y/o malintencionado. * Reclamaciones deshonestas o falsas. * Contenido ofensivo sobre la raza, la religión, la edad, el sexo o la orientación sexual. * Los módulos se eliminarán si afectan a otros elementos de la página o el correo electrónico a los que se agrega. ## Preguntas frecuentes > **¿Se aplica el reglamento P2B de la Unión Europea del 12 de julio de 2020 a los mercados de aplicaciones y plantillas?** > > No, la normativa P2B más reciente de la Unión Europea que entró en vigor el 12 de julio de 2020 no se aplica a los mercados de aplicaciones y plantillas de HubSpot. [Más información](https://wayback.archive-it.org/12090/*/https://ec.europa.eu/digital-single-market/en/business-business-trading-practices). > **¿Necesito algún tipo de cuenta específica de HubSpot para subir plantillas al mercado?** > > Necesitas una [cuenta de proveedor](https://www.hubspot.com/template-providers) para enviar al mercado tus plantillas. > > Algunos partners gestionan sus fichas del mercado en su cuenta de partner para usar los materiales en la misma cuenta. Otros partners gestionan sus fichas en una cuenta del mercado aparte para mantener los recursos separados de otros materiales en la herramienta del administrador de diseño. > **¿Los productos publicados en el mercado están alojados en mi cuenta o en el sistema del mercado?** > > Los productos enviados o publicados en el mercado se alojan en el sistema del mercado de HubSpot. Así, los proveedores pueden seguir editándolos en su propia cuenta sin que los cambios afecten las compras de los clientes. Para actualizar una ficha del mercado, el proveedor debe volver a enviarla para que volvamos a revisarla y a publicarla. > > Los clientes que compraron versiones anteriores de un producto en una ficha pueden [actualizarlo a la versión más reciente](https://knowledge.hubspot.com/resources/marketplace-customers-frequently-asked-questions#update) sin ningún cargo. > **¿Cómo actualizo el nombre de mi empresa?** > > Una vez que hayas publicado una plantilla en el mercado, tendrás que ponerte en contacto con el [equipo de asistencia de HubSpot](https://help.hubspot.com/) para cambiar el nombre de tu empresa. > **¿Por qué no veo todos mis productos cuando intento crear una ficha?** > > Las posibles razones por las que no ves un producto al intentar crear una ficha incluyen las siguientes: > > * La plantilla ya está en el mercado o contiene elementos de una plantilla que ya está en el mercado. > * La plantilla no se admite en el mercado (lo que incluye los correos electrónicos transaccionales, los correos electrónicos de tickets, etc.) > * La plantilla es un clon de una plantilla del mercado. > **¿Qué debo usar como un enlace de vista previa?** > > Al crear URLs de vista previa, debes usar tu propio nombre de dominio si está disponible. Si no tienes un dominio disponible para usar, HubSpot proporciona a cada cuenta un dominio de sistema en la siguiente estructura de URL: `[AccountID].hs-sites.com` > > **Nota:** HubSpot no admite vistas previas de plantillas que utilicen el subdominio `preview.hs-sites.com`. > **¿Se puede usar una sola plantilla en varios temas?** > > Sí, una sola plantilla se puede utilizar en varios temas. Un ejemplo común de cuándo se puede utilizar una plantilla en varios temas si un proveedor ofrece una versión Starter y Premium en el mismo tema. > **¿Tengo que volver a enviar un tema o un módulo si le hago cambios?** > > Sí. Todos los cambios que se hagan en un tema o en un módulo deben volver a enviarse al mercado para que el equipo de calidad los valide y los apruebe antes de publicarlos. Una vez aprobados los cambios, la ficha y la plantilla se actualizarán en el mercado para que los clientes puedan verlo. > **¿Cómo ajusto el precio de un tema o de un módulo?** > > Para ajustar el precio de un producto publicado, debes volver a enviarlo al mercado con la información actualizada. Los precios no pueden cambiarse de gratuitos a de pago, o viceversa, una vez publicada una plantilla. > **¿Cómo recibo pagos del mercado?** > > Los pagos se reciben a través del método que conectaste en tu perfil de proveedor del mercado. En tu cuenta de HubSpot, ve a **Mercado** > **Información del proveedor**.  En la sección *Método de pago* puedes ver o actualizar la información de pago. > > HubSpot no se queda con una parte de ninguna transacción y todas las transacciones se manejan independientemente de nuestra plataforma. > **¿Dónde puedo obtener feedback de colegas o ponerme en contacto con otros proveedores del mercado?** > > Únete al canal #marketplace en el Developer Slack de HubSpot, registrándote en [https://developers.hubspot.com/slack.](https://developers.hubspot.com/community) > **Cuando un cliente solicita un reembolso, ¿los archivos que ha descargado permanecen en su cuenta de HubSpot?** > > Todos los archivos asociados a la plantilla, así como cualquier dependencia (por ejemplo, páginas creadas con la plantilla, plantillas clonadas y módulos) se eliminarán una vez iniciado el reembolso. > **¿Cómo puedo mantenerme al día sobre los últimos requisitos y cambios para los desarrolladores?** > > Para mantenerte al día de los últimos cambios, visita y suscríbete al [registro de cambios para desarrolladores de HubSpot](https://developers.hubspot.com/changelog). # Políticas del mercado de plantillas de HubSpot Source: https://developers.hubspot.es/docs/cms/marketplace/template-policies # Mercado de plantillas | Requisitos de los temas (2022) Source: https://developers.hubspot.es/docs/cms/marketplace/theme-requirements Más información sobre los requisitos que un tema debe cumplir para poder enviarlo al mercado de plantillas. 'Requisitos de temas en el mercado de plantillas de HubSpot'; 'Más información sobre los requisitos que un tema debe cumplir para poder enviarlo al mercado de plantillas.'; Más información sobre los requisitos que debe cumplir un tema para enviarlo al mercado de plantillas de HubSpot. Si recién estás comenzando el proceso de creación de temas, te recomendamos encarecidamente que utilices nuestro tema CMS gratuito, que se puede descargar desde nuestro [Repositorio de GitHub](https://github.com/HubSpot/cms-theme-boilerplate) o [importarlo desde la interfaz de usuario del administrador de diseño de tu cuenta](https://www.youtube.com). Además, revisa los [requisitos de la página de índice de la plantilla](https://developers.hubspot.com/docs) cuando envíes tu plantilla al mercado de plantillas de HubSpot. ## Límites del tema Ten en cuenta los siguientes límites por tema: * Las cuentas gratuitas de ***CMS Hub*** no pueden usar la búsqueda en el sitio, funcionalidad de la CTA o video nativo de HubSpot. Más información sobre lo que se incluye con las suscripciones de ***CMS Hub*** en el [catálogo de productos y servicios de HubSpot](https://legal.hubspot.com/hubspot-product-and-services-catalog). * Los temas no pueden contener más de: * 50 plantillas [(mínimo de páginas necesarias)](#templates-css%2C-sections%2C-page-templates%2C-etc.) * 50 módulos (mínimo 5) * 50 secciones (mínimo 5) * Los temas **no deben** contener: * Plantillas de correo electrónico * Funcionalidad de HubDB * Funciones sin servidor * Campos de objetos del CRM * [Columnas flexibles en plantillas](https://developers.hubspot.com/docs#flexible-columns) **Módulos vs. secciones** Las secciones son útiles porque los creadores de contenido solo pueden ubicarlas en zonas de colocación de ancho completo en la página, lo que te ayuda como desarrollador a garantizar un excelente producto terminado. En particular, las secciones de diseño fijo, en las que el creador de contenido no puede mover elementos dentro de la sección, son una gran herramienta para proporcionar un formato y un diseño creativos que de otro modo no se podrían lograr con el editor de arrastrar y soltar. Las secciones también ofrecen beneficios de usabilidad adicionales para el creador de contenido, ya que puede seleccionar módulos individuales dentro de la sección, lo que hace que los formularios de módulos sean más cortos y estén más orientados al elemento que se está editando. ## Requisitos generales de los temas * Todos los temas enviados deben ser distintos y originales. Por ejemplo, el mismo tema con diferente contenido de texto o marcadores de posición no cuenta como un tema distinto. [Más información sobre el cumplimiento del mercado de plantillas de HubSpot](https://developers.hubspot.com/docs#template-marketplace-compliance). * Un tema debe crearse con plantillas HTML y HubL, y etiquetas [dnd\_area](/docs/cms/reference/hubl/tags/dnd-areas). * Los temas deben respetar una cuadrícula de 12 columnas. ### Estructura de los archivos del tema Todos los temas deben contener una estructura de carpetas adecuada y estar agrupados en una carpeta principal, que debería describir la página de listas de productos. Por ejemplo, si estás creando un tema con nombre "SuperAwesome" para el mercado, tu estructura debe verse similar a la imagen de abajo. Más información sobre la [estructura de archivos del tema](https://developers.hubspot.com/docs#theme-file-structure). ![template-name](https://knowledge.hubspot.com/hubfs/Knowledge_Base_2023_2024/template-name.png) ![file-structure](https://knowledge.hubspot.com/hubfs/Knowledge_Base_2023_2024/file-structure.png) ### Rutas de archivo locales relativas para las plantillas Al hacer referencia a los recursos del tema, debes usar rutas de archivo locales relativas. La mejor manera de incluirlos es usar la [función get\_asset\_url](/docs/cms/reference/hubl/functions#get-asset-url), que devuelve la URL pública de un material, archivo o plantilla. También puedes [generar esta función](/docs/cms/reference/hubl/functions#get-asset-url) en la aplicación, haciendo clic con el botón derecho en un **archivo** y seleccionando **copiar URL pública**, o bien haciendo clic en **acciones** y seleccionando luego **copiar URL pública**. Por ejemplo, una hoja de estilo a la que hace referencia `require_css` y `get_asset_url` debe tener el siguiente formato: **Input** ```hubl theme={null} {{require_css(get_asset_url('../../css/main.css')) }} ``` **Output** ```html theme={null} //cdn2.hubspot.net/hub/1234567/hub_generated/template_assets/1565970767575/custom/styles/style.min.css ``` En el siguiente video, revisa las diferencias en la estructura de archivos en tu cuenta de desarrollador en comparación con los archivos entregados a un cliente del mercado: ## Rendimiento del tema Al usar Google Lighthouse, un tema debe obtener una calificación superior a los siguientes umbrales: * **Accesibilidad en equipos de escritorio:** 65 * **Prácticas recomendadas en equipos de escritorio:** 80 * **Rendimiento en equipos de escritorio:** 70 * **Rendimiento en dispositivos móviles:** 40 Aprende a [generar un informe de Google Lighthouse para el tema usando la CLI](/docs/developer-tooling/local-development/hubspot-cli/install-the-cli). * El tamaño de los archivos de tema debe poder reducirse. * Todos los archivos de imagen deben tener menos de 1MB de tamaño. * Todas las etiquetas de imagen deben tener un atributo `alt` (un valor de `""` es aceptable). * Todas las etiquetas de imagen deben tener un atributo `loading` (un valor de `""` es aceptable). ### Vista previa de URL de temas Debes usar tu propio nombre de dominio al crear una URL de vista previa. No puedes usar el dominio proporcionado por HubSpot con esta estructura de URL: `[AccountID].hs-sites.com` Se debe usar un sitio web en directo y no una imagen del sitio de demostración. Si en algún momento tu demo en directo se vuelve inaccesible, HubSpot se reserva el derecho, con notificación al proveedor, de eliminar o remover tu tema hasta que la demo en directo vuelva a ser accesible. ## Usar jQuery jQuery [no está habilitado de forma predeterminada](https://knowledge.hubspot.com/es/website-pages/include-jquery-across-your-hubspot-pages) en la cuenta de HubSpot de un cliente. Si el tema se basa en jQuery, se debe incluir una versión de jQuery para garantizar que el tema funcione como se espera. Por ejemplo, si incluyes un módulo que requiere jQuery cuando el resto del sitio no lo requiere, necesitas usar el siguiente código para cargar jQuery: ```hubl theme={null} {# this checks if the "Include jQuery" option in Settings > CMS > Pages is checked #} {% if not site_settings.include_jquery %} {{ require_js("../jquery-3.4.1.js", "footer") }} {% endif %} ``` ## Configuración del tema (Theme.json) El archivo `theme.json` debe incluir los siguientes parámetros: ```json theme={null} // theme.json { "label": "Cool Theme", "preview_path": "./templates/home-page.html", "screenshot_path": "./images/templates/homepage.jpg", "enable_domain_stylesheets": false, "version": "1.0", "author": { "name": "Jon McLaren", "email": "noreply@hubspot.com", "url": "https://theme-provider.com/" }, "documentation_url": "https://theme-provider.com/cool-theme/documentation", "license": "./license.txt", "example_url": "https://theme-provider.com/cool-theme/demo", "is_available_for_new_content": true } ``` Revisa tu archivo `theme.json` y asegúrate de lo siguiente: * El nombre de la etiqueta coincide con el nombre que aparece en el anuncio de tu tema. * Si estás utilizando el modelo de tema CMS gratuito de HubSpot, los valores de modelo no deben estar presentes. Esto incluye la información del autor, la URL de la documentación, la URL de ejemplo, etc. * La URL de documentación resuelve y tiene documentación sobre cómo usar tu tema. * La ruta de vista previa es un archivo válido en tu tema. * La ruta de la captura de pantalla es un archivo válido y está relacionada con tu tema. * La URL de ejemplo resuelve y conduce a una demostración de tu tema. No utilices subdominios `preview.hs-sites.com` o `[AccountID].hs-sites.com` para la URL de ejemplo. Obtén más información sobre los [parámetros de theme.json](https://developers.hubspot.com/docs#theme-json). ## Configuración del tema (Fields.json) El archivo `fields.json` controla los campos disponibles y los grupos de campos en el editor de temas, incluidos los campos de estilo. Los campos que incluyas dependerán del control que quieras que tengan los creadores de contenido en el editor de páginas. * Los archivos `fields.json` deben contener al menos tres campos de color. * Para garantizar la compatibilidad entre los temas y los módulos independientes, los temas deben incluir las siguientes convenciones de nomenclatura estándar de fuente y color: `primary_color`, `secondary_color`, `heading_font` y `body_font`. Más información sobre la [compatibilidad de módulo y tema](https://developers.hubspot.com/docs#module-compatibility-with-themes). Si los campos de tema no tienen los campos `primary_color`, `secondary_color`, `heading_font` o `body_font` pueden usar el campo `alternate_names`. Más información sobre estos [parámetros de fields.json](https://developers.hubspot.com/docs#fields-json) y [revisa un archivo de ejemplo fields.json](https://github.com/HubSpot/cms-theme-boilerplate/blob/main/src/fields.json) de la biblioteca de recursos de CMS Hub. La configuración del tema también debe: * No ser incompatible con los estilos del editor o los estilos establecidos mediante un módulo. Por ejemplo, no uses `!important` en tu hoja de estilos CSS, ya que hace que sea difícil para los usuarios finales anularla y causaría un conflicto. * Usar etiquetas descriptivas para cada valor de configuración para que los creadores de contenido sepan lo que están actualizando. * Aplicar todas las plantillas a un tema, a menos que haya un caso de uso específico para estilos adicionales. Por ejemplo, los cambios en el estilo y el tamaño de los títulos `h1` en la configuración del tema deben aplicarse a todas las etiquetas `h1` del tema. Como mínimo, un tema **debe** incluir los siguientes campos: **Campos de tipografía:** * Campos de fuente del texto del cuerpo (marcas `p`) * `h1` a través `h6` de campos de fuente * Color del hipervínculo (`a` marcas), incluido el estilo al pasar el cursor **Campos de formulario:** * Color de fondo del formulario * Color del borde del formulario * Color de etiqueta de formulario * Color del borde del campo del formulario * Botón de formulario - esto incluye la configuración del texto del botón, el color de fondo y el estilo al pasar el cursor. Además: * Los campos que haya dentro del tema deben agruparse lógicamente donde corresponda. Por ejemplo, varios campos relacionados con la tipografía deben agruparse en el grupo `Typography`. * Los campos de tema deben tener controles de color y fuente separados para los botones y formularios, así como controles de color, logotipo y fuente separados para el encabezado y el pie de página. * Si los módulos dentro de un tema usan logotipos, por lo menos un campo de logotipo debe heredar la [configuración de marca](/docs/cms/start-building/building-blocks/fields/brand-and-settings-inheritance). Si se utiliza un campo de imagen para representar un logotipo, el campo de imagen no tiene que heredar la configuración de la marca. ## Plantillas (CSS, secciones, plantillas de página, etc.) ### Secciones * Debes usar las [secciones](https://developers.hubspot.com/docs#reusable-sections) donde corresponda. **Debe** haber un mínimo de cinco secciones en un tema. * Las secciones deben tener capturas de pantalla únicas y funcionales. * Las secciones y los módulos no deben ser redundantes. ### Plantillas de página Como mínimo, los temas deben incluir los siguientes tipos de plantillas: * Una plantilla de página de sitio web o una plantilla de landing page. * Al incluir varias plantillas de página, cada plantilla debe tener un propósito diferente. Por ejemplo, una página de inicio, una página *Acerca de nosotros*, una landing page de ancho completo y una landing page con una barra lateral derecha. * Se recomienda incluir al menos ocho plantillas de página en un tema. * Separa las plantillas de índices de blog y publicaciones de blog. * **Plantilla de índice de blog:** la página que muestra todas las publicaciones de blog en un formato de lista (conocido como blogroll). El título de la plantilla debe reflejar que es para la página de índice. * **Plantilla de publicación de blog:** la página de detalles de publicaciones de blog que muestra publicaciones de blog individuales. El título de la plantilla debe reflejar que es para la página de publicación del blog. * Además, el diseño de los comentarios del blog y de las casillas de los autores del blog debe corresponder al tema. * Las siguientes plantillas de página del sistema: * **Plantilla de error 404**: se muestra cuando los visitantes acceden a una página que no existe. * **Plantilla de error 500**: se muestra cuando el sitio encuentra un error interno. * **Plantilla de solicitud de contraseña:** se muestra cuando una página está protegida con contraseña. * **Plantilla de suscripción**: página de preferencias de suscripción donde los destinatarios de correo electrónico pueden administrar los tipos de correos electrónicos a los que se suscriben. * **Plantilla de actualización de suscripciones:** página de confirmación que aparece cuando un destinatario de correo electrónico actualiza sus preferencias de suscripción a los correos electrónicos. * **Respaldo de plantilla para anular suscripción:** la página que aparece para destinatarios de correos electrónicos que intentan cancelar la suscripción, si HubSpot no puede determinar la dirección de correo electrónico. * **Plantilla de resultados de búsqueda:** muestra los resultados de búsqueda que se devuelven al usar la [búsqueda en el sitio](/docs/cms/start-building/building-blocks/modules/content-search). Disponible solo para cuentas de pago de ***CMS Hub***. ### Denominación de plantillas de página * Si tienes plantillas con nombres similares, agrega palabras descriptivas que denoten la diferencia entre ellas. * Usa las mayúsculas uniformemente, elimina los guiones y evita el uso de abreviaturas (por ejemplo, deletrear "fondo" en lugar de usar "fon"). * No es necesario incluir el nombre de la empresa o el nombre del tema en el nombre de la plantilla. ## Módulos Obtén más información sobre los requisitos para los módulos de tema y los módulos individuales [aquí](https://developers.hubspot.com/docs). ## Contenido global ### Parciales globales Los [parciales globales](/docs/cms/start-building/building-blocks/global-content) son un tipo de plantilla creada con HTML y HubL que se puede reutilizar en todo el sitio web. Los tipos de parciales más comunes son los encabezados, las barras laterales y los pies de página. Más información sobre cómo [crear parciales globales](/docs/cms/start-building/building-blocks/global-content#creating-a-global-content-partial-template-using-local-development-tools). * Los temas deben incluir parciales globales. * Los parciales globales deben incluir un [área útil de arrastrar y soltar](https://developers.hubspot.com/docs). Por ejemplo, no puedes ocultar el área de arrastrar y soltar con una clase "ocultar". * Debes incorporar áreas de arrastrar y soltar que se puedan usar en encabezados y pies de página. * Para los menús que se utilizan globalmente, los usuarios también deben poder [seleccionar un menú de navegación de HubSpot](/docs/cms/start-building/building-blocks/modules/menus-and-navigation) que hayan creado en la configuración de su cuenta. Evita incluir módulos globales dentro de los parciales globales, ya que se puede crear una experiencia negativa para el usuario final. ## Compatibilidad con varios idiomas Los temas deben poder admitir versiones en varios idiomas y deben especificar los idiomas que admiten. Esto se puede hacer utilizando el [módulo de selector de idioma](/docs/cms/reference/modules/default-modules#language-switcher) en un encabezado global, que permite a los clientes localizar fácilmente las opciones de idioma y elegir el idioma que deseen. * Solo debes mostrar un idioma a la vez. Por ejemplo, evita tener inglés y español en la interfaz de usuario al mismo tiempo. * Evitar el uso de texto codificado. Por ejemplo, en lugar de codificar el texto de un botón de contenido de blog como *Leer más*, establece el texto dentro de un campo para que el usuario final pueda actualizar el texto sin tener que ir al código. ## Elementos móviles y adaptables Los temas deben ser capaces de adaptar su contenido al dispositivo en el que se están viendo. También deben proporcionar una buena experiencia de usuario en varios dispositivos. Esto incluye, pero no está limitado a: * Navegación principal * Controles deslizantes y pestañas * Imágenes grandes * Evitar el desplazamiento horizontal (a menos que sea intencional) # Campos de módulo y tema Source: https://developers.hubspot.es/docs/cms/reference/fields/module-theme-fields HubSpot tiene muchos tipos de campos que puedes usar para añadir flexibilidad y personalización a tus temas y módulos. Agrega campos a los módulos y temas para que los creadores de contenido puedan controlar varios aspectos de una página dentro del editor de páginas. En este artículo podrás encontrar información sobre todos los campos disponibles para los módulos y para los temas, junto con sus propiedades asociadas. Para obtener más información sobre la implementación de los campos de módulos y temas, incluidos los grupos de campos y los campos repetidos, consulta el [resumen de los campos de módulos y temas](https://developers.hubspot.es/docs/cms/reference/fields/overview). ## Propiedades utilizadas por todos los campos Todos los campos comparten un conjunto de propiedades comunes. Estos son campos generales, como el nombre del campo o el texto de ayuda que se muestra a los creadores de contenido que usan el campo en el módulo o el tema. ```json theme={null} { "name" : "is_teaser_img", "label" : "Enable Teaser Image", "required" : false, "locked" : false, "type" : "boolean", "inline_help_text" : "Shows Teaser image when toggled on", "help_text" : "Teaser images are used to help provide visual context to the post.", "default" : false "alias_mapping": { "property_aliases_paths": { "is_teaser_img": ["old_boolean_field_name"] } } } ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `name` | Cadena | El nombre del campo, al que harás referencia al incorporar el campo y sus valores en el módulo o tema. No puede contener espacios ni caracteres especiales. | `richtext_field, date_field, etc.` | | `label` | Cadena | El texto que el creador de contenido ve como la descripción del campo. Puede contener espacios. | `Rich text field, Date field, etc.` | | `required` | Booleano | Define si el campo puede dejarse vacío en el editor. Si es `true`, el contenido no se puede publicar sin un valor en el campo. | `false` | | `locked` | Booleano | Define si el campo es editable en el editor de contenido. Si es `true`, el campo no aparecerá en el editor de contenido. | `false` | | `type` | Cadena | El tipo de campo. Los tipos de campo son únicos por campo y se pueden encontrar dentro de la documentación para cada campo a continuación. | | | `inline_help_text` | Cadena | Texto que se muestra en línea debajo de la etiqueta del campo (límite de 400 caracteres). Se utilizan para representar la información necesaria para el campo. Puede incluir las siguientes etiquetas HTML (otras etiquetas se ignorarán en el renderizado):`a`, `b`, `br`, `em`, `i`, `p`, `small`, `strong`, `span`. | | | `help_text` | Cadena | Texto que se muestra en el editor dentro de un texto emergente al pasar el cursor para ayudar a los creadores del contenido (límite de 300 caracteres). Se utilizan para indicar qué información es complementaria, pero no necesaria, en un campo. Puede incluir las siguientes etiquetas HTML (otras etiquetas se ignorarán en el renderizado):`a`, `b`, `br`, `em`, `i`, `p`, `small`, `strong`, `span`. | | | `id` | Cadena | El ID único del campo, definido por HubSpot. Cuando se crea localmente no es necesario especificar este ID. | | | `visibility` | Matriz | Establece las condiciones de presentación del campo. Por ejemplo, puedes definir un campo para que solo se muestre cuando se haya seleccionado otro campo de la casilla de verificación. Más información sobre la [visibilidad](https://developers.hubspot.es/docs/cms/reference/fields/overview#field-visibility). | | | `display_width` | Cadena | De forma predeterminada, los campos son de la anchura completa en el editor. Cuando dos campos consecutivos en el archivo `fields.json` se definen como `half_width`, aparecerán uno al lado del otro en el editor. | | | `alias_mapping` | Cadena | Un alias para el campo, que asigna valores de campo existentes a una nueva ubicación sin romper el contenido existente. Esto puede ser útil cuando se necesita actualizar un campo que se está utilizando actualmente en el contenido publicado, como mover un campo de la pestaña *Contenido* a la pestaña *Estilo*. Más información sobre la [asignación de alias](/docs/cms/start-building/building-blocks/fields/alias-mapping). | `False` | ## Alineación Permite a los creadores de contenido posicionar un elemento dentro de un contenedor. Para habilitar la alineación de texto, usa el [campo de alineación de texto](/docs/cms/reference/fields/module-theme-fields#text-alignment). Los campos de alineación pueden usarse en [módulos](https://developers.hubspot.es/docs/cms/start-building/building-blocks/modules/overview) y solo se pueden usar como [campos de estilo](https://developers.hubspot.es/docs/cms/reference/fields/overview#style-fields). ![Campo de alineación](https://www.hubspot.es/hubfs/Alignment-field.png) **JSON** ```json theme={null} { "name": "img_position", "label": "Position Image", "help_text": "Position the image within it's container.", "required": false, "type": "alignment", "default": { "horizontal_align": "CENTER", "vertical_align": "TOP" } } ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Objeto | Objeto que contiene `horizontal_align` y `vertical_align`. | | | `alignment_direction` | Cadena | Determina si se deben mostrar solo los controles de alineación horizontales, solo los verticales o ambos. Puede ser:
  • `HORIZONTAL`
  • `VERTICAL`
  • `BOTH`
| `BOTH` | **React** ```jsx theme={null} import { ModuleFields, AlignmentField } from "@hubspot/cms-components/fields"; ``` | Propiedad | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Objeto | Objeto que contiene `horizontal_align` y `vertical_align`. | | | `alignmentDirection` | Cadena | Determina si se deben mostrar solo los controles de alineación horizontales, solo los verticales o ambos. Puede ser:
  • `HORIZONTAL`
  • `VERTICAL`
  • `BOTH`
| `BOTH` | ## Imagen de fondo Este campo proporciona un campo de imagen de fondo que tiene subcampos para la posición y el tamaño del fondo. Los campos de imagen de fondo tienen una propiedad `.css` que devuelve el CSS basado en el valor del campo. [Más información sobre la propiedad CSS generada.](https://developers.hubspot.es/docs/cms/reference/fields/overview#generated-css) Los campos de imagen de fondo pueden usarse en [módulos](https://developers.hubspot.es/docs/cms/start-building/building-blocks/modules/overview) y solo pueden utilizarse como [campos de estilo](https://developers.hubspot.es/docs/cms/reference/fields/overview#style-fields). ![Campo de imagen de fondo](https://www.hubspot.es/hubfs/bg_field.png) **JSON** ```json theme={null} { "name": "bg_image", "label": "Background image", "required": false, "type": "backgroundimage", "default": { "src": "https://example.com/img.png", "background_position": "MIDDLE_CENTER", "background_size": "cover" } } ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Objeto | Objeto que contiene el src de la imagen, la posición del fondo y el tamaño del fondo. | `null` | **React** ```jsx theme={null} import { ModuleFields, BackgroundImageField } from "@hubspot/cms-components/fields"; ``` | Propiedad | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Objeto | Objeto que contiene el src de la imagen, la posición del fondo y el tamaño del fondo. | `null` | ## Blog Este campo permite a los editores de contenido seleccionar un blog y proporciona al desarrollador el ID de ese blog. Es útil en muchas situaciones, como al extraer información para artículos de blog destacados en los módulos. Puedes utilizar el identificador del blog en [las funciones de HubL](/docs/cms/reference/hubl/functions) relacionadas con los blogs para obtener información como [los autores del blog](/docs/cms/reference/hubl/functions#blog-authors), las [publicaciones recientes](/docs/cms/reference/hubl/functions#blog-recent-posts), [las publicaciones recientes con una etiqueta específica](/docs/cms/reference/hubl/functions#blog-recent-tag-posts), etc. Los campos de blog pueden usarse en los módulos. ![Captura de pantalla del campo de blog](https://cdn2.hubspot.net/hubfs/53/Blog%20field.png) **JSON** ```json theme={null} { "name": "blog", "label": "Blog", "required": false, "locked": false, "type": "blog", "default": 1234567890 } ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | "default" / ID del blog | especifica qué blog se selecciona de forma predeterminada. Este parámetro acepta como argumentos 'default' o un ID de blog (disponible en la URL del panel del blog). | `null` | **React** ```jsx theme={null} import { ModuleFields, BlogField } from "@hubspot/cms-components/fields"; ``` | Propiedad | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | "default" / ID del blog | especifica qué blog se selecciona de forma predeterminada. Este parámetro acepta como argumentos 'default' o un ID de blog (disponible en la URL del panel del blog). | `null` | ## Booleano Este campo permite a los editores de contenido activar o desactivar la funcionalidad. Los booleanos solo pueden ser `true` o `false`. A menudo tiene sentido hacer grupos o campos condicionales según los campos booleanos. Si crees que tendrás que proporcionar más de dos estados en el futuro, un [campo de elección](#choice) puede ser la mejor opción, ya que permite incluir más opciones si las necesidades cambian más adelante. Los campos booleanos pueden usarse tanto en los temas como en los módulos. Los campos booleanos pueden utilizarse como [campos de estilo](https://developers.hubspot.es/docs/cms/reference/fields/overview#style-fields). ![Captura de pantalla del campo booleano](https://cdn2.hubspot.net/hubfs/53/Boolean.png) **JSON** ```json theme={null} { "name": "is_teaser_img", "label": "Enable Teaser Image", "required": false, "locked": false, "type": "boolean", "display": "checkbox", "inline_help_text": "Shows Teaser image when toggled on", "help_text": "Teaser images are used to help provide visual context to the post.", "default": false } ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Booleano | Define si el estado predeterminado de este campo es `true` o `false`. | `false` | | `display` | Cadena | Elige el estilo de visualización del campo. Puede aparecer como `toggle` o `checkbox`. | `checkbox` | **React** ```jsx theme={null} import { ModuleFields, BooleanField } from "@hubspot/cms-components/fields"; ``` | Propiedad | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Booleano | Define si el estado predeterminado de este campo es `true` o `false`. | `false` | | `display` | Cadena | Elige el estilo de visualización del campo. Puede aparecer como `toggle` o `checkbox`. | `checkbox` | > [!TIP] > > Un interruptor puede tener sentido cuando el valor del campo activa o desactiva otros campos que se muestran condicionalmente. Otro caso en el que un interruptor puede ser útil es cuando el campo representa un cambio importante de diseño del módulo. > > Las casillas de verificación tienen sentido para cambios más pequeños que pueden no tener un efecto tan drástico en la visualización del módulo, como ocultar o mostrar pequeños elementos individuales. ## Borde Este campo proporciona a los creadores de contenido una interfaz de usuario para crear un borde alrededor de un elemento. Los campos de borde tienen una propiedad `.css` que devuelve el CSS basado en el valor del campo. [Más información sobre la propiedad CSS generada](https://developers.hubspot.es/docs/cms/reference/fields/overview#generated-css). Los campos de borde pueden usarse en los [módulos](https://developers.hubspot.es/docs/cms/start-building/building-blocks/modules/overview). Los campos de borde solo pueden utilizarse como [campos de estilo](https://developers.hubspot.es/docs/cms/reference/fields/overview#style-fields). ![Captura de pantalla del campo de borde del módulo en el editor de páginas](https://www.hubspot.com/hs-fs/hubfs/border-module-field.png?width=326\&quality=low) **JSON** ```json theme={null} { "id": "styles.border", "name": "border", "label": "border", "required": false, "locked": false, "allow_custom_border_sides": false, "type": "border", "default": { "top": { "width": { "value": 1, "units": "px" }, "opacity": 100, "style": "solid", "color": "#ffffff" }, "bottom": { "width": { "value": 1, "units": "px" }, "opacity": 100, "style": "solid", "color": "#ffffff" }, "left": null, "right": null } } ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Booleano | Con teclas para el radio del borde, los lados superior, inferior, izquierdo y derecho. | `{}` | **React** ```jsx theme={null} import { ModuleFields, BorderField } from "@hubspot/cms-components/fields"; ``` | Propiedad | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Booleano | Con teclas para el radio del borde, los lados superior, inferior, izquierdo y derecho. | `{}` | ## Elección Los campos de elección le permiten a un creador de contenido seleccionar uno o más elementos de una lista de opciones. Usar la propiedad `display`, puede configurar que se muestren las opciones en un menú desplegable, selección con botones o casillas de verificación, o una serie de botones. Más abajo encontrarás información sobre las [opciones de presentación del campo de elección](#choice-button-presets). Los campos de elección pueden usarse tanto en los temas como en los módulos. Los campos de elección pueden utilizarse como [campos de estilo](https://developers.hubspot.es/docs/cms/reference/fields/overview#style-fields). ![choice-field-dropdown](https://cdn2.hubspot.net/hubfs/53/5Cdocs/choice-field-dropdown-4.jpg) **JSON** ```json theme={null} { "name": "img_position", "label": "Image Position", "required": false, "locked": false, "multiple": "true", "display": "select", "choices": [ ["img--left", "Image Left - Text Right"], ["img--right", "Text Left - Image Right"] ], "type": "choice", "default": "img--left" } ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `choices` | Matriz | Matriz que contiene las opciones seleccionables, con el formato como un valor interno único seguido de una etiqueta. | `[ [ "value 1", "Label 1" ], [ "value 2", "Label 2" ] ]` | | `default` | Valor | Establece el valor predeterminado de la matriz de elección. | | | `multiple` | Booleano | Campo opcional que permite seleccionar varias opciones cuando se define como `true`. Establece `display` como `checkbox` o `select` para determinar si el campo se muestra como una lista de casillas de verificación o como un menú desplegable. | `false` | | `display` | Cadena | Establece la apariencia del campo utilizando uno de los siguientes valores:
  • `select`: muestra un menú desplegable. Permite seleccionar múltiples opciones cuando `multiple` se define como `true`.
  • `checkbox`: muestra una lista de casillas de verificación seleccionables. Permite seleccionar múltiples opciones cuando `multiple` se define como `true` y `reordering_enabled` se define como `false`.
  • `radio`: muestra una lista de opciones de botones de selección. No permite seleccionar múltiples opciones.
  • `buttons`: muestra un conjunto de botones basados en el `preset` especificado. No permite seleccionar múltiples opciones.
| `"select"` | | `reordering_enabled` | Booleano | Cuando se define como `true`, permite a los creadores de contenido reordenar las opciones del campo en el editor. Para habilitar está funcionalidad, `multiple` también debe estar definido como `true`. | `false` | | `preset` | Cadena | Ajusta el botón preestablecido que se usará cuando `display` está definido como `buttons`. Con cada ajuste preestablecido, deberás configurar las etiquetas `choices` para que coincidan con un conjunto específico de valores. Obtén más información sobre estos [ajustes preestablecidos](#choice-button-presets) a continuación. | | **React** ```jsx theme={null} import { ModuleFields, ChoiceField } from "@hubspot/cms-components/fields"; ``` | Propiedad | Tipo | Descripción | Predeterminado | | - | - | - | - | | `choices` | Matriz | Matriz que contiene las opciones seleccionables, con el formato como un valor interno único seguido de una etiqueta. | `[ [ "value 1", "Label 1" ], [ "value 2", "Label 2" ] ]` | | `default` | Valor | Establece el valor predeterminado de la matriz de elección. | | | `multiple` | Booleano | Campo opcional que permite seleccionar varias opciones cuando se define como `true`. Establece `display` como `checkbox` o `select` para determinar si el campo se muestra como una lista de casillas de verificación o como un menú desplegable. | `false` | | `display` | Cadena | Establece la apariencia del campo utilizando uno de los siguientes valores:
  • `select`: muestra un menú desplegable. Permite seleccionar múltiples opciones cuando `multiple` se define como `true`.
  • `checkbox`: muestra una lista de casillas de verificación seleccionables. Permite seleccionar múltiples opciones cuando `multiple` se define como `true` y `reordering_enabled` se define como `false`.
  • `radio`: muestra una lista de opciones de botones de selección. No permite seleccionar múltiples opciones.
  • `buttons`: muestra un conjunto de botones basados en el `preset` especificado. No permite seleccionar múltiples opciones.
| `"select"` | | `reorderingEnabled` | Booleano | Cuando se define como `true`, permite a los creadores de contenido reordenar las opciones del campo en el editor. Para habilitar está funcionalidad, `multiple` también debe estar definido como `true`. | `false` | | `preset` | Cadena | Ajusta el botón preestablecido que se usará cuando `display` está definido como `buttons`. Con cada ajuste preestablecido, deberás configurar las etiquetas `choices` para que coincidan con un conjunto específico de valores. Obtén más información sobre estos [ajustes preestablecidos](#choice-button-presets) a continuación. | | ### Ajustes preestablecidos del botón de elección Para configurar un campo de elección para mostrar botones en lugar de un menú desplegable, casillas de verificación o selección con botones, puedes usar cualquiera de estos ajustes preestablecidos. Cada ajuste preestablecido permite un conjunto específico de etiquetas de opciones, las cuales deberás incluir en la matriz `choices`. Estas etiquetas no se pueden personalizar. ```json example.json theme={null} { "name": "layout", "type": "choice", "label": "Layout", "required": false, "locked": false, "display": "buttons", "preset": "layout", "choices": [ ["cards_value", "cards"], ["tiles_value", "tiles"], ["minimal_value", "minimal"] ] } ``` ```text react.txt theme={null} import { ModuleFields, ChoiceField } from '@hubspot/cms-components/fields'; ``` | Ajuste preestablecido | Etiquetas de elección | Ejemplo | | - | - | - | | `case` | `none` \| `upper` \| `lower` | | ![Ajuste preestablecido de formato](https://www.hubspot.es/hubfs/Knowledge_Base_2023-24-25/choice-field-case-type.png) \| | `expand_icon` | `caret` | `plus` | `chevron` | ![Ajuste preestablecido del ícono expandir](https://developers.hubspot.es/hubfs/Knowledge_Base_2023-24-25/expand_icon-choice-type.png) \| | `icon_background_shape` | `none` | `square` | `rounded` | `circle` | ![Ajuste preestablecido de la forma del fondo del ícono](https://www.hubspot.es/hubfs/Knowledge_Base_2023_2024/choice-button-presets_3.png) \| | `icon_size` | `small` | `medium` | `large` | ![Ajuste preestablecido del ícono](https://www.hubspot.es/hubfs/Knowledge_Base_2023_2024/choice-button-presets_5.png) \| | `layout` | `cards` | `tiles` | `minimal` | ![Ajuste preestablecido del diseño](https://www.hubspot.es/hubfs/Knowledge_Base_2023_2024/choice-button-presets_6.png) \| | `social_icon_background_shape` | `none` | `square` | `rounded` | `circle` | ![Ajuste preestablecido del fondo de los íconos de redes sociales](https://www.hubspot.es/hubfs/Knowledge_Base_2023_2024/choice-button-presets_2.png) \| | `social_icon_size` | `small` | `medium` | `large` | ![Ajuste preestablecido del tamaño de los íconos de redes sociales](https://www.hubspot.es/hubfs/Knowledge_Base_2023_2024/choice-button-presets_4.png) | ## Color Los campos de color proporcionan una amplia interfaz de selección de colores. Admiten tanto colores sólidos como transparencias. Son una opción perfecta para cuando se le quiere dar a los creadores de contenido un control total sobre los colores dentro de un módulo. Por opción predeterminada, el input de opacidad de un campo de color está oculta para los módulos de correo electrónico, ya que algunos clientes de correo electrónico no respetan las reglas de opacidad. Puedes ver el campo de opacidad en los módulos de correo electrónico definiendo `show_opacity` como `true`. Los campos de color pueden usarse tanto en los temas como en los módulos. Los campos de color pueden utilizarse como [campos de estilo](https://developers.hubspot.es/docs/cms/reference/fields/overview#style-fields). ![Campo de color](https://cdn2.hubspot.net/hubfs/53/colorfield.png) **JSON** ```json theme={null} { "name": "bg_color", "label": "Background color", "required": false, "locked": false, "type": "color", "default": { "color": "#ff0000", "opacity": 100 }, "limited_options": ["#000000", "#ffffff"] } ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Object | Define el color y la opacidad predeterminados. | `{ "color" : "#ffffff", "opacity" : 100 }` | | `show_opacity` | Booleano | Define si se muestra el valor de opacidad.
  • `true`: se muestra el valor de opacidad.
  • `false`: el valor de opacidad está oculta.
  • Si se deja sin definir, el valor de opacidad no se mostrará en los módulos de correo electrónico, sino que se mostrará en otros tipos de módulos.
| `undefined` | | `limited_options` | Matriz | Una matriz de cadenas que oculta la cuadrícula de colores predeterminada y anula la lista de colores favoritos (la etiqueta "Favoritos" se convierte en "Colores disponibles"). Los valores de la matriz deben ser un código hexadecimal o un `color` de valor hexadecimal en cualquier ruta de herencia. | `undefined` | **React** ```jsx theme={null} import { ModuleFields, ColorField } from "@hubspot/cms-components/fields"; ``` | Propiedad | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Object | Define el color y la opacidad predeterminados. | `{ "color" : "#ffffff", "opacity" : 100 }` | | `showOpacity` | Booleano | Define si se muestra el valor de opacidad.
  • `true`: se muestra el valor de opacidad.
  • `false`: el valor de opacidad está oculta.
  • Si se deja sin definir, el valor de opacidad no se mostrará en los módulos de correo electrónico, sino que se mostrará en otros tipos de módulos.
| `undefined` | | `limitedOptions` | Matriz | Una matriz de cadenas que oculta la cuadrícula de colores predeterminada y anula la lista de colores favoritos (la etiqueta "Favoritos" se convierte en "Colores disponibles"). Los valores de la matriz deben ser un código hexadecimal o un `color` de valor hexadecimal en cualquier ruta de herencia. | `undefined` | ## CTA Los campos de llamada a la acción (CTA) permiten a los usuarios elegir una CTA. Las CTA son esencialmente botones o enlaces a los que puede hacerse un seguimiento. Los creadores de contenido pueden [crear la CTA](https://knowledge.hubspot.com/es/ctas/create-calls-to-action-ctas) y después usarlas en todo el sitio. Los campos de CTA pueden usarse en los módulos. Los campos de CTA están disponibles en **CMS Hub** *Pro* y *Enterprise*. ![Campo de llamada a la acción](https://cdn2.hubspot.net/hubfs/53/Screen%20Shot%202020-02-26%20at%2010.24.18%20PM.png) **JSON** ```json theme={null} { "name": "cta", "label": "CTA", "required": false, "locked": false, "type": "cta", "default": null } ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Cadena | La CTA predeterminada. Solicita un ID de CTA que se puede encontrar en la URL al editar una CTA en el [administrador de CTA](https://app.hubspot.com/l/ctas). | `null` | **React** ```jsx theme={null} import { ModuleFields, CTAField } from "@hubspot/cms-components/fields"; ``` | Propiedad | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Cadena | La CTA predeterminada. Solicita un ID de CTA que se puede encontrar en la URL al editar una CTA en el [administrador de CTA](https://app.hubspot.com/l/ctas). | `null` | ## Objeto del CRM Los campos de objeto del CRM proporcionan una opción para que los usuarios elijan una instancia individual de un objeto del CRM para mostrarlo. `module.fieldname.properties` devuelve las propiedades de esa instancia de objeto. Esto hace que no sea necesario utilizar la función `crm_object()` para obtener los datos de la instancia del objeto seleccionado. `module.fieldname.id` devuelve el ID de la instancia del objeto. Los campos de objeto del CRM pueden usarse en los módulos. Los campos de objeto del CRM están disponibles en **CMS Hub** *Pro* y *Enterprise*. ![Campo de objeto del CRM](https://f.hubspotusercontent00.net/hubfs/53/CRM%20Object%20Field.png) **JSON** ```json theme={null} { "name": "crmobject_field", "label": "CRM object", "required": false, "locked": false, "object_type": "CONTACT", "properties_to_fetch": [], "type": "crmobject", "default": { "id": 1 } } ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `object_type` | Cadena | Tipo de objeto del CRM que el usuario puede elegir. [Tipos de objetos del CRM compatibles](/docs/cms/start-building/features/data-driven-content/crm-objects#supported-crm-object-types) | | | `properties_to_fetch` | Matriz | Matriz de nombres de propiedades asociadas al tipo de objeto en forma de cadena. Ejemplo: `"date_of_birth"` es una propiedad asociada a un contacto. Utiliza esta opción para limitar la información disponible en la página a lo que necesitas. | | | `default` | Objeto | Objeto con el ID de la instancia del objeto seleccionado por opción predeterminada. ID del contacto, ID de la empresa, etc | `null` | **React** ```jsx theme={null} import { ModuleFields, CRMObjectField } from "@hubspot/cms-components/fields"; ``` | Propiedad | Tipo | Descripción | Predeterminado | | - | - | - | - | | `objectType` | Cadena | Tipo de objeto del CRM que el usuario puede elegir. [Tipos de objetos del CRM compatibles](/docs/cms/start-building/features/data-driven-content/crm-objects#supported-crm-object-types) | | | `propertiesToFetch` | Matriz | Matriz de nombres de propiedades asociadas al tipo de objeto en forma de cadena. Ejemplo: `"date_of_birth"` es una propiedad asociada a un contacto. Utiliza esta opción para limitar la información disponible en la página a lo que necesitas. | | | `default` | Objeto | Objeto con el ID de la instancia del objeto seleccionado por opción predeterminada. ID del contacto, ID de la empresa, etc | `null` | ## Propiedad de objeto del CRM Utiliza este campo para acceder a los metadatos de la propiedad, como la etiqueta y el nombre de la propiedad, desde un tipo de objeto específico. Esto permite a los creadores de contenido seleccionar entre las propiedades del objeto cuando necesitan mostrar los detalles de la propiedad en una página. Por ejemplo, podrías agregar este campo a un módulo de tabla personalizado para rellenar los encabezados de tabla según las propiedades seleccionadas. Los campos de objeto del CRM pueden usarse en los módulos. ![crm-object-property-dropdown-menu0](https://www.hubspot.es/hubfs/Knowledge_Base_2021/crm-object-property-dropdown-menu0.png) **JSON** ```json theme={null} { "name": "crmobjectproperty_field", "label": "CRM object property", "required": true, "locked": false, "object_type": "contact", "type": "crmobjectproperty", "default": { "property": "field_of_study" } } ``` | Parámetro | Tipo | Descripción | | - | - | - | | `object_type` | Cadena | Tipo de objeto del CRM que el usuario puede elegir. Más información sobre los [tipos de objetos del CRM disponibles](/docs/cms/start-building/features/data-driven-content/crm-objects#supported-crm-object-types). | | `default` | Objeto | Contiene la propiedad predeterminada para mostrar. | Además, puedes usar los siguientes fragmentos para devolver otros detalles de la propiedad: * `{{ module.fieldname.property }}`: devuelve el nombre interno de la propiedad. * `{{ module.fieldname.property_definition.label }}`: devuelve la etiqueta de la propiedad. * `{{ module.fieldname.property_definition.type }}`: devuelve el tipo de propiedad (por ejemplo, cadena). **React** ```jsx theme={null} import { ModuleFields, CRMObjectPropertyField } from "@hubspot/cms-components/fields"; ``` | Propiedad | Tipo | Descripción | | - | - | - | | `objectType` | Cadena | Tipo de objeto del CRM que el usuario puede elegir. Más información sobre los [tipos de objetos del CRM disponibles](/docs/cms/start-building/features/data-driven-content/crm-objects#supported-crm-object-types). | | `default` | Objeto | Contiene la propiedad predeterminada para mostrar. | ## Fecha Con estos campos, los creadores de contenido pueden seleccionar una fecha. Devuelven una marca de tiempo que puedes utilizar en tu código. Los campos de fecha pueden usarse en los módulos. ![Campo de fecha con selector de calendario abierto](https://cdn2.hubspot.net/hubfs/53/date%20field.png) **JSON** ```json theme={null} { "name": "event_start_date", "label": "Event Date", "required": false, "locked": false, "type": "date", "default": 1577854800000 } ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | La marca de tiempo | Unix Epoch de la fecha y la hora que quieres definir como predeterminada. Deja este valor como nulo para permitir que el selector de fecha y hora inicie el creador de contenido en la fecha y hora actuales del selector. | `null` | **React** ```jsx theme={null} import { ModuleFields, DateField } from "@hubspot/cms-components/fields"; ``` | Propiedad | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | La marca de tiempo | Unix Epoch de la fecha y la hora que quieres definir como predeterminada. Deja este valor como nulo para permitir que el selector de fecha y hora inicie el creador de contenido en la fecha y hora actuales del selector. | `null` | ## Fecha y hora Los campos de fecha y hora ofrecen una interfaz de selección de fecha al igual que el campo de fecha, así como un selector de hora para facilitar a los creadores de contenido la selección de una fecha y de la hora del día. Devuelven una marca de tiempo que puedes utilizar en tu código. Los campos de fecha y hora pueden usarse en los módulos. ![Inicio del evento](https://cdn2.hubspot.net/hubfs/53/Event%20Start.png) **JSON** ```json theme={null} { "name": "event_start", "label": "Event Start", "required": false, "locked": false, "type": "datetime", "default": 1577854800000 } ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | La marca de tiempo | Unix Epoch de la fecha y la hora que quieres definir como predeterminada. Deja este valor como nulo para permitir que el selector de fecha y hora inicie el creador de contenido en la fecha y hora actuales del selector. | `null` | **React** ```jsx theme={null} import { ModuleFields, DateTimeField } from "@hubspot/cms-components/fields"; ``` | Propiedad | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | La marca de tiempo | Unix Epoch de la fecha y la hora que quieres definir como predeterminada. Deja este valor como nulo para permitir que el selector de fecha y hora inicie el creador de contenido en la fecha y hora actuales del selector. | `null` | ## Dirección de correo electrónico Los campos de dirección de correo electrónico permiten a los usuarios seleccionar varias direcciones de correo electrónico. Pueden utilizarse para mostrar información de contacto. El campo de correo electrónico devuelve una matriz de direcciones de correo electrónico seleccionadas que puedes procesar en bucle. Los campos de correo electrónico pueden usarse en los módulos. ![email-field](https://f.hubspotusercontent00.net/hubfs/53/email-field.png) **JSON** ```json theme={null} { "name": "emails", "label": "Email address", "required": false, "locked": false, "type": "email", "default": null } ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Matriz | Matriz de cadenas de direcciones de correo electrónico `["bob@example.com", "dennis@example.com"]` | `null` | **React** ```jsx theme={null} import { ModuleFields, EmailField } from "@hubspot/cms-components/fields"; ``` | Propiedad | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Matriz | Matriz de cadenas de direcciones de correo electrónico `["bob@example.com", "dennis@example.com"]` | `null` | ## Inserción Los campos de inserción permiten al usuario agregar la URL de un [oEmbedsitio habilitado para usar](https://oembed.com/#section7) o pegar un código de inserción de otro sitio. Para saber más sobre el uso de oEmbed en HubSpot, y ver casos prácticos, consulta nuestro [oEmbed documento sobre](/docs/cms/start-building/building-blocks/fields/oembed). ![Insertar campo ](https://f.hubspotusercontent00.net/hubfs/53/Developer%20Site/assets/images/module-theme-fields/embed-field.jpg) **JSON** ```json theme={null} { "name": "embed_field", "label": "Embed", "required": false, "locked": false, "supported_source_types": ["oembed", "html"], "supported_oembed_types": ["photo", "video", "link", "rich"], "type": "embed", "default": { "source_type": "oembed" } } ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `supported_source_types` | Matriz | Tipos de origen compatibles: URL oEmbed (`oembed`), código de inserción en HTML (`html`) o Media Bridge (`media_bridge`). | `["oembed", "html"]` | | `supported_oembed_types` | Matriz | Tipos disponibles de oEmbed, incluidos `"photo"`, `"video"`, `"link"`, y `"rich"`. No se aplica a los supported\_source\_types de html | `[ "photo", "video", "link", "rich" ]` | | `supported_media_bridge_providers` | Matriz | Matriz de múltiples ID que determinan qué proveedores de Media Bridge están disponibles para seleccionar el contenido. Nota: este parámetro también se rellenará cuando se instale una [aplicación de proveedor de Media Bridge](https://ecosystem.hubspot.com/marketplace/apps/apps-for-media). | | | `type` | Cadena | Este parámetro siempre está definido como `"embed"` | `"embed"` | | `default` | Dicc. | Una matriz que contiene el parámetro `"source_type"`. Este parámetro tiene un valor basado en una cadena procedente de las opciones proporcionadas en el parámetro `"supported_source_types"`. | `oembed` | **React** ```jsx theme={null} import { ModuleFields, EmbedField } from "@hubspot/cms-components/fields"; ``` | Propiedad | Tipo | Descripción | Predeterminado | | - | - | - | - | | `supportedSourceTypes` | Matriz | Tipos de origen compatibles: URL oEmbed (`oembed`), código de inserción en HTML (`html`) o Media Bridge (`media_bridge`). | `["oembed", "html"]` | | `supportedOembedTypes` | Matriz | Tipos disponibles de oEmbed, incluidos `"photo"`, `"video"`, `"link"`, y `"rich"`. No se aplica a los supported\_source\_types de html | `[ "photo", "video", "link", "rich" ]` | | `supportedMediaBridgeProviders` | Matriz | Matriz de múltiples ID que determinan qué proveedores de Media Bridge están disponibles para seleccionar el contenido. Nota: este parámetro también se rellenará cuando se instale una [aplicación de proveedor de Media Bridge](https://ecosystem.hubspot.com/marketplace/apps/apps-for-media). | | | `type` | Cadena | Este parámetro siempre está definido como `"embed"` | `"embed"` | | `default` | Dicc. | Una matriz que contiene el parámetro `"source_type"`. Este parámetro tiene un valor basado en una cadena procedente de las opciones proporcionadas en el parámetro `"supported_source_types"`. | `oembed` | ## Archivo Los campos de archivo permiten al usuario subir un archivo en el administrador de archivos o en el administrador de documentos, y facilitan la tarea de adjuntar elementos almacenados en esas ubicaciones. Este campo puede ser útil para enlazar archivos PDF o de otros formatos. Para mostrar imágenes en una página, debes utilizar el campo de imagen. Los campos de archivo pueden usarse en los módulos. ![Campo de archivo](https://f.hubspotusercontent00.net/hubfs/53/File%20field.png) **JSON** ```json theme={null} { "name": "file_field", "label": "File", "required": false, "locked": false, "type": "file", "picker": "file", "default": null } ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Cadena | URL de archivo. | `null` | | `picker` | Cadena | Valores aceptables: "file", "document", "image". El selector muestra los recursos subidos al administrador de archivos o en el administrador de documentos, dependiendo de este parámetro. | `file` | **React** ```jsx theme={null} import { ModuleFields, FileField } from "@hubspot/cms-components/fields"; ``` | Propiedad | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Cadena | URL de archivo. | `null` | | `picker` | Cadena | Valores aceptables: "file", "document", "image". El selector muestra los recursos subidos al administrador de archivos o en el administrador de documentos, dependiendo de este parámetro. | `file` | ## Correo de seguimiento Los campos de correo electrónico de seguimiento permiten a los creadores de contenido designar un correo electrónico que se enviará en respuesta a la recepción de un formulario. Esto funciona en conjunto con la [etiqueta de formulario HubL](/docs/cms/reference/hubl/tags/standard-tags#form), a través del parámetro `simple_email_campaign_id`. Los campos de correo electrónico de seguimiento pueden usarse en los módulos. ![campo de correo electrónico de seguimiento](https://f.hubspotusercontent00.net/hubfs/53/followup%20email%20field.png) **JSON** ```json theme={null} { "name": "followup_email", "label": "Followup email", "required": false, "locked": false, "type": "followupemail", "default": null } ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Cadena | Id de correo electrónico | `null` | **React** ```jsx theme={null} import { ModuleFields, FollowUpEmailField } from "@hubspot/cms-components/fields"; ``` | Propiedad | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Cadena | Id de correo electrónico | `null` | ## Fuente Los campos de fuente proporcionan a los creadores de contenido controles básicos de estilo de fuente. Puedes elegir el tamaño, el color, la familia de fuentes y el formato (negrita, cursiva y subrayado). Todas las fuentes de la lista son fuentes estándar seguras para la web. Estas fuentes provienen de [Google Fonts](https://fonts.google.com/), pero las sirve HubSpot directamente en el dominio en el que se carga la página. Los campos de fuentes pueden usarse tanto en los temas como en los módulos. Los campos de fuente pueden utilizarse como [campos de estilo](https://developers.hubspot.es/docs/cms/reference/fields/overview#style-fields). ![Campo de fuente](https://cdn2.hubspot.net/hubfs/53/font%20field.png) > [!WARNING] > > ### Nota: > > * La familia de fuentes está determinada por la combinación de las propiedades `font` y `font_set`. Debes incluir ambos para cargar la fuente. Cuando se [heredan campos](https://developers.hubspot.es/docs/cms/reference/fields/overview#inherited-fields), esto significa que hay que heredar ambos valores. > * Ocultar subcampos relativos al CSS con `visibility` no impedirá la generación del CSS en el estilo devuelto en el objeto de campo. Debes incluir manualmente el CSS en el objeto `styles`. **JSON** ```json theme={null} { "name": "font", "label": "Font", "required": false, "locked": false, "load_external_fonts": true, "type": "font", "default": { "size": 12, "font": "Merriweather", "font_set": "GOOGLE", "size_unit": "px", "color": "#000", "styles": {} }, "visibility": { "hidden_subfields": { "font": true, "size": true } } } ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Objeto | Objeto de fuente con ajustes de tamaño, unidad de tamaño, color y estilos de negrita, cursiva y subrayado. | `{ "size" : 12, "size_unit" : "px", "color" : "#000", "styles" : { } }` | | `load_external_fonts` | Booleano | HubSpot carga automáticamente la fuente web seleccionada en la página si la fuente se elige y se hace referencia a ella mediante HubL en una hoja de estilos o en un módulo. Define este valor como "False", si ya estás cargando la fuente en la página; de esta manera, la fuente no se cargará dos veces. | `true` | | `visibility` | Objeto | Utilizando el objeto anidado `hidden_subfields`, puedes establecer un booleano para los controles del campo fuente que se van a ocultar. Los subcampos incluyen: `font`, `size`, `bold`, `italic`, `underline` y `color`. | | | `variant` | Cadena | Si utilizas una fuente web, la variante de la fuente que deseas utilizar. Por ejemplo, para utilizar la versión con grosor de 700 de una fuente, configúrala como `"700"`. Para utilizar la versión cursiva de un tipo de letra con un grosor de 400, configúrala como `"400i"`. | | | `limited_options` | Matriz | Matriz de cadenas que anula la lista de todas las opciones de fuentes. Los valores de la matriz deben ser un nombre de fuente codificado o una propiedad de fuente `name` en cualquier ruta de herencia. Por ejemplo, `theme.typography.body_text.name`. | `undefined` | **React** ```jsx theme={null} import { ModuleFields, FontField } from "@hubspot/cms-components/fields"; ``` | Propiedad | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Objeto | Objeto de fuente con ajustes de tamaño, unidad de tamaño, color y estilos de negrita, cursiva y subrayado. | `{ "size" : 12, "size_unit" : "px", "color" : "#000", "styles" : { } }` | | `loadExternalFonts` | Booleano | HubSpot carga automáticamente la fuente web seleccionada en la página si la fuente se elige y se hace referencia a ella mediante HubL en una hoja de estilos o en un módulo. Define este valor como "False", si ya estás cargando la fuente en la página; de esta manera, la fuente no se cargará dos veces. | `true` | | `visibility` | Objeto | Utilizando el objeto anidado `hidden_subfields`, puedes establecer un booleano para los controles del campo fuente que se van a ocultar. Los subcampos incluyen: `font`, `size`, `bold`, `italic`, `underline` y `color`. | | | `variant` | Cadena | Si utilizas una fuente web, la variante de la fuente que deseas utilizar. Por ejemplo, para utilizar la versión con grosor de 700 de una fuente, configúrala como `"700"`. Para utilizar la versión cursiva de un tipo de letra con un grosor de 400, configúrala como `"400i"`. | | | `limitedOptions` | Matriz | Matriz de cadenas que anula la lista de todas las opciones de fuentes. Los valores de la matriz deben ser un nombre de fuente codificado o una propiedad de fuente `name` en cualquier ruta de herencia. Por ejemplo, `theme.typography.body_text.name`. | `undefined` | ## Formulario Los campos de formulario permiten al creador de contenido designar un formulario en su cuenta. Luego, puedes utilizarlo para renderizar un formulario en una página utilizando la [etiqueta de formulario HubL](/docs/cms/reference/hubl/tags/standard-tags#form). Los campos de formulario pueden usarse en los módulos. ![form field-Aug-21-2020-08-09-55-35-PM](https://f.hubspotusercontent00.net/hubfs/53/form%20field-Aug-21-2020-08-09-55-35-PM.png) **JSON** ```json theme={null} { "id": "idNumber", "name": "form_field_name", "display_width": null, "label": "Form", "required": false, "locked": false, "type": "form", "disable_inline_form_editing": true, "required_property_types": ["TICKET"], "support_all_webinar_types": true, "embed_versions": ["v2", "v4"], "default": { "response_type": "inline", "message": "Thanks for submitting the form." } } ``` | Parámetro | Tipo | Descripción | | - | - | - | | `default` | Objeto | Un objeto que contiene los detalles de la respuesta de envío del formulario. Incluye los siguientes parámetros:
  • `response_type`, que puede ser uno de los siguientes:
    • `inline:` un mensaje de texto en línea.
    • `redirect`: redirecciona al visitante después del envío.
  • `message`: el texto que se mostrará después del envío del formulario.
  • `redirect_id`: en formularios redirigidos, se define como un ID de contenido de HubSpot para redirigir a los remitentes a una página de HubSpot.
  • `redirect_url`: en formularios redirigidos, debes definir una URL específica para redirigir a los remitentes a una página.
| | `disable_inline_form_editing` | Cadena | Define la propiedad `disable_inline_form_editing` como `true` para ocultar todos los controles de edición de formularios en línea en el módulo de formulario. Entre ellos se incluyen los campos de formulario, el texto del botón de envío, las opciones de privacidad y consentimiento de datos y el CAPTCHA. | | `required_property_types` | Matriz | Una matriz que especifica qué formularios se pueden seleccionar en función de los tipos de propiedad de los campos de formulario. Los valores incluyen: `"CONTACT"`, `"COMPANY"`, y `"TICKET"`. | | `support_all_webinar_types` | Booleano | Si se define como `true`, el formulario mostrará un selector de webinarios más genérico que permite seleccionar webinarios de Microsoft Teams además de los de GoToWebinar. Los valores del campo del formulario también cambiarán ligeramente para guardar `webinar_id` y `webinar_source` en lugar de `gotowebinar_webinar_key`. Tendrás que volver a pasar estos valores de propiedad más genéricos a la [etiqueta formulario](/docs/cms/reference/hubl/tags/standard-tags#form) junto con `gotowebinar_webinar_key`. | | `embed_versions` | Matriz | Una matriz que especifica qué formularios se pueden seleccionar según la versión del formulario. Los valores incluyen `"v2"` para los formularios anteriores y `"v4"` para los formularios del nuevo editor. | **React** ```jsx theme={null} import { ModuleFields, FormField } from "@hubspot/cms-components/fields"; ``` | Propiedad | Tipo | Descripción | | - | - | - | | `default` | Objeto | Un objeto que contiene los detalles de la respuesta de envío del formulario. Incluye los siguientes parámetros:
  • `response_type`, que puede ser uno de los siguientes:
    • `inline:` un mensaje de texto en línea.
    • `redirect`: redirecciona al visitante después del envío.
  • `message`: el texto que se mostrará después del envío del formulario.
  • `redirect_id`: en formularios redirigidos, se define como un ID de contenido de HubSpot para redirigir a los remitentes a una página de HubSpot.
  • `redirect_url`: en formularios redirigidos, debes definir una URL específica para redirigir a los remitentes a una página.
| | `disableInlineFormEditing` | Cadena | Define la propiedad `disableInlineFormEditing` como `true` para ocultar todos los controles de edición de formularios en línea en el módulo de formulario. Entre ellos se incluyen los campos de formulario, el texto del botón de envío, las opciones de privacidad y consentimiento de datos y el CAPTCHA. | | `requiredPropertyTypes` | Matriz | Una matriz que especifica qué formularios se pueden seleccionar en función de los tipos de propiedad de los campos de formulario. Los valores incluyen: `"CONTACT"`, `"COMPANY"`, y `"TICKET"`. | | `supportAllWebinarTypes` | Booleano | Si se define como `true`, el formulario mostrará un selector de webinarios más genérico que permite seleccionar webinarios de Microsoft Teams además de los de GoToWebinar. Los valores del campo del formulario también cambiarán ligeramente para guardar `webinar_id` y `webinar_source` en lugar de `gotowebinar_webinar_key`. Tendrás que volver a pasar estos valores de propiedad más genéricos a la [etiqueta formulario](/docs/cms/reference/hubl/tags/standard-tags#form) junto con `gotowebinar_webinar_key`. | | `embedVersions` | Matriz | Una matriz que especifica qué formularios se pueden seleccionar según la versión del formulario. Los valores incluyen `"v2"` para los formularios anteriores y `"v4"` para los formularios del nuevo editor. | ## Degradado Este campo permite a los creadores de contenido crear y configurar degradados. Actualmente, los degradados lineales admiten hasta cinco puntos de color. Los campos de degradado incluyen una propiedad `.css` que devuelve el CSS correspondiente según el valor del campo. [Más información sobre la propiedad CSS generada](https://developers.hubspot.es/docs/cms/reference/fields/overview#generated-css). Los campos de degradado pueden usarse en los [módulos](https://developers.hubspot.es/docs/cms/start-building/building-blocks/modules/overview). Los campos de degradado solo pueden utilizarse como [campos de estilo](https://developers.hubspot.es/docs/cms/reference/fields/overview#style-fields). ![Campo de degradado](https://www.hubspot.com/hs-fs/hubfs/gradient_field.png?width=348\&quality=low) **JSON** ```json theme={null} { "name": "bg_gradient", "label": "Background gradient", "help_text": "Sets a gradient behind the content", "required": false, "type": "gradient", "default": { "colors": [ { "color": { "r": 0, "g": 0, "b": 0, "a": 1 } }, { "color": { "r": 255, "g": 255, "b": 255, "a": 1 } } ], "side_or_corner": { "verticalSide": "BOTTOM", "horizontalSide": null } } } ``` | Parámetro | Tipo | Descripción | | - | - | - | | `default` | Objeto | Objeto que contiene los ajustes de dirección para un gradiente ("side\_or\_corner") y las paradas de color para el gradiente como una matriz de objetos. | **React** ```jsx theme={null} import { ModuleFields, GradientField } from "@hubspot/cms-components/fields"; ``` | Propiedad | Tipo | Descripción | | - | - | - | | `default` | Objeto | Objeto que contiene los ajustes de dirección para un gradiente ("side\_or\_corner") y las paradas de color para el gradiente como una matriz de objetos. | ## Fila de HubDB Los campos de fila de HubDB permiten al creador de contenido seleccionar una fila individual de una tabla definida (o varias filas si se utilizan campos de repetición). Luego, puedes utilizar este campo para crear listas, tablas y recursos definidos por el usuario, entre otros. Los campos de fila de HubDB pueden usarse en los módulos. Los campos de fila de HubDB están disponibles en **CMS Hub** *Pro* y *Enterprise*. ![hubdb-row-field](https://f.hubspotusercontent00.net/hubfs/53/Developer%20Site/assets/images/module-theme-fields/hubdb-row-field.png) **JSON** ```json theme={null} { "name": "hubdbrow_field", "label": "HubDB row", "required": false, "locked": false, "table_name_or_id": "3096859", "columns_to_fetch": ["name", "price", "desc"], "display_columns": ["name", "price", "desc"], "display_format": "%0 - %1 :::: %2", "type": "hubdbrow", "default": { "id": 4450468943 } } ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `table_name_or_id` | Cadena | El nombre o ID de la tabla de HubDB. Este campo es obligatorio. | | | `columns_to_fetch` | Matriz | Una matriz de nombres de columnas para obtener de la tabla. Si se deja en blanco, devolverá todas las columnas de la tabla. | `[]` | | `display_columns` | Matriz | Una matriz de nombres de columnas para usar en la etiqueta de elección. Si se deja en blanco, devolverá solo la primera columna de la tabla. | `[]` | | `display_format` | Cadena | El formato en el que quieres que se muestren los datos de las columnas en el selector de filas de HubDB usando los símbolos de porcentaje y número para indicar una columna. **Ejemplo:** *%0 (%1) aparecería como Columna0Valor (Columna1Valor)* | `""` | | `default` | Objeto | Objeto que contiene el "id" para definir la fila predeterminada de HubDB. | `{ "id" : null }` | **React** ```jsx theme={null} import { ModuleFields, HubDBRowField } from "@hubspot/cms-components/fields"; ``` | Propiedad | Tipo | Descripción | Predeterminado | | - | - | - | - | | `tableNameOrId` | Cadena | El nombre o ID de la tabla de HubDB. Este campo es obligatorio. | | | `columnsToFetch` | Matriz | Una matriz de nombres de columnas para obtener de la tabla. Si se deja en blanco, devolverá todas las columnas de la tabla. | `[]` | | `displayColumns` | Matriz | Una matriz de nombres de columnas para usar en la etiqueta de elección. Si se deja en blanco, devolverá solo la primera columna de la tabla. | `[]` | | `displayFormat` | Cadena | El formato en el que quieres que se muestren los datos de las columnas en el selector de filas de HubDB usando los símbolos de porcentaje y número para indicar una columna. **Ejemplo:** *%0 (%1) aparecería como Columna0Valor (Columna1Valor)* | `""` | | `default` | Objeto | Objeto que contiene el "id" para definir la fila predeterminada de HubDB. | `{ "id" : null }` | ## Tabla de HubDB Los campos de la tabla de HubDB permiten al creador de contenido designar un HubDB en su cuenta. Luego, puedes utilizarlo para renderizar un formulario en una página utilizando la [etiqueta de formulario HubL](/docs/cms/reference/hubl/tags/standard-tags#form). Devuelve el ID de la tabla, que puedes utilizar con las [funciones HubL de HubDB.](/docs/cms/start-building/features/storage/hubdb#access-hubdb-data-using-hubl)). Los campos de la tabla de HubDB pueden usarse en los módulos. Los campos de la tabla HubDB están disponibles en **CMS Hub***Pro* y *Enterprise*. ![HubDB field](https://cdn2.hubspot.net/hubfs/53/HubDB%20field.png) **JSON** ```json theme={null} { "name": "recipe_table", "label": "Recipe Table", "required": false, "locked": false, "type": "hubdbtable", "default": 2010782 } ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Cadena | ID de la tabla HubDB | `null` | **React** ```jsx theme={null} import { ModuleFields, HubDBTableField } from "@hubspot/cms-components/fields"; ``` | Propiedad | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Cadena | ID de la tabla HubDB | `null` | ## Ícono Los campos de ícono permiten a los creadores de contenido añadir íconos a sus módulos. El campo ícono está precargado con íconos de FontAwesome. Los campos de íconos pueden usarse en los módulos. Los campos de íconos pueden utilizarse como [campos de estilo](https://developers.hubspot.es/docs/cms/reference/fields/overview#style-fields). ![icon field](https://cdn2.hubspot.net/hubfs/53/icon%20field.png) **JSON** ```json theme={null} { "name": "icon_field", "label": "Icon", "required": false, "locked": false, "icon_set": "fontawesome-6.4.2", "type": "icon", "default": { "name": "accessible-icon", "unicode": "f368", "type": "REGULAR" } } ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Objeto | Objeto de icono | | | `icon_set` | Cadena | El conjunto de íconos de FontAwesome que se va a utilizar. Los valores posibles son:
  • `fontawesome-6.4.2`
  • `fontawesome-5.14.0`
  • `fontawesome-5.0.10`
| `fontawesome-5.0.10` | **React** ```jsx theme={null} import { ModuleFields, IconField } from "@hubspot/cms-components/fields"; ``` | Propiedad | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Objeto | Objeto de icono | | | `iconSet` | Cadena | El conjunto de íconos de FontAwesome que se va a utilizar. Los valores posibles son:
  • `fontawesome-6.4.2`
  • `fontawesome-5.14.0`
  • `fontawesome-5.0.10`
| `fontawesome-5.0.10` | ## Imagen Los campos de imagen proporcionan una interfaz sencilla para que los creadores de contenido agreguen imágenes a un módulo o tema. Los campos de imagen proporcionan una interfaz de selector de archivos que enumera las imágenes del administrador de archivos. Dado que las imágenes pueden utilizarse y mostrarse de diferentes maneras, los desarrolladores pueden limitar las opciones de tamaño disponibles para el creador de contenido en la interfaz de usuario, así como permitir [la carga diferida de imágenes](/docs/cms/best-practices/testing-staging-performance/lazy-loading). ![Image Field](https://cdn2.hubspot.net/hubfs/53/Image%20Field.png) Los campos de imagen pueden usarse en los módulos. Las imágenes pueden utilizarse como [campos de estilo](https://developers.hubspot.es/docs/cms/reference/fields/overview#style-fields). Solo debes utilizar los campos de imagen como campos de estilo si la imagen va a ser puramente de presentación, no transmite significado y no es una [imagen de fondo](#background-image). Esta es una práctica recomendada de [accesibilidad](/docs/cms/best-practices/improve-existing-sites/accessibility). **JSON** ```json theme={null} { "name": "image_field", "label": "Image", "required": false, "locked": false, "responsive": true, "resizable": true, "show_loading": false, "type": "image", "default": { "size_type": "exact", "src": "", "alt": "image-alt-text", "loading": "lazy", "width": 128, "height": 128, "max_width": 128, "max_height": 128 } } ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Objeto | Define las propiedades del tamaño de la imagen, el texto alternativo, etc. Puede contener las siguientes propiedades:
  • `size_type`: si el tamaño de la imagen es automático o manual:
    • `"auto"`: HubSpot ajustará automáticamente el tamaño de la imagen en función de sus dimensiones originales.
    • `"auto_custom_max"`: HubSpot ajustará automáticamente el tamaño de la imagen con las dimensiones máximas definidas con las propiedades `"max_height"` y `"max_width"`.
    • `"exact":` HubSpot dimensionará la imagen según las dimensiones definidas con las propiedades `"height"` y `"width"`.
  • `src`: la URL de la imagen predeterminada. Debe ser una ruta absoluta a una imagen.
  • `alt`: el texto alternativo predeterminado de la imagen.
  • `loading`: [las opciones de carga diferida](/docs/cms/best-practices/testing-staging-performance/lazy-loading) de la imagen. Puede definirse como `"disabled"` (predeterminado), `"eager"` o `"lazy"`.
| `{ "size_type" : "auto", "src" : "", "alt" : null, "loading": "disabled" }` | | `responsive` | Booleano | Determina si la imagen debe actuar de forma adaptable o tener una altura y anchura fijas. | `true` | | `show_loading` | Booleano | Determina si los controles para elegir la [carga diferida](/docs/cms/best-practices/testing-staging-performance/lazy-loading) de la imagen se muestran en el editor de la página. | `false` | **React** ```jsx theme={null} import { ModuleFields, ImageField } from "@hubspot/cms-components/fields"; ``` | Propiedad | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Objeto | Define las propiedades del tamaño de la imagen, el texto alternativo, etc. Puede contener las siguientes propiedades:
  • `size_type`: si el tamaño de la imagen es automático o manual:
    • `"auto"`: HubSpot ajustará automáticamente el tamaño de la imagen en función de sus dimensiones originales.
    • `"auto_custom_max"`: HubSpot ajustará automáticamente el tamaño de la imagen con las dimensiones máximas definidas con las propiedades `"max_height"` y `"max_width"`.
    • `"exact":` HubSpot dimensionará la imagen según las dimensiones definidas con las propiedades `"height"` y `"width"`.
  • `src`: la URL de la imagen predeterminada. Debe ser una ruta absoluta a una imagen.
  • `alt`: el texto alternativo predeterminado de la imagen.
  • `loading`: [las opciones de carga diferida](/docs/cms/best-practices/testing-staging-performance/lazy-loading) de la imagen. Puede definirse como `"disabled"` (predeterminado), `"eager"` o `"lazy"`.
| `{ "size_type" : "auto", "src" : "", "alt" : null, "loading": "disabled" }` | | `responsive` | Booleano | Determina si la imagen debe actuar de forma adaptable o tener una altura y anchura fijas. | `true` | | `showLoading` | Booleano | Determina si los controles para elegir la [carga diferida](/docs/cms/best-practices/testing-staging-performance/lazy-loading) de la imagen se muestran en el editor de la página. | `false` | ## Enlace Los campos de enlace ofrecen una interfaz sencilla para que los creadores de contenido agreguen enlaces a URL y direcciones de correo electrónico. Con los enlaces externos, los creadores de contenido deben elegir "externo". Con los enlaces de correo electrónico, deben elegir "dirección de correo electrónico". Por último, con el contenido alojado en el CMS de HubSpot, pueden utilizar "contenido", que muestra una lista de todas las páginas y entradas de blog en la cuenta, "archivo", que muestra los materiales de archivo, y "blog", que muestra todos los listados de blog en la cuenta. Los campos de enlace son muy similares a los campos de URL, excepto por la diferencia clave de que proporcionan una interfaz de usuario para "abrir en una nueva ventana" y "decirle a los motores de búsqueda que no los sigan". Si no deseas que los creadores de contenido tengan ese control, utiliza el [campo URL](#url). Los campos de enlace pueden usarse en los módulos. ![link field](https://cdn2.hubspot.net/hubfs/53/link%20field.png) **JSON** ```json theme={null} { "name": "link_field", "display_width": null, "label": "Link", "required": false, "locked": false, "supported_types": [ "EXTERNAL", "CONTENT", "FILE", "EMAIL_ADDRESS", "BLOG", "CALL_TO_ACTION", "PHONE_NUMBER", "WHATSAPP_NUMBER", "PAYMENT" ], "show_advanced_rel_options": true, "type": "link", "default": { "url": { "content_id": null, "type": "EXTERNAL", "href": "" }, "open_in_new_tab": false, "no_follow": false } } ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Objeto | La URL predeterminada y el comportamiento abierto del enlace. Este objeto incluye:
  • Un objeto `url` que contiene:
    • `content_id`: si se vincula al contenido de HubSpot, el ID de ese contenido. Se define como `null` si se enlaza con contenido externo.
    • `type`: el tipo de URL. Abajo puedes consultar información sobre los tipos admitidos.
    • `href`: la URL del contenido. Cuando vincules a contenido de HubSpot, configúralo como `null` y usa `content_id` en su lugar.
| `{ "url" : { "content_id" : null, "type" : "EXTERNAL", "href" : "" }, "open_in_new_tab" : false, "no_follow" : false, "sponsored" : false, "user_generated_content" : false }` | | `supported_types` | Matriz | Los tipos de enlaces que los creadores de contenido pueden seleccionar. Elimina de la lista los tipos que no quieres que los creadores de contenido puedan definir. Los tipos válidos incluyen:
  • `EXTERNAL`
  • `CONTENT`
  • `FILE`
  • `EMAIL_ADDRESS`
  • `BLOG`
  • `CALL_TO_ACTION`
  • `PHONE_NUMBER`
  • `WHATSAPP_NUMBER`
  • `PAYMENT`
| `[ "EXTERNAL", "CONTENT", "FILE", "EMAIL_ADDRESS", "BLOG", "CALL_TO_ACTION", "PHONE_NUMBER", "WHATSAPP_NUMBER", "PAYMENT" ]` | | `show_advanced_rel_options` | Booleano | De forma predeterminada, los creadores de contenido solo podrán seleccionar la opción `no_follow`.Cuando se define como `true`, los creadores de contenido también pueden seleccionar:
  • `sponsored`: un enlace patrocinado, como un enlace de anuncio de pago.
  • `user_generated_content`: contenido generado por los usuarios, como foros.
Consulta más información sobre [los atributos de los enlaces](https://moz.com/blog/nofollow-sponsored-ugc). | `false` | **React** ```jsx theme={null} import { ModuleFields, LinkField } from "@hubspot/cms-components/fields"; ``` | Propiedad | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Objeto | La URL predeterminada y el comportamiento abierto del enlace. Este objeto incluye:
  • Un objeto `url` que contiene:
    • `content_id`: si se vincula al contenido de HubSpot, el ID de ese contenido. Se define como `null` si se enlaza con contenido externo.
    • `type`: el tipo de URL. Abajo puedes consultar información sobre los tipos admitidos.
    • `href`: la URL del contenido. Cuando vincules a contenido de HubSpot, configúralo como `null` y usa `content_id` en su lugar.
| `{ "url" : { "content_id" : null, "type" : "EXTERNAL", "href" : "" }, "open_in_new_tab" : false, "no_follow" : false, "sponsored" : false, "user_generated_content" : false }` | | `supportedTypes` | Matriz | Los tipos de enlaces que los creadores de contenido pueden seleccionar. Elimina de la lista los tipos que no quieres que los creadores de contenido puedan definir. Los tipos válidos incluyen:
  • `EXTERNAL`
  • `CONTENT`
  • `FILE`
  • `EMAIL_ADDRESS`
  • `BLOG`
  • `CALL_TO_ACTION`
  • `PHONE_NUMBER`
  • `WHATSAPP_NUMBER`
  • `PAYMENT`
| `[ "EXTERNAL", "CONTENT", "FILE", "EMAIL_ADDRESS", "BLOG", "CALL_TO_ACTION", "PHONE_NUMBER", "WHATSAPP_NUMBER", "PAYMENT" ]` | | `showAdvancedRelOptions` | Booleano | De forma predeterminada, los creadores de contenido solo podrán seleccionar la opción `no_follow`.Cuando se define como `true`, los creadores de contenido también pueden seleccionar:
  • `sponsored`: un enlace patrocinado, como un enlace de anuncio de pago.
  • `user_generated_content`: contenido generado por los usuarios, como foros.
Consulta más información sobre [los atributos de los enlaces](https://moz.com/blog/nofollow-sponsored-ugc). | `false` | ## Logotipo Los campos de logotipo permiten a los creadores de contenido especificar las imágenes de los logotipos que se utilizarán en una página, y la opción predeterminada es el logotipo del dominio. Esto es útil para los encabezados y pies de página del sitio que pueden contener el logotipo de la empresa. Los campos de logotipo también permiten la [carga diferida](/docs/cms/best-practices/testing-staging-performance/lazy-loading). Los campos del logotipo pueden usarse en los módulos. ![logo field](https://cdn2.hubspot.net/hubfs/53/logo%20field.png) **JSON** ```json theme={null} { "name": "logo", "label": "Logo", "required": false, "locked": false, "type": "logo", "show_loading": true, "default": { "override_inherited_src": false, "src": null, "alt": null, "loading": "lazy" } } ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `show_loading` | Cadena | Determina si los controles para elegir la [carga diferida](/docs/cms/best-practices/testing-staging-performance/lazy-loading) de la imagen se muestran en el editor de la página. | `false` | | `default` | Objeto | Objeto de logotipo. Si `show_loading` se define como `true`, puedes incluir una propiedad `loading` para definir las opciones de [carga diferida](/docs/cms/best-practices/testing-staging-performance/lazy-loading) de la imagen. Las opciones incluyen:
  • `"disabled"` (predeterminado)
  • `"eager"`
  • `"lazy"`
| `{ override_inherited_src: false, src: "", alt: null, width: null, height: null, loading: "disabled" suppress_company_name: false }` | **React** ```jsx theme={null} import { ModuleFields, LogoField } from "@hubspot/cms-components/fields"; ``` | Propiedad | Tipo | Descripción | Predeterminado | | - | - | - | - | | `showLoading` | Cadena | Determina si los controles para elegir la [carga diferida](/docs/cms/best-practices/testing-staging-performance/lazy-loading) de la imagen se muestran en el editor de la página. | `false` | | `default` | Objeto | Objeto de logotipo. Si `show_loading` se define como `true`, puedes incluir una propiedad `loading` para definir las opciones de [carga diferida](/docs/cms/best-practices/testing-staging-performance/lazy-loading) de la imagen. Las opciones incluyen:
  • `"disabled"` (predeterminado)
  • `"eager"`
  • `"lazy"`
| `{ override_inherited_src: false, src: "", alt: null, width: null, height: null, loading: "disabled" suppress_company_name: false }` | ## Menú Los campos de menú ofrecen una interfaz sencilla para que los creadores de contenido creen, editen y seleccionen un [menú de navegación](/docs/cms/start-building/building-blocks/modules/menus-and-navigation) reutilizable en otras páginas. Este campo es ideal para usarlo en los menús que se utilizan en varias páginas, como la navegación principal, el pie de página y otro [contenido global](/docs/cms/start-building/building-blocks/global-content). Utiliza este campo junto con la [etiqueta "menu"](/docs/cms/reference/hubl/tags/standard-tags#menu) o la [función menu()](/docs/cms/reference/hubl/functions#menu), para mostrar un menú dentro del módulo. Con los menús que no tiene sentido reutilizar en otras páginas, como un menú de índice, utiliza el [campo de menú simple](#simple-menu). Los campos de menú pueden usarse en los módulos. ![menu field](https://cdn2.hubspot.net/hubfs/53/menu%20field.png) **JSON** ```json theme={null} { "name": "menu", "label": "Menu", "required": false, "locked": false, "type": "menu", "default": 12345678911 } ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Entero | El [ID del menú](/docs/cms/start-building/building-blocks/modules/menus-and-navigation#get-your-menu-id). El valor predeterminado de `null`, hace que el menú predeterminado sea el de navegación. | `null` | **React** ```jsx theme={null} import { ModuleFields, MenuField } from "@hubspot/cms-components/fields"; ``` | Propiedad | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Entero | El [ID del menú](/docs/cms/start-building/building-blocks/modules/menus-and-navigation#get-your-menu-id). El valor predeterminado de `null`, hace que el menú predeterminado sea el de navegación. | `null` | ## Número Los campos numéricos ofrecen una interfaz sencilla para que los creadores de contenido introduzcan o ajusten opciones y valores numéricos. Pueden usarse para crear elementos basados en porcentajes o cualquier cosa en la que se necesiten números como dato de entrada. Los campos numéricos pueden usarse en los módulos. Los campos numéricos pueden utilizarse como [campos de estilo](https://developers.hubspot.es/docs/cms/reference/fields/overview#style-fields). ![Number field](https://cdn2.hubspot.net/hubfs/53/5Cdocs/number-field-example-4.jpg) **JSON** ```json theme={null} { "name": "number_field", "label": "Number", "required": false, "locked": false, "display": "slider", "min": 1, "max": 10, "step": 1, "type": "number", "prefix": "", "suffix": "", "default": null, "placeholder": "50" } ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Número | Un número predeterminado para utilizar. | `null` | | `prefix` | Cadena | Se agrega como prefijo al campo numérico. | | | `suffix` | Cadena | Se agrega como sufijo al campo numérico. | | | `placeholder` | Cadena | Agrega un valor de parámetro de sustitución al campo. | | **React** ```jsx theme={null} import { ModuleFields, NumberField } from "@hubspot/cms-components/fields"; ``` | Propiedad | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Número | Un número predeterminado para utilizar. | `null` | | `prefix` | Cadena | Se agrega como prefijo al campo numérico. | | | `suffix` | Cadena | Se agrega como sufijo al campo numérico. | | | `placeholder` | Cadena | Agrega un valor de parámetro de sustitución al campo. | | > [!NOTE] > > Los parámetros de sufijo y prefijo son para fines de visualización en el editor de contenido y no tienen ningún efecto sobre el valor numérico del campo. ## Página Los campos de página proporcionan una interfaz para que los creadores de contenido seleccionen las páginas del sitio y las landing pages. El valor devuelto por un campo de página es el id de la página seleccionada. Cuando se utiliza junto con las funciones [content\_by\_id](/docs/cms/reference/hubl/functions#content-by-id) o [content\_by\_ids](/docs/cms/reference/hubl/functions#content-by-ids), puedes utilizar los datos de las páginas seleccionadas en la página actual. Los campos de página pueden usarse en los módulos. ![Page field](https://www.hubspot.es/hubfs/Page%20field.png) **JSON** ```json theme={null} { "name": "page_field", "label": "Page", "help_text": "Pulls data from the selected page.", "required": false, "locked": false, "placeholder": "Page to pull from", "type": "page", "default": null } ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Entero | Un identificador de página predeterminado para seleccionar. | `null` | **React** ```jsx theme={null} import { ModuleFields, PageField } from "@hubspot/cms-components/fields"; ``` | Propiedad | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Entero | Un identificador de página predeterminado para seleccionar. | `null` | ## Texto enriquecido Los campos de texto enriquecido ofrecen a los creadores de contenido una experiencia de editor de texto WYSIWYG. Cuando se imprime el valor de un campo de texto enriquecido, se hace como HTML. Si no quieres que los creadores de contenido puedan darle formato, utiliza [campos de texto](#text). Los campos de texto enriquecido pueden usarse en los módulos. ![Rich Text field](https://f.hubspotusercontent00.net/hubfs/53/Rich%20Text%20field.png) **JSON** ```json theme={null} { "name": "description", "label": "Description", "required": false, "locked": false, "type": "richtext", "default": null } ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Cadena | La cadena de contenido para mostrar admite HTML. Nota: no se puede utilizar la [función](/docs/cms/reference/hubl/functions#get-asset-url) `get_asset_url` dentro de esta propiedad predeterminada. | `""` | | `enabled_features` | Matriz | Una serie de elementos que permiten [configurar la barra de herramientas del editor de texto enriquecido](/docs/cms/reference/fields/rich-text-editor) y las opciones disponibles para los editores de contenido. | | **React** ```jsx theme={null} import { ModuleFields, RichTextField } from "@hubspot/cms-components/fields"; ``` | Propiedad | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Cadena | La cadena de contenido para mostrar admite HTML. Nota: no se puede utilizar la [función](/docs/cms/reference/hubl/functions#get-asset-url) `get_asset_url` dentro de esta propiedad predeterminada. | `""` | | `enabledFeatures` | Matriz | Una serie de elementos que permiten [configurar la barra de herramientas del editor de texto enriquecido](/docs/cms/reference/fields/rich-text-editor) y las opciones disponibles para los editores de contenido. | | ## Menú simple Los campos de menú simple proporcionan una interfaz sencilla para que los creadores de contenido creen un [menú de navegación](/docs/cms/start-building/building-blocks/modules/menus-and-navigation) que no sea reutilizable en otras páginas. Para los menús que deben ser reutilizables, utiliza el [campo de menú](#menu). Es una opción útil para crear un menú de tabla de contenido que enlaza con títulos de páginas muy largas, o una lista de enlaces a contenido que solo tiene sentido tener en la página actual. Los campos de menú simples pueden usarse en los módulos. ![Simple menu field](https://cdn2.hubspot.net/hubfs/53/Screen%20Shot%202020-02-28%20at%207.33.17%20AM.png) **JSON** ```json theme={null} { "name": "toc_menu", "label": "Table of Contents", "required": false, "locked": false, "type": "simplemenu", "default": [ { "isPublished": false, "pageLinkId": null, "pageLinkName": null, "isDeleted": null, "categoryId": null, "subCategory": null, "contentType": null, "state": null, "linkLabel": "Why is product marketing important?", "linkUrl": null, "linkParams": null, "linkTarget": null, "type": "NO_LINK", "children": [ { "isPublished": false, "pageLinkId": null, "pageLinkName": null, "isDeleted": null, "categoryId": null, "subCategory": null, "contentType": null, "state": null, "linkLabel": "Product Marketing Responsibilities", "linkUrl": "#product-marketing-responsibilities", "linkParams": null, "linkTarget": null, "type": "URL_LINK", "children": [] }, { "isPublished": false, "pageLinkId": null, "pageLinkName": null, "isDeleted": null, "categoryId": null, "subCategory": null, "contentType": null, "state": null, "linkLabel": "1. Identify the buyer personas and target audience for your product.", "linkUrl": "#step1", "linkParams": null, "linkTarget": null, "type": "URL_LINK", "children": [] }, { "isPublished": false, "pageLinkId": null, "pageLinkName": null, "isDeleted": null, "categoryId": null, "subCategory": null, "contentType": null, "state": null, "linkLabel": "2. Successfully create, manage and carry out your product marketing strategy.", "linkUrl": "#step2", "linkParams": null, "linkTarget": null, "type": "URL_LINK", "children": [] } ] }, { "isPublished": false, "pageLinkId": null, "pageLinkName": null, "isDeleted": null, "categoryId": null, "subCategory": null, "contentType": null, "state": null, "linkLabel": "How HubSpot can help", "linkUrl": "https://hubspot.com", "linkParams": null, "linkTarget": null, "type": "URL_LINK", "children": [] } ] } ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Matriz de objetos | Estructura JSON para el menú y las opciones secundarias del menú. | `[]` | **React** ```jsx theme={null} import { ModuleFields, SimpleMenuField } from "@hubspot/cms-components/fields"; ``` | Propiedad | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Matriz de objetos | Estructura JSON para el menú y las opciones secundarias del menú. | `[]` | ## Espaciado Este campo proporciona una interfaz de usuario para que los creadores de contenido definan el relleno y el margen. Los campos de espaciado tienen una propiedad `.css` que devuelve el CSS basado en el valor del campo. [Más información sobre la propiedad CSS generada](https://developers.hubspot.es/docs/cms/reference/fields/overview#generated-css). Los campos de espaciado pueden usarse en los [módulos](https://developers.hubspot.es/docs/cms/start-building/building-blocks/modules/overview). Los campos de espaciado solo pueden utilizarse como [campos de estilo](https://developers.hubspot.es/docs/cms/reference/fields/overview#style-fields). ![screenshot of spacing style field expanded in page editor](https://www.hubspot.com/hs-fs/hubfs/spacing%20style%20field%20expanded.png?width=320\&quality=low) **JSON** ```json theme={null} { "name": "img_spacing", "label": "Spacing around image", "required": false, "type": "spacing", "limits": { "padding": { "top": { "max": 50, "min": 25, "units": ["px", "pt", "em"] }, "left": { "max": 50, "units": ["px", "pt", "em"] }, "bottom": { "max": 50, "units": ["px", "pt", "em"] } }, "margin": { "top": { "max": 50, "min": 25, "units": ["px", "pt", "em"] }, "bottom": { "max": 25, "units": ["Q", "rem", "em"] } } }, "default": { "padding": { "top": { "value": 57, "units": "px" }, "bottom": { "value": 57, "units": "px" }, "left": { "value": 57, "units": "px" }, "right": { "value": 57, "units": "px" } }, "margin": { "top": { "value": 20, "units": "px" }, "bottom": { "value": 20, "units": "px" } } } } ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Objeto | : Define los valores de espaciado predeterminados. Contiene `padding` y objetos `margin`:
  • `padding`: puede contener `top`, `right`, `bottom`, `left`
  • `margin`: puede contener objetos `top` y `bottom`
Usa `units` para definir las unidades que un creador de contenido puede usar en HubSpot. Abajo puedes consultar más información sobre las unidades. | `{}` | | `limits` | Objeto | : Define las pautas de la cantidad de espaciado `min` y `max`. Contiene objetos `padding` y `margin`:
  • `padding`: puede contener objetos `top`, `right`, `bottom`, `left`
  • `margin`: puede contener objetos `top` y `bottom`
Usa `units` para definir las unidades que un creador de contenido puede usar en HubSpot. Abajo puedes consultar más información sobre las unidades. | | **React** ```jsx theme={null} import { ModuleFields, SpacingField } from "@hubspot/cms-components/fields"; ``` | Propiedad | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Objeto | : Define los valores de espaciado predeterminados. Contiene `padding` y objetos `margin`:
  • `padding`: puede contener `top`, `right`, `bottom`, `left`
  • `margin`: puede contener objetos `top` y `bottom`
Usa `units` para definir las unidades que un creador de contenido puede usar en HubSpot. Abajo puedes consultar más información sobre las unidades. | `{}` | | `limits` | Objeto | : Define las pautas de la cantidad de espaciado `min` y `max`. Contiene objetos `padding` y `margin`:
  • `padding`: puede contener objetos `top`, `right`, `bottom`, `left`
  • `margin`: puede contener objetos `top` y `bottom`
Usa `units` para definir las unidades que un creador de contenido puede usar en HubSpot. Abajo puedes consultar más información sobre las unidades. | | Cuando uses el campo de espaciado, ten en cuenta lo siguiente: * Debes incluir una lista de `units` al definir un `min` o un `max`. * La propiedad `units` admite los siguientes tipos de unidades: `%`, `ch`, `em`, `ex`, `in`, `lh`, `pc`, `pt`, `px`, `Q`, `rem`, `vh`, `vmax`, `vmin`, y `vw`. * Cuando un creador de contenido edita todo el relleno, HubSpot usará el valor `min` más alto y el valor `max` más bajo. Además, solo las unidades compartidas por todas las partes estarán disponibles para el creador de contenido. ## Etiqueta Los campos de etiqueta permiten a los creadores de contenido seleccionar estos elementos. Este selector de etiquetas devuelve un identificador de etiqueta de blog que puede utilizarse en las funciones relacionadas con estos elementos, como [URL de la etiqueta de blog](/docs/cms/reference/hubl/functions#blog-tag-url) y [publicaciones recientes de la etiqueta de blog](/docs/cms/reference/hubl/functions#blog-recent-tag-posts). Los campos de etiqueta pueden usarse en los módulos. ![tag field](https://cdn2.hubspot.net/hubfs/53/tag%20field.png) **JSON** ```json theme={null} { "id": "c3395cd3-8e60-7e47-2f1b-b7ccf4d669c9", "name": "blog_tag", "label": "Blog Tag", "required": false, "locked": false, "tag_value": "SLUG", "type": "tag", "default": null } ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Cadena | El ID de la etiqueta. | `null` | | `tag_value` | Cadena | El valor del output. Puede ser uno de los siguientes:
  • `ALL`: un objeto que contiene el nombre, el ID único y el slug de la URL de la etiqueta.
  • `ID`: el ID único de la etiqueta.
  • `NAME`: el nombre de la etiqueta.
  • `SLUG`: el slug de la URL de la etiqueta.
| `SLUG` | **React** ```jsx theme={null} import { ModuleFields, TagField } from "@hubspot/cms-components/fields"; ``` | Propiedad | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Cadena | El ID de la etiqueta. | `null` | | `tagValue` | Cadena | El valor del output. Puede ser uno de los siguientes:
  • `ALL`: un objeto que contiene el nombre, el ID único y el slug de la URL de la etiqueta.
  • `ID`: el ID único de la etiqueta.
  • `NAME`: el nombre de la etiqueta.
  • `SLUG`: el slug de la URL de la etiqueta.
| `SLUG` | ## Texto Los campos de texto ofrecen a los creadores de contenido una experiencia de edición de texto simple sin funcionalidad de texto enriquecido. Los campos de texto se muestran inicialmente como una sola línea, pero pueden expandirse hasta convertirse en áreas de texto y admiten múltiples líneas. Utilízalos cuando no quieras que los creadores de contenido tengan control sobre el formato. Si deseas proporcionar controles de formato, utiliza [campos de texto enriquecido](#rich-text). Los campos de texto pueden usarse en los módulos. ![text field](https://cdn2.hubspot.net/hubfs/53/text%20field.png) **JSON** ```json theme={null} { "name": "product_name", "label": "Product Name", "required": false, "locked": false, "validation_regex": "", "allow_new_line": false, "show_emoji_picker": false, "type": "text", "default": "" } ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Cadena | Cadena de texto. | `""` | **React** ```jsx theme={null} import { ModuleFields, TextField } from "@hubspot/cms-components/fields"; ``` | Propiedad | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Cadena | Cadena de texto. | `""` | ## Alineación del texto Este campo proporciona a los creadores de contenido una forma de alinear el contenido de texto dentro de un contenedor. No debe utilizarse para alinear otros recursos, ya que existe un [tipo de campo específico para ello](#alignment). Los campos de alineación de texto pueden usarse en los [módulos](https://developers.hubspot.es/docs/cms/start-building/building-blocks/modules/overview). Los campos de alineación de texto solo pueden utilizarse como [campos de estilo](https://developers.hubspot.es/docs/cms/reference/fields/overview#style-fields). ![Campo de alineación del texto](https://www.hubspot.es/hubfs/Text%20Alignment%20field.png) **JSON** ```json theme={null} { "name": "heading_align", "label": "Heading alignment", "required": false, "type": "textalignment", "default": { "text_align": "LEFT" } } ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Objeto | Objeto que contiene `horizontal_align` y `vertical_align`. | | | `alignment_direction` | Cadena | Determina si se deben mostrar solo los controles de alineación horizontales, solo los verticales o ambos. Puede ser:
  • `HORIZONTAL`
  • `VERTICAL`
  • `BOTH`
| `BOTH` | **React** ```jsx theme={null} import { ModuleFields, TextAlignmentField } from "@hubspot/cms-components/fields"; ``` | Propiedad | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Objeto | Objeto que contiene `horizontal_align` y `vertical_align`. | | | `alignmentDirection` | Cadena | Determina si se deben mostrar solo los controles de alineación horizontales, solo los verticales o ambos. Puede ser:
  • `HORIZONTAL`
  • `VERTICAL`
  • `BOTH`
| `BOTH` | ## URL Los campos de URL ofrecen una experiencia similar a la de los campos de enlace. Proporcionar una interfaz de usuario para que los creadores de contenido agreguen enlaces. Los campos de URL, sin embargo, no muestran una interfaz de usuario para abrir en una nueva ventana, ni indican a los motores de búsqueda que no los sigan. Utiliza este campo cuando tú, como desarrollador, quieras definir los valores para ese comportamiento. Si quieres que el usuario tenga el control, utiliza [campos de enlace](#link) en su lugar. Los campos de URL pueden usarse en los módulos. ![URL field](https://cdn2.hubspot.net/hubfs/53/URL%20field.png) **JSON** ```json theme={null} { "name": "url", "label": "URL", "required": false, "locked": false, "supported_types": ["EXTERNAL", "CONTENT", "FILE", "EMAIL_ADDRESS", "BLOG", "PHONE_NUMBER", "WHATSAPP_NUMBER"], "type": "url", "default": { "content_id": null, "href": "http://example.com", "type": "EXTERNAL" } } ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Objeto | Objeto de URL, con tipo, href e ID de contenido (si el contenido es una página o post en HubSpot) | `{ "content_id" : null, "href" : "", "type" : "EXTERNAL" }` | | `supported_types` | Matriz | Lista de los tipos de enlaces que este campo permite seleccionar. Elimina de la lista los tipos que no quieres que los creadores de contenido puedan definir. Los tipos incluyen:
  • `EXTERNAL`: muestra un campo de entrada de texto para una URL externa.
  • `CONTENT`: muestra un menú desplegable que contiene el sitio web de la cuenta y las landing pages.
  • `FILE`: muestra un selector de archivos.
  • `EMAIL_ADDRESS`: muestra un campo de entrada de texto para una dirección de correo electrónico.
  • `BLOG`: muestra un menú desplegable que contiene las páginas de índice de los blogs de la cuenta.
  • `PHONE_NUMBER`: muestra un campo de entrada de texto para un número de teléfono. El número debe comenzar con `+` y contener de 7 a 15 dígitos (excluyendo el código de país).
  • `WHATSAPP_NUMBER`: muestra un menú desplegable que contiene los números de [WhatsApp conectados](https://knowledge.hubspot.com/es/inbox/connect-whatsapp-to-the-conversations-inbox) a la cuenta.
| `[ "EXTERNAL", "CONTENT", "FILE", "EMAIL_ADDRESS", "BLOG" ]` | **React** ```jsx theme={null} import { ModuleFields, UrlField } from "@hubspot/cms-components/fields"; ``` | Propiedad | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Objeto | Objeto de URL, con tipo, href e ID de contenido (si el contenido es una página o post en HubSpot) | `{ "content_id" : null, "href" : "", "type" : "EXTERNAL" }` | | `supportedTypes` | Matriz | Lista de los tipos de enlaces que este campo permite seleccionar. Elimina de la lista los tipos que no quieres que los creadores de contenido puedan definir. Los tipos incluyen:
  • `EXTERNAL`: muestra un campo de entrada de texto para una URL externa.
  • `CONTENT`: muestra un menú desplegable que contiene el sitio web de la cuenta y las landing pages.
  • `FILE`: muestra un selector de archivos.
  • `EMAIL_ADDRESS`: muestra un campo de entrada de texto para una dirección de correo electrónico.
  • `BLOG`: muestra un menú desplegable que contiene las páginas de índice de los blogs de la cuenta.
  • `PHONE_NUMBER`: muestra un campo de entrada de texto para un número de teléfono. El número debe comenzar con `+` y contener de 7 a 15 dígitos (excluyendo el código de país).
  • `WHATSAPP_NUMBER`: muestra un menú desplegable que contiene los números de [WhatsApp conectados](https://knowledge.hubspot.com/es/inbox/connect-whatsapp-to-the-conversations-inbox) a la cuenta.
| `[ "EXTERNAL", "CONTENT", "FILE", "EMAIL_ADDRESS", "BLOG" ]` | ## Video Los campos de video proporcionan a los editores de contenido un lugar para agregar HubSpot Video a su contenido del módulo sin necesidad de utilizar campos de texto enriquecido. ![Video Field](https://f.hubspotusercontent00.net/hubfs/53/Developer%20Site/assets/images/module-theme-fields/video-field.png) **JSON** ```json theme={null} { "id": "ca4a319e-5b58-422e-47ac-49ce1b51b507", "name": "videoplayer_field", "label": "Video", "required": false, "locked": false, "type": "videoplayer", "show_advanced_options": false, "default": { "player_id": 32173842991, "height": 1224, "width": 1872, "conversion_asset": { "type": "CTA", "id": "c3e4fa03-2c69-461d-b9af-22b2fde86bc7", "position": "POST" }, "loop_video": false, "mute_by_default": false, "autoplay": false, "hide_control": false } } ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Objeto | Objeto de video con ajustes para `player_id`, `height`, `width`, `size_type`, `conversion_asset`, `loop_video`, `mute_by_default`, `autoplay` y `hide_control`. | `[]` | | `show_advanced_options` | Booleano | Define si los creadores de contenido pueden ver las opciones avanzadas predeterminadas. | `false` | **React** ```jsx theme={null} import { ModuleFields, VideoField } from "@hubspot/cms-components/fields"; ``` | Propiedad | Tipo | Descripción | Predeterminado | | - | - | - | - | | `default` | Objeto | Objeto de video con ajustes para `player_id`, `height`, `width`, `size_type`, `conversion_asset`, `loop_video`, `mute_by_default`, `autoplay` y `hide_control`. | `[]` | | `showAdvancedOptions` | Booleano | Define si los creadores de contenido pueden ver las opciones avanzadas predeterminadas. | `false` | ### Parámetros del objeto conversion\_asset | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `type` | Cadena | Acepta `"FORM"`, `"CTA"` o `""` | `""` | | `id` | Cadena | El identificador del tipo de formulario o CTA | `""` | | `position` | Cadena | Si el recurso de conversión debe mostrarse antes de que comience el video o después de que termine. Acepta "PRE" o "POST". | `""` | ``` ``` # Resumen de los campos de módulos y temas Source: https://developers.hubspot.es/docs/cms/reference/fields/overview Los módulos y temas de HubSpot ofrecen a los creadores de contenido opciones de personalización mediante el uso de campos. Los desarrolladores crean y organizan los campos mediante un archivo fields.json. Dentro de los [módulos](https://developers.hubspot.es/docs/cms/start-building/building-blocks/modules/overview) y [temas](/docs/cms/start-building/building-blocks/overview), los campos se utilizan para que los creadores de contenido controlen el estilo y la funcionalidad del módulo y el tema en el sitio web. Al desarrollar un módulo o un tema, incluirás campos en un archivo `fields.json`, los cuales estarán disponibles en los editores de temas y contenido. ![theme-settings-fields](https://www.hubspot.es/hubfs/Knowledge_Base_2023/theme-settings-fields.png) A continuación, encontrarás más información sobre cómo crear y gestionar las opciones para los campos de módulos y temas. Para obtener más información sobre los tipos de campos específicos, echa un vistazo a la [guía de referencia de los tipos de módulos y campos](https://developers.hubspot.es/docs/cms/reference/fields/module-theme-fields). ## Creación y administración de archivos Puedes agregar campos al archivo de [módulo](https://developers.hubspot.es/docs/cms/start-building/building-blocks/modules/overview) `fields.json` localmente a través de la [CLI de HubSpot](/docs/developer-tooling/local-development/hubspot-cli/reference) y en el editor de módulos en la aplicación. Para agregar campos a un [tema](/docs/cms/start-building/building-blocks/overview), debes actualizar el archivo `fields.json` del tema utilizando la CLI. ### CLI de HubSpot Cuando se [desarrolla de forma local ](/docs/developer-tooling/local-development/hubspot-cli/install-the-cli) los campos de los módulos y temas pueden ser editados a través de un archivo `fields.json` dentro de la carpeta del módulo o tema. Para los módulos, este archivo se creará automáticamente cuando se utilice el comando[`hs create module`](/docs/developer-tooling/local-development/hubspot-cli/reference). Todas las opciones de campo disponibles en el editor de módulos están disponibles como propiedades que puedes agregar o editar en el archivo `fields.json`. Esto incluye los campos de repetición, grupos y condiciones. Uno de los beneficios de editar de manera local es que facilita la [inclusión de tus módulos en los sistemas de control de versiones como git](/docs/cms/start-building/introduction/developer-environment/github-integration). ### Editor de módulos El [administrador de diseño](/docs/cms/start-building/introduction/developer-environment/design-manager) tiene una interfaz para la edición de módulos integrada que te permite [crear](https://knowledge.hubspot.com/es/design-manager/create-and-edit-modules), agrupar y [editar campos de módulos](https://knowledge.hubspot.com/es/design-manager/create-and-edit-modules). El editor de módulos incluye una vista previa que te permite visualizar el diseño del módulo y probar el funcionamiento de sus campos. Dado que los módulos interactúan con el diseño general, siempre es recomendable probarlos en la plantilla donde se utilizarán para identificar posibles estilos que puedan modificarlos. Ten en cuenta que si un módulo está almacenado en una carpeta bloqueada no puede ser editado de esta manera. ![Editor de módulos del administrador de diseño](https://cdn2.hubspot.net/hubfs/53/Module%20Editor-1-1.png) > [!WARNING] > > **Nota:** Si estás principalmente trabajando de forma local, pero quieres utilizar el editor de módulos para configurar los campos, asegúrate de [obtener](/docs/developer-tooling/local-development/hubspot-cli/reference#fetch) tus cambios. Esto es importante para quienes utilizan sistemas de control de versiones como git. ## Campos contiguos Por opción predeterminada, los campos de los módulos en los editores de contenido se apilan de forma vertical. Sin embargo, puedes colocar los campos del módulo uno al lado del otro agregando una propiedad `display_width` a los campos en el archivo `fields.json` con un valor `half_width`. ![side-by-side-modules0](https://www.hubspot.es/hubfs/Knowledge_Base_2021/Developer/side-by-side-modules0.png) Un solo campo con un `display_width` de `half_width` aparecerá como un ancho de la mitad de la página en el editor de contenido. Cuando el campo por encima o por debajo de ese campo en el archivo `fields.json` se establece en `half_width`, se colocarán uno al lado del otro. ```json theme={null} // Example module fields.json file [ { "name": "number_field", "label": "Number", "required": false, "locked": false, "display": "slider", "min": 1, "max": 10, "step": 1, "type": "number", "prefix": "", "suffix": "", "default": null, "display_width": "half_width" }, { "label": "Description", "name": "description", "type": "text", "required": true, "default": "Add a description", "display_width": "half_width" } ] ``` ## Grupos de campos Cuando los campos están relacionados entre sí, a menudo tiene sentido agruparlos de forma visual. Puedes hacerlo creando grupos de campos, que son compatibles tanto con los módulos como con los temas. Para crear un grupo de campos de forma local, en `fields.json` crea un objeto con el `type` de `"group"`. A continuación, incluye una matriz `children` para obtener los campos que deseas agrupar. ![simple-field-group-example](https://www.hubspot.es/hubfs/Knowledge_Base_2023_2024/field-group-example-expanded-burrata.png) ```json theme={null} [ { "id": "9c00985f-01db-ac5d-73f5-80ed6c0c7863", "name": "my_text", "display_width": null, "label": "Text", "required": true, "locked": false, "validation_regex": "", "allow_new_line": false, "show_emoji_picker": false, "type": "text", "default": "Add text here" }, { "type": "group", "name": "recipe_summary_group", "label": "Recipe summary", "expanded": true, "inline_help_text": "Summarize the recipe (title and description)", "children": [ { "type": "text", "label": "Recipe title", "name": "recipe_title", "placeholder": "Burrata salad" }, { "type": "text", "label": "Recipe description", "name": "recipe_description", "placeholder": "fig mostarda, hazelnuts, arugula, vincotto, prosciutto, toasted sourdough" } ] } ] ``` Puedes crear más agrupaciones de campos dentro de un grupo añadiendo otro objeto de tipo `"group"` dentro del primer parámetro `children` . A continuación, crea el grupo de campos del mismo modo que en el caso anterior, utilizando `children` para contener los campos. Puedes anidar grupos de campos hasta una profundidad de tres. ![grupo-de-campo-con-agrupación-secundaria](https://www.hubspot.es/hubfs/Knowledge_Base_2023_2024/field-group-example-secondary-group.png) ```json theme={null} [ { "type": "group", "name": "recipe_summary_group", "label": "Recipe summary", "inline_help_text": "Summarize the recipe (title and description)", "display": "inline", "children": [ { "type": "text", "label": "Recipe title", "name": "recipe_title", "placeholder": "Burrata salad" }, { "type": "text", "label": "Recipe description", "name": "recipe_description", "placeholder": "fig mostarda, hazelnuts, arugula, vincotto, prosciutto, toasted sourdough" }, { "type": "group", "name": "secondary_group", "label": "Secondary group", "expanded": false, "children": [ { "name": "bg_color", "label": "Background color", "sortable": false, "required": false, "locked": false, "type": "color", "default": { "color": "#ff0000", "opacity": 100 } } ] } ] } ] ``` #### Opciones de visualización de grupos de campos Puedes personalizar el siguiente comportamiento de visualización de grupos de campos: * **Expansión:** de forma predeterminada, los grupos de campos se mostrarán colapsados en el editor. Los grupos que contengan grupos anidados se mostrarán como botones de desglose que abren el grupo en su propia vista con el grupo más interno mostrando divisores. ![default-collapsed-group](https://www.hubspot.es/hubfs/Knowledge_Base_2023_2024/field-group-collapsed-default.png) * **Tipo de visualización:** de forma predeterminada, los grupos que no contengan grupos anidados se mostrarán como secciones plegables con divisores visuales alrededor de los elementos secundarios. Los grupos que contengan grupos anidados se mostrarán como botones de desglose que abren el grupo en su propia vista con el grupo más interno mostrado con divisores. * **Icono de grupo:** si quieres, puedes incluir un icono de Font Awesome que se muestre a la izquierda de la etiqueta. ![icon-example](https://www.hubspot.es/hubfs/Knowledge_Base_2023_2024/field-group-icon-example.png) ```json theme={null} [ { "type": "group", "name": "recipe_summary_group", "label": "Recipe summary", "display": "drilldown", "inline_help_text": "Summarize the recipe (title and description)", "icon": { "name": "star", "set": "fontawesome-5.14.0", "type": "SOLID" }, "children": [ { "type": "text", "label": "Recipe title", "name": "recipe_title", "placeholder": "Burrata salad" }, { "type": "text", "label": "Recipe description", "name": "recipe_description", "placeholder": "fig mostarda, hazelnuts, arugula, vincotto, prosciutto, toasted sourdough" } ] } ] ``` | Parámetro | Tipo | Descripción | | - | - | - | | `display` | Cadena | El estilo de visualización del grupo de campos. Puede ser una de las siguientes:
  • `drilldown`: muestra el grupo colapsado con un botón para abrir los elementos secundarios del grupo en su propio panel. Esta es la visualización predeterminada para los grupos que contienen grupos anidados.
  • `accordion`: muestra el grupo colapsado con un botón para expandir los elementos secundarios del grupo debajo como una sección expandible. Esta es la visualización predeterminada para grupos sin grupos anidados.
  • `inline`: muestra el grupo y los elementos secundarios en línea sin opción de contraer el grupo.
| | `icon` | Objeto | Añade un icono a la izquierda de la etiqueta. Contiene los siguientes parámetros:
  • `name`: el identificador del icono de Font Awesome.
  • `set`: el [conjunto de iconos](https://developers.hubspot.es/docs/cms/reference/fields/module-theme-fields#icon) de Font Awesome.
  • `type`: el estilo del icono (por ejemplo, `SOLID`, `REGULAR`).
| | `expanded` | Booleano | Si el grupo de campos se expande de forma predeterminada. | #### Resultados de los valores de los campos dentro de los grupos de campos Los grupos de campos crean dicc. que contienen los valores de los campos que deseas mostrar. Si anidas grupos de campos, el grupo de campos anidado será un dicc. dentro del dicc. del grupo de campos externo. Para acceder a esos datos, deberás recorrer desde la variable raíz del tema o del módulo, según corresponda. ```html example.html theme={null}
{# printing a value from a field group `recipe_summary` is the field group, `title` is the text field. #} {{module.recipe_summary.title}}
``` ```css example.css theme={null} /* Printing a Font field's color value, when the font field is within a field group. `typography` is the field group, `h1_font` is the field */ h1{ color: {{ theme.typography.h1_font.color }}; } ``` #### Elementos destacados en los grupos de campos En situaciones donde un grupo de campos se repite, puedes especificar una o más de esas ocurrencias como destacadas, lo que te permite aplicar un estilo diferente para hacer que se destaquen. Por ejemplo, esto puede ser útil en una página de productos donde desees resaltar un producto destacado. Puedes definir un número máximo de elementos destacados por grupo de campos. En el editor, los creadores de contenido pueden marcar los elementos como destacados según sea necesario. ![cms-field-group-featured-in-app (1)](https://knowledge.hubspot.com/hubfs/Knowledge_Base_2023_2024/cms-field-group-featured-in-app%20\(1\).png) Para habilitar los elementos destacados en un grupo de campos, incluye las propiedades `group_occurrence_meta` en la configuración del grupo de campos. Esta propiedad almacena las siguientes propiedades: * `featured_enabled`: se establece como `true` para habilitar los elementos destacados. * `featured_limit`: el número máximo de elementos destacados permitidos. El grupo de campos también debe incluir la propiedad `occurrence`. ```json theme={null} // Field group example { "label": "Card", "name": "card", "type": "group", "occurrence": { "default": 2, "min": 1, "sorting_label_field": "card.title" }, "group_occurrence_meta": { "featured_enabled": true, "featured_limit": 3 }, "children": [ { "label": "Image", "name": "image", "type": "image", "responsive": true, "resizable": true, "show_loading": true, "default": { "loading": "lazy" } }, { "label": "Content", "name": "text", "type": "richtext", "enabled_features": [ "advanced_emphasis", "alignment", "block", "emoji", "font_family", "font_size", "lists", "standard_emphasis" ], "default": "

This is a title

Contextual advertising can be profitable. It can either pay for your hosting and maintenance costs for you website or it can pay for a lot more.

" } ], "default": [ { "image": { "loading": "lazy" }, "text": "

This is a title

Contextual advertising can be profitable. It can either pay for your hosting and maintenance costs for you website or it can pay for a lot more.

" }, { "image": { "loading": "lazy" }, "text": "

This is a title

Contextual advertising can be profitable. It can either pay for your hosting and maintenance costs for you website or it can pay for a lot more.

" } ] } ``` Para validar si un elemento de un grupo repetido está destacado, puedes consultar la propiedad `hs_meta`. El siguiente código utiliza un [bucle "for"](https://developers.hubspot.es/docs/cms/reference/hubl/loops) para comprobar si hay elementos del grupo de campos establecidos como destacados y luego muestra el título de cada uno como un encabezado `h3`. `{{ repeated_group_item.hs_meta.occurrence.featured }}` ```hubl theme={null}

Check out this week's featured items:

{% for item in module.card %} {% if item.hs_meta.occurrence.featured %}

{{item.title}}

{% endif %} {% endfor %}
``` ## Campos de estilo Los campos de estilo son un tipo especial de grupo de campos en el archivo `fields.json` de un módulo o tema que permiten a los creadores de contenido controlar el estilo de un módulo o tema en el editor de páginas y temas. A continuación, aprende como agregar los campos de estilo a un módulo o tema. También, sobre las [prácticas recomendadas para utilizar y organizar los campos de estilo](https://developers.hubspot.es/docs/cms/best-practices/fields). ### Campos de estilo del módulo Los campos de estilo agregados a un módulo aparecerán en la pestaña *Estilos* del editor de páginas al editar el módulo: ![style-field-module-editor0](https://www.hubspot.es/hubfs/Knowledge_Base_2021/Developer/style-field-module-editor0.png) Cuando se agregan campos de estilo al archivo `fields.json` de un módulo, se agregan dentro de un grupo de estilos. Ese grupo, sin embargo, puede contener varios grupos dentro de él, como se muestra a continuación: ```json theme={null} // Module style fields [ { "type": "group", "name": "styles", "tab": "STYLE", "children": [ { "name": "img_spacing", "label": "Spacing around image", "required": false, "type": "spacing", "default": { "padding": { "top": { "value": 10, "units": "px" }, "bottom": { "value": 10, "units": "px" }, "left": { "value": 10, "units": "px" }, "right": { "value": 10, "units": "px" } }, "margin": { "top": { "value": 10, "units": "px" }, "bottom": { "value": 10, "units": "px" } } } } ] } ] ``` Los siguientes campos pueden utilizarse como campos de estilo en los módulos. Obtén más información sobre cada uno de los tipos de campo en la [guía de módulos y tipos de campo](https://developers.hubspot.es/docs/cms/reference/fields/module-theme-fields). * [Alineación](https://developers.hubspot.es/docs/cms/reference/fields/module-theme-fields#alignment) * [Gradientes](https://developers.hubspot.es/docs/cms/reference/fields/module-theme-fields#gradient) * [Espaciado](https://developers.hubspot.es/docs/cms/reference/fields/module-theme-fields#spacing) * [Imagen de fondo](https://developers.hubspot.es/docs/cms/reference/fields/module-theme-fields#background-image) * [Borde](https://developers.hubspot.es/docs/cms/reference/fields/module-theme-fields#border) * [Booleano](https://developers.hubspot.es/docs/cms/reference/fields/module-theme-fields#boolean) * [Elección](https://developers.hubspot.es/docs/cms/reference/fields/module-theme-fields#choice) * [Número](https://developers.hubspot.es/docs/cms/reference/fields/module-theme-fields#number) * [Color](https://developers.hubspot.es/docs/cms/reference/fields/module-theme-fields#color) * [Icono](https://developers.hubspot.es/docs/cms/reference/fields/module-theme-fields#icon) * [Imagen](https://developers.hubspot.es/docs/cms/reference/fields/module-theme-fields#image) * [Fuente](https://developers.hubspot.es/docs/cms/reference/fields/module-theme-fields#font) * [Alineación del texto](https://developers.hubspot.es/docs/cms/reference/fields/module-theme-fields#text-alignment) Más información sobre los [tipos de campo de módulos y temas](https://developers.hubspot.es/docs/cms/reference/fields/module-theme-fields). Consulta la [biblioteca de recursos del CMS de HubSpot](https://github.com/HubSpot/cms-theme-boilerplate/blob/main/src/modules/card.module/fields.json) para ver un ejemplo de campos de estilo dentro del archivo `fields.json` de un módulo. ### Campos de estilo del tema Los campos de estilo agregados a un tema aparecerán en la barra lateral izquierda del editor de temas: ![style-field-theme-editor0](https://www.hubspot.es/hubfs/Knowledge_Base_2021/Developer/style-field-theme-editor0.png) Todos los campos de estilo dentro del archivo `fields.json` de un tema se agregarán a la barra lateral izquierda del editor de temas, sin necesidad de colocarlos dentro de un grupo de estilos, como se muestra a continuación: ```json theme={null} // Theme style fields [ { "label": "Global colors", "name": "global_colors", "type": "group", "children": [ { "label": "Primary", "name": "primary", "type": "color", "visibility": { "hidden_subfields": { "opacity": true } }, "default": { "color": "#494A52" } }, { "label": "Secondary", "name": "secondary", "type": "color", "visibility": { "hidden_subfields": { "opacity": true } }, "default": { "color": "#F8FAFC" } } ] }, { "label": "Global fonts", "name": "global_fonts", "type": "group", "children": [ { "label": "Primary", "name": "primary", "type": "font", "visibility": { "hidden_subfields": { "size": true, "styles": true } }, "inherited_value": { "property_value_paths": { "color": "theme.global_colors.primary.color" } }, "default": { "fallback": "sans-serif", "font": "Lato", "font_set": "GOOGLE" } }, { "label": "Secondary", "name": "secondary", "type": "font", "visibility": { "hidden_subfields": { "size": true, "styles": true } }, "inherited_value": { "property_value_paths": { "color": "theme.global_colors.primary.color" } }, "default": { "fallback": "serif", "font": "Merriweather", "font_set": "GOOGLE" } } ] }, { "name": "branding_color", "label": "branding_color", "type": "color", "default": { "color": "#3b7bc0", "opacity": 60 }, "inherited_value": { "property_value_paths": { "color": "brand_settings.primaryColor" } } }, { "name": "secondary_branding_color", "label": "Secondary Branding color", "type": "color", "default": { "color": "#ff6b6b", "opacity": 60 }, "inherited_value": { "property_value_paths": { "color": "brand_settings.colors[2]" } } } ] } ] ``` Los siguientes campos pueden utilizarse como campos de estilo en los módulos. Obtén más información sobre cada uno de los tipos de campo en la [guía de módulos y tipos de campo](https://developers.hubspot.es/docs/cms/reference/fields/module-theme-fields). * [Booleano](https://developers.hubspot.es/docs/cms/reference/fields/module-theme-fields#boolean) * [Borde](https://developers.hubspot.es/docs/cms/reference/fields/module-theme-fields#border) * [Elección](https://developers.hubspot.es/docs/cms/reference/fields/module-theme-fields#choice) * [Color](https://developers.hubspot.es/docs/cms/reference/fields/module-theme-fields#color) * [Fuente](https://developers.hubspot.es/docs/cms/reference/fields/module-theme-fields#font) * [Imagen](https://developers.hubspot.es/docs/cms/reference/fields/module-theme-fields#image) * [Número](https://developers.hubspot.es/docs/cms/reference/fields/module-theme-fields#number) * [Espaciado](https://developers.hubspot.es/docs/cms/reference/fields/module-theme-fields#spacing) Más información sobre los [tipos de campo de módulos y temas](https://developers.hubspot.es/docs/cms/reference/fields/module-theme-fields). Consulta la [biblioteca de recursos del CMS de HubSpot](https://github.com/HubSpot/cms-theme-boilerplate/blob/main/src/fields.json) para un ejemplo de campos de estilo dentro del archivo `fields.json` de un tema. > [!WARNING] > > **Nota:** Si eres un proveedor en el mercado de HubSpot, no debes reemplazar los campos de contenido existentes por campos de estilo en módulos ya creados. Cambiar la jerarquía de los campos en un archivo `fields.json` puede hacer que las instancias de los módulos existentes pierdan sus datos. En cambio, deberías agregar nuevos campos de estilo o crear una nueva versión con los campos agrupados de forma adecuada. Esto evitará que las actualizaciones causen problemas para los clientes que dependen de tus temas. Para proponer rutas de migración de los módulos antiguos, [consulta el foro de ideas de HubSpot](https://community.hubspot.com/t5/HubSpot-Ideas/Create-a-path-to-make-it-possible-to-migrate-existing-fields-to/idi-p/450311#M85938). ### CSS generado Algunos campos de estilo ofrecen una forma de imprimir CSS directamente en función del valor del campo. Esto es especialmente útil con los campos que pueden controlar un estilo más complejo como los gradientes. Los siguientes campos de estilo tienen una propiedad `.css` generada: * [Imagen de fondo](https://developers.hubspot.es/docs/cms/reference/fields/module-theme-fields#background-image) * [Borde](https://developers.hubspot.es/docs/cms/reference/fields/module-theme-fields#border) * [Color](https://developers.hubspot.es/docs/cms/reference/fields/module-theme-fields#color) * [Fuente](https://developers.hubspot.es/docs/cms/reference/fields/module-theme-fields#font) * [Gradientes](https://developers.hubspot.es/docs/cms/reference/fields/module-theme-fields#gradient) * [Espaciado](https://developers.hubspot.es/docs/cms/reference/fields/module-theme-fields#spacing) * [Alineación del texto](https://developers.hubspot.es/docs/cms/reference/fields/module-theme-fields#text-alignment) ```hubl theme={null} {% require_css %} {% end_require_css %} ``` ## Repetidores Al crear módulos que le dan formato a la información, a menudo hay tipos de información que se repiten. Por ejemplo, un módulo de recetas podría tener un campo para "Ingrediente". Sin embargo, la mayoría de las recetas tienen más de un ingrediente. Podrías proporcionar un campo de texto enriquecido, pero perderías la capacidad de garantizar un estilo consistente y añadir funcionalidades específicas para cada ingrediente. Aquí es donde entran los repetidores. HubSpot ofrece dos tipos de repetidores: campos repetitivos y grupos repetitivos. ### Campos repetitivos Los campos que se repiten son campos normales, pero los creadores de contenido pueden agregar, eliminar y reordenar las instancias del campo. Usando el ejemplo del módulo de receta anterior, cada ingrediente podría ser un campo de texto de repetición. ![campo de repetición](https://cdn2.hubspot.net/hubfs/53/repeater%20field.png) Esto hace que el creador de contenido pueda agregar tantos ingredientes como desee. Desde el punto de vista del desarrollador, obtenemos una matriz que puedes usar para imprimir esa lista de ingredientes, aplicando el formato y la funcionalidad que deseas. Los campos repetitivos son más adecuados para situaciones muy simples. En muchos casos, es más conveniente utilizar los [grupos de repetición](#repeating-groups). > [!WARNING] > > **Nota:** Actualmente no es posible establecer un orden predeterminado para los campos de repetición. #### Campos repetitivos en fields.json ```json theme={null} // Repeating field example { "name": "ingredient", "label": "Ingredient", "required": false, "locked": false, "occurrence": { "min": 1, "max": null, "sorting_label_field": null, "default": 1 }, "allow_new_line": false, "show_emoji_picker": true, "type": "text", "default": ["1 cup water"] } ``` #### Revisar los elementos del módulo HTML+HubL ```html theme={null}
    {% for item in module.ingredient %}
  • {{ item }}
  • {% endfor %}
``` ### Grupos repetidos Los grupos repetidos son grupos de campos con la opción de repetición activada. Los grupos repetidos permiten a los creadores de contenido agregar, eliminar y reordenar los grupos de campos. Utilizando el ejemplo del módulo de recetas, digamos que quieres integrar tu lista de ingredientes con una funcionalidad de lista de compra. ![Grupo de campos que se repiten](https://cdn2.hubspot.net/hubfs/53/Screen%20Shot%202020-02-26%20at%205.19.14%20PM.png) La cantidad de un ingrediente es importante para la lista de compras. Mientras que alguien podría proporcionar eso en el campo de texto, el módulo tendría que analizar el campo de texto y esperar que estemos separando de manera exitosa la cantidad del ingrediente. Aquí es donde los grupos de repetición resultan útiles. La salida de estos campos es un objeto que se puede recorrer en un bucle. #### Grupos repetidos en fields.json ```json theme={null} // Repeating field group example { "id": "ingredients", "name": "ingredients", "label": "Ingredients", "required": false, "locked": false, "occurrence": { "min": 1, "max": null, "sorting_label_field": "ingredients.ingredient", "default": null }, "children": [ { "id": "ingredients.ingredient", "name": "ingredient", "label": "Ingredient", "required": false, "locked": false, "validation_regex": "", "allow_new_line": false, "show_emoji_picker": false, "type": "text", "default": "Water" }, { "id": "ingredients.quantity", "name": "quantity", "label": "Quantity", "required": false, "locked": false, "display": "text", "min": 0, "step": 1, "type": "number", "default": 1 }, { "id": "ingredients.measurement", "name": "measurement", "label": "Measurement", "help_text": "Unit of measurement (cups, tbsp, etc.)", "required": false, "locked": false, "allow_new_line": false, "show_emoji_picker": false, "type": "text", "default": "cups" } ], "type": "group", "default": [ { "ingredient": "Water", "quantity": 1, "measurement": "cups" } ] } ``` #### Recorrer los campos repetidos en los módulos ```html theme={null}

Ingredients

    {% for ingredient in module.ingredients %}
  • {{ ingredient.quantity }} {{ ingredient.measurement }} {{ ingredient.ingredient }}
  • {% endfor %}
``` ### Opciones del repetidor Para mejorar la experiencia de edición y evitar que los creadores de contenido ingresen valores no contemplados en la programación, puedes establecer un mínimo y un máximo de elementos que pueden añadirse a un campo o grupo repetitivo. Para los grupos repetitivos, también puedes definir qué campo servirá como etiqueta para cada elemento al visualizar el repetidor. ![Número máximo de ocurrencias](https://cdn2.hubspot.net/hubfs/53/Screen%20Shot%202020-02-26%20at%205.35.29%20PM.png) ```json theme={null} "occurrence" : { "min" : 1, "max" : 4, "sorting_label_field" : "ingredients.ingredient", } ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `max` | Entero | Número máximo de ocurrencias de este grupo. Evita que el creador de contenido agregue más de este número de elementos en la intefaz de usuario. | `null` | | `min` | Entero | Número mínimo de apariciones de este grupo de campos. Evita que los usuarios tengan menos de este número de elementos en la interfaz de usuario. | `null` | | `sorting_label_field` | Cadena | Este es el ID del campo, del que se extrae el texto para mostrarlo en la interfaz de usuario en las tarjetas arrastrables. El valor predeterminado es el primer campo del grupo. | | ## Campos heredados La propiedad `inherited_value` puede configurarse para hacer que un campo herede su valor predeterminado de otros campos. El valor predeterminado de un campo a partir del valor de otro campo, configura el `default_value_path` con la ruta del nombre del campo de destino. Cuando se establece `default_value_path`, se ignorará cualquier `default` configurado en el campo. Para acceder a los valores de otros campos, las rutas deben incluir `module.` al principio, de manera similar a cómo se accede al valor en el código HubL del módulo. ```json theme={null} // Inherited fields { "name": "body_font", "type": "font", "default": { "font": "Helvetica", "color": "#C27BA0" } }, { "name": "h1_font", "type": "font", "default": {}, "inherited_value": { "default_value_path": "module.body_font", "property_value_paths" : { "font": "module.body_font.font", "font_set": "module.body_font.font_set" } } } ``` > [!NOTE] > > Como la familia de fuentes se determina por una combinación `font` y `font_set`, debes incluir ambos para la heredar los campos de fuente. Aprende más sobre el [campo de fuente](https://developers.hubspot.es/docs/cms/reference/fields/module-theme-fields#font). Para los campos complejos (campos cuyos valores son objetos), los usuarios pueden tener una mayor segmentación sobre qué propiedades se heredan mediante `property_value_path`. Las rutas referenciadas en `inherited_value` también pueden incluir claves de los valores de un campo para campos complejos. Por ejemplo, los campos de color tienen valores de objeto que contienen el color en sí mismo, así como la opacidad. Para obtener el valor real del color sin la opacidad, la ruta debe terminar en `.color`. Por ejemplo, un campo de fuente puede heredar solo su color de un campo de color diferente: ```json theme={null} // Inherited fields with objects { "name": "secondary_color", "type": "color", "default": { "color": "#C27BA0", "opacity": 100 } }, { "name": "h1_font", "type": "font", "default": { "font": "Helvetica", "size": 12, "size_unit": "px" }, "inherited_value": { "property_value_paths": { "color": "module.secondary_color.color" } } } ``` También puedes combinar los efectos de `default_value_path` y `property_value_paths` para heredar un valor predeterminado de un campo mientras se hereda un valor de propiedad específico de un campo diferente: ```json theme={null} // combining default_value_path and property_value_paths { "name": "body_font", "type": "font", "default": { "font": "Helvetica", "color": "#000000" } }, { "name": "secondary_color", "type": "color", "default": { "color": "#C27BA0", "opacity": 100 } }, { "name": "h1_font", "type": "font", "default": {}, "inherited_value": { "default_value_path": "module.body_font", "property_value_paths": { "color": "module.secondary_color.color" } } } ``` Si un campo hereda de otro campo, pero luego se anula directamente en el nivel de la página o en la configuración del tema, su conexión con el campo que controla se interrumpe. Cualquier otro campo que se adjunte a través de `default_value_path` o `property_value_paths` ya no afectará al valor del campo. ## Visibilidad del campo Al definir los campos del módulo y tema personalizados, puedes configurar cuándo aparece un campo agregando el objeto de `visibility` al campo en el archivo `fields.json`. Por ejemplo, puedes establecer un módulo de formulario para mostrar en un área de texto enriquecido cuando se selecciona el mensaje de agradecimiento, pero un selector de página cuando se selecciona una de redireccionamiento. Puedes establecer la visibilidad basada en el valor de un `controlling_field_path` o en una propiedad específica dentro de ese campo usando el parámetro `property`. También puedes aplicar visibilidad a un campo individual, o a un grupo de campos para controlar la visibilidad de todos los elementos del grupo. ```json theme={null} "visibility" : { "controlling_field_path" : "field_name", "controlling_value_regex" : "regular_expression_in_controlling_field", "property": "src", "operator" : "EQUAL" } ``` | Parámetro | Tipo | Descripción | | - | - | - | | `controlling_field_path` | Cadena | La ruta de destino del campo que controla la condición de visualización.
  • Si el campo no está anidado dentro de un grupo de campos, utiliza el nombre del campo (por ejemplo, `field_name`).
  • Para los campos anidados en grupos, la ruta debe coincidir con su estructura de agrupación, separados por un punto. Por ejemplo:
    • `field_group_name.field_name`
    • `parent_group.child_group.field_name`
| | `controlling_value_regex` | Cadena | La expresión regular en el campo de control que debe estar presente para que el campo se muestre. La expresión regular debe coincidir con toda la cadena (no solo con un subconjunto) y distinguir entre mayúsculas y minúsculas. | | `operator` | Cadena | El operador que define cómo debe validarse el valor `controlling_value_regex`. Los operadores pueden ser uno de los siguientes:
  • `NOT_EQUAL`
  • `EQUAL`
  • `EMPTY`
  • `NOT_EMPTY`
  • `MATCHES_REGEX`
| | `property` | Cadena | Establece la visibilidad en función de una propiedad especifica del campo objetivo. Por ejemplo, puedes habilitar la visibilidad cuando la propiedad `src` de un campo de imagen es igual a un valor específico. Por opción predeterminada, si no se proporciona ningún valor para este campo, la visibilidad se basa en el valor convertido a cadena de `controlling_value_regex`. | También puedes incluir un objeto `occurrence_options` dentro del objeto `visibility` para guiar el recuento de valores de un campo repetido. Este objeto debe incluir el `count` con el que comparar y una definición de `operator` . Por ejemplo, para mostrar un campo de texto solo cuando otro campo repetido tiene al menos dos elementos, podrías definir `visibility` de la siguiente manera: ```json theme={null} [ { "type": "group", "name": "ingredients", "label": "Recipe ingredients", "display": "drilldown", "children": [ { "name": "ingredient", "label": "Ingredient", "occurrence": { "min": 1, "max": null, "default": 1 }, "type": "text", "default": ["1 cup water"] }, { "type": "text", "label": "Conditional field", "name": "conditional_field", "visibility": { "controlling_field_path": "ingredients.ingredient", "occurrence_options": { "count": 2, "operator": "GREATER_THAN_OR_EQUAL" } } } ] } ] ``` Puedes utilizar cualquiera de los siguientes valores de `operater` : * `"NOT_EQUAL"` * `"EQUAL"` * `"EMPTY"` * `"NOT_EMPTY"` * `"GREATER_THAN"` * `"GREATER_THAN_OR_EQUAL"` * `"LESS_THAN"` * `"LESS_THAN_OR_EQUAL"` ### Visibilidad avanzada El atributo `visibility` solo puede admitir un criterio a la vez. Para incluir varios criterios con varios operadores, así como el orden de las operaciones, puedes utilizar `advanced_visibility`. ```json theme={null} "visibility_rules" : "ADVANCED", "advanced_visibility" : { "boolean_operator" : "AND", "criteria" : [{ "controlling_field_path" : "field_name", "controlling_value_regex" : "regular_expression_in_controlling_field", "operator" : "MATCHES_REGEX" }, { "controlling_field_path" : "field_name", "controlling_value_regex" : "regular_expression_in_controlling_field", "operator" : "EQUAL" }] } ``` | Parámetro | Tipo | Descripción | | - | - | - | | `visibility_rules` | Cadena | Por opción predeterminada, este valor se establece como `SIMPLE`. Para utilizar `advanced_visibility`, establécelo como `ADVANCED`. | | `boolean_operator` | Cadena | El operador booleano para los criterios condicionales. Puede ser `AND`, o `OR`. | | `criteria` | Matriz | Una matriz de objetos de visibilidad que define los criterios condicionales que deben cumplirse para que se muestre el campo. | | `controlling_field_path` | Cadena | La ruta de puntos del campo que controlan la condición de visualización.
  • Si el campo no está anidado dentro de un grupo de campos, utiliza el nombre del campo (por ejemplo, `field_name`).
  • Para los campos anidados en grupos, la ruta debe coincidir con su estructura de agrupación, separados por un punto. Por ejemplo:
    • `field_group_name.field_name`
    • `parent_group.child_group.field_name`
| | `controlling_value_regex` | Cadena | El valor en el campo de control que debe cumplirse para mostrar el campo. Cuando se utiliza el operador`MATCHES_REGEX`, el regex debe coincidir con toda la cadena (no con un subconjunto) y se ejecuta con precaución en la distinción entre mayúsculas y minúsculas. Un campo con un `controlling_field_path` pero `controlling_value_regex` no es visible si el campo de control tiene algún valor como non-null o non-blank. | | `operator` | Cadena | El operador que define cómo debe validarse el valor `controlling_value_regex`. Los operadores pueden ser uno de los siguientes:
  • `NOT_EQUAL`
  • `EQUAL`
  • `EMPTY`
  • `NOT_EMPTY`
  • `MATCHES_REGEX`
La sintaxis regex es requerida cuando se utiliza `MATCHES_REGEX`. | Por ejemplo, a continuación se muestra la primera parte del código del [módulo de pagos predeterminado](https://developers.hubspot.es/docs/cms/reference/modules/default-modules). Para revisar el código completo, puedes clonar el módulo en HubSpot y luego descargarlo en tu entorno local para ver el archivo `fields.json` del módulo. ```json theme={null} [ { "id": "payment", "name": "payment", "display_width": null, "label": "Payment", "required": true, "locked": false, "type": "payment", "default": { "id": null, "properties": {} } }, { "id": "checkout_location", "name": "checkout_location", "display_width": null, "label": "Checkout behavior", "required": false, "locked": false, "visibility": { "controlling_field_path": "payment", "controlling_value_regex": "id\":\\d+", "operator": "MATCHES_REGEX" }, "display": "radio", "choices": [ ["new_tab", "Open in a new tab"], ["overlay", "Sliding overlay"] ], "type": "choice", "default": "new_tab" }, { "id": "button_text", "name": "button_text", "display_width": null, "label": "Button text", "required": true, "locked": false, "validation_regex": "", "visibility": { "controlling_field_path": "payment", "controlling_value_regex": "id\":\\d+", "operator": "MATCHES_REGEX" }, "allow_new_line": false, "show_emoji_picker": false, "type": "text", "default": "Checkout" }, { "id": "icon", "name": "icon", "display_width": null, "label": "Icon", "required": false, "locked": false, "visibility_rules": "ADVANCED", "advanced_visibility": { "boolean_operator": "AND", "criteria": [ { "controlling_field_path": "payment", "controlling_value_regex": "id\":\\d+", "operator": "MATCHES_REGEX" }, { "controlling_field_path": "add_icon", "controlling_value_regex": "true", "operator": "EQUAL" } ], "children": [] }, "children": [ { "id": "icon.icon", "name": "icon", "display_width": null, "label": "Icon", "required": true, "locked": false, "icon_set": "fontawesome-5.0.10", "type": "icon", "default": { "name": "hubspot", "type": "SOLID", "unicode": "f3b2" } }, { "id": "icon.position", "name": "position", "display_width": null, "label": "Position", "required": true, "locked": false, "display": "select", "choices": [ ["left", "Left"], ["right", "Right"] ], "type": "choice", "default": "left" } ], "tab": "CONTENT", "expanded": false, "type": "group" } // rest of fields.json code ] ``` El código anterior da como resultado el siguiente comportamiento: * El primer campo (`payment`) es un campo obligatorio (menú desplegable) que permite al creador de contenido seleccionar un enlace de pago específico. En HubSpot, un creador de contenido verá lo siguiente cuando agregue el módulo a la página por primera vez: ![payment-link-selector](https://www.hubspot.es/hubfs/Knowledge_Base_2021/Developer/payment-link-selector.png) * Una vez que se selecciona un enlace de pago, aparecerán los tres campos que siguen (`checkout_location`, `button_text` y `icon`). Esto se debe a que los campos tienen un atributo `visibility` que está controlado por el campo `payment` y requiere un valor ID en el parámetro `id` en el campo de pago. El campo `icon` en sí utiliza `advanced_visibility` para aparecer solo cuando hay un enlace de pago presente en el campo `payment` y cuando la casilla de verificación `add_icon` está seleccionada. Además de establecer la visibilidad dentro de `fields.json`, también puedes establecer la visibilidad en el administrador de diseño editando las opciones de *Condiciones de visualización* de un campo. ![display-conditions-property](https://www.hubspot.es/hubfs/Knowledge_Base_2021/Developer/display-conditions-property.png) Después de configurar la visibilidad en el administrador de diseño, puedes [buscar](/docs/developer-tooling/local-development/hubspot-cli/reference#fetch) el módulo [utilizando la CLI](/docs/developer-tooling/local-development/hubspot-cli/install-the-cli) para ver el atributo `visibility` en el archivo `fields.json` del módulo. ## Inhabilitar el campo condicional Puedes agregar condiciones a un campo para evitar la edición cuando se cumplan las condiciones especificadas. También puedes establecer un mensaje para mostrar sobre el campo cuando está inhabilitado y proporcionar detalles en el editor de contenido. ![Captura de pantalla 2023-05-23 a las 16.10.28](https://www.hubspot.es/hubfs/Knowledge_Base_2023/Screenshot%202023-05-23%20at%204.10.28%20PM.png) Las condiciones y el mensaje se establecen en el objeto `disabled_controls` del campo. Las condiciones para hacer un campo editable se establecen dentro del objeto `rules`, que sigue el mismo formato que [advanced\_visibility](#field-visibility). El siguiente código muestra una implementación simple y avanzada de los criterios de `rules`: * El campo `simple_page` incluye la lógica para inhabilitar el campo si el campo `text_field` se establece en `testing`. * El campo `fancy_page` incluye la lógica para deshabilitar el campo si cualquiera de los valores `text_field` o `text_field_2` se establece en cualquier valor que no sea igual a `testing` y `testing2` respectivamente. ```json theme={null} // example fields.json [ { "type": "text", "name": "text_field", "label": "Text field" }, { "type": "text", "name": "text_field_2", "label": "Text field 2" }, { "type": "page", "label": "Simple Page", "name": "simple_page", "disabled_controls": { "message": "This field is disabled", "rules": { "criteria": [ { "controlling_field_path": "text_field", "operator": "EQUAL", "controlling_value_regex": "testing" } ] } } }, { "type": "page", "label": "Fancy Page", "name": "fancy_page", "disabled_controls": { "message": "This field is disabled", "rules": { "boolean_operator": "OR", "criteria": [ { "controlling_field_path": "text_field", "operator": "NOT_EQUAL", "controlling_value_regex": "testing" }, { "controlling_field_path": "text_field_2", "operator": "NOT_EQUAL", "controlling_value_regex": "testing2" } ] } } } ] ``` | Parámetro | Tipo | Descripción | | - | - | - | | `message` | Cadena | El mensaje que se mostrará en el editor de contenido cuando el campo esté desactivado. | | `rules` | Objeto | Las condiciones para activar el campo para la edición. | | `criteria` | Matriz | Una matriz de objetos condicionales que define los criterios que deben cumplirse para que se muestre el campo. Esta matriz puede contener múltiples objetos condicionales separados por lógica `AND` u `OR` a través del parámetro `boolean_operator`. | | `boolean_operator` | Cadena | El operador booleano para los criterios condicionales. Puede ser `AND` u `OR`. Cuando no se especifica, el valor predeterminado es `AND`. | | `controlling_field_path` | Cadena | La ruta de puntos del campo que controlan la condición de visualización.
  • Si el campo no está anidado dentro de un grupo de campos, utiliza el nombre del campo (por ejemplo, `field_name`).
  • Para los campos anidados en grupos, la ruta debe coincidir con su estructura de agrupación, separados por un punto. Por ejemplo:
    • `field_group_name.field_name`
    • `parent_group.child_group.field_name`
| | `controlling_value_regex` | Cadena | El valor en el campo de control que debe cumplirse para mostrar el campo. Cuando se utiliza el operador`MATCHES_REGEX`, el regex debe coincidir con toda la cadena (no con un subconjunto) y se ejecuta con precaución en la distinción entre mayúsculas y minúsculas. Un campo con un `controlling_field_path` pero `controlling_value_regex` no es visible si el campo de control tiene algún valor como non-null o non-blank. | | `operator` | Cadena | El operador que define cómo debe validarse el valor `controlling_value_regex`. Los operadores pueden ser uno de los siguientes:
  • `NOT_EQUAL`
  • `EQUAL`
  • `EMPTY`
  • `NOT_EMPTY`
  • `MATCHES_REGEX`
La sintaxis regex es requerida cuando se utiliza `MATCHES_REGEX`. | ## Resaltador de campos del editor de temas Cuando están en el editor de temas, el resaltador de vista previa puede ayudar a los creadores de contenido a comprender qué campos controlan qué elementos de página. La vista previa del resaltador funciona asignando los campos del tema a los selectores CSS a los que afectan, agregando un cuadro alrededor de esos elementos al pasar el cursor sobre el campo en el editor del tema. Para configurar el resaltador de vista previa para los campos del tema, debes incluir un archivo `editor-preview.json` en el directorio raíz del tema para asignar los campos del tema a una lista de selectores CSS. En el archivo, debes incluir una matriz para cada campo de estilo que deseas resaltar que contiene los selectores CSS relevantes, utilizando el siguiente formato: ```json theme={null} // editor-preview.json { "selectors": { "theme.settings.path.1": [ ], "theme.settings.path.2": [ ], } } ``` Por ejemplo, el código a continuación resaltará qué elementos de la página están controlados por el campo de fuente principal. Puedes ver el ejemplo completo en el archivo `editor-preview.json` del tema Growth predeterminado. ```json theme={null} // editor-preview.json { "selectors": { "fonts.primary": [ "button, .button, .hs-button", "form input[type='submit'], form .hs-button", ".error-page:before", "p", "blockquote > footer", "form td.is-today .pika-button", "form .is-selected .pika-button", "th, td", ".blog-listing__post-tag", ".blog-listing__post-author-name, .blog-post__author-name", ".pagination__link-icon svg", ".tabs__tab", "a", ".button.button--simple", ".pagination__link .pagination__link-icon svg", ".card--dark", ".card--light", ".card--light summary, .card--light p, .card--light h1, .card--light h2, .card--light h3, .card--light h4, .card--light h5, .card--light h6, .card--light a:not(.button), .card--light span, .card--light div, .card--light li, .card--light blockquote", ".card--light .accordion__summary:before", "tfoot th, tfoot td", ".header__language-switcher-current-label > span", ".header__language-switcher-child-toggle svg", ".header__language-switcher .lang_list_class a:not(.button)", ".header__menu-link", ".header__menu-item--depth-1 > .header__menu-link:not(.button)", ".header__menu-item--depth-1 .header__menu-child-toggle svg", ".header__menu-toggle svg", ".header__language-switcher .header__language-switcher-current-label > span", ".header p, .header h1, .header h2, .header h3, .header h4, .header h5, .header h6, .header a:not(.button), .header span, .header li, .header blockquote, .header .tabs__tab, .header .tabs__tab, .header .tabs__tab, .header .tabs__tab", ".footer .hs-menu-wrapper a", ".footer h1, .footer h2, .footer h3, .footer h4, .footer h5, .footer h6, .footer p, .footer a:not(.button), .footer span, .footer div, .footer li, .footer blockquote, .footer .tabs__tab, .footer .tabs__tab, .footer .tabs__tab, .footer .tabs__tab", ".footer hr", "form label", "#email-prefs-form, #email-prefs-form h1, #email-prefs-form h2", "form legend", "form input[type='text'], form input[type='email'], form input[type='password'], form input[type='tel'], form input[type='number'], form input[type='search'], form select, form textarea", ".backup-unsubscribe input[type='email']", "form .legal-consent-container, form .legal-consent-container .hs-richtext, form .legal-consent-container .hs-richtext p", "form .hs-richtext, form .hs-richtext *, form .hs-richtext p, form .hs-richtext h1, form .hs-richtext h2, form .hs-richtext h3, form .hs-richtext h4, form .hs-richtext h5, form .hs-richtext h6", "button, button, button, .button, .button, .button, .hs-button, .hs-button, .hs-button", "button, .button, .hs-button", ".button.button--secondary, .button.button--secondary, .button.button--secondary", ".button.button--secondary", ".header__menu-item--depth-1 > .header__menu-link, .header__menu-item--depth-1 > .header__menu-link", ".header__menu-item--depth-1 > .header__menu-link", ".header__menu-submenu .header__menu-link, .header__menu-submenu .header__menu-link", ".header__language-switcher .lang_list_class a, .header__language-switcher .lang_list_class a", ".header__menu-submenu .header__menu-link:not(.button)", ".footer .hs-menu-wrapper a, .footer .hs-menu-wrapper a", ".footer .hs-menu-wrapper a", "form .hs-richtext a", ".header__menu-item--depth-1 > .header__menu-link--active-link:not(.button)", ".footer .hs-menu-wrapper .active > a" ] } } ``` ![growth-theme-hover](https://www.hubspot.es/hubfs/Knowledge_Base_2023/growth-theme-hover.png) Para comenzar a generar este archivo, ejecuta el siguiente [comando CLI](/docs/developer-tooling/local-development/hubspot-cli/reference#generate-theme-field-selectors-for-in-app-highlighting) para crear el archivo. Durante la creación del archivo, se ejecutará un script para configurar las asignaciones iniciales de los selectores de campo. ```shell theme={null} hs theme generate-selectors ``` | Parámetro | Descripción | | - | - | | `theme-directory-path` | La ruta al directorio de temas. | Después de ejecutar el comando, deberás revisar y ajustar el archivo `editor-preview.json` para asegurarte de que los campos y los selectores estén asignados correctamente. Mientras el comando [generate-selectors](/docs/developer-tooling/local-development/hubspot-cli/reference#generate-theme-field-selectors-for-in-app-highlighting) valida qué campos afectan a qué selectores, deberás hacer las correcciones basadas en cómo se estructura tu tema. Por ejemplo, este comando no puede detectar cuando los módulos están anulando el estilo o cuando estás usando macros. Para probar estas asignaciones, carga el tema a una cuenta y luego ve el editor de temas en esa cuenta (**Configuración** > **Sitio web** > **Temas** > **Ver tema**). # Configurar el Editor de texto enriquecido Source: https://developers.hubspot.es/docs/cms/reference/fields/rich-text-editor El Editor de texto enriquecido dentro de los módulos personalizados ahora proporciona a los desarrolladores la capacidad de eliminar componentes de la barra de herramientas de configuración. Como desarrollador, hay veces que los editores de WYSIWYG proporcionan funciones que, cuando se usan incorrectamente, pueden dificultar el objetivo de una marca unificada y causar problemas de diseño y flujo de contenido. El Editor de texto enriquecido dentro de los módulos personalizados ahora proporciona a los desarrolladores la capacidad de eliminar componentes de la barra de herramientas de configuración a través de la propiedad `enabled_features` dentro del archivo fields.json. > [!WARNING] > > Nota: lo siguiente se aplica a los módulos personalizados que utilizan el campo de texto enriquecido solo en desarrollo local. El uso de esta función no deshabilitará la funcionalidad de las opciones eliminadas del Editor de texto enriquecido, solo la presentación de las opciones. Esto es por razones de compatibilidad con versiones anteriores para que el contenido existente no se vea afectado. ## Cómo usar enabled\_features En tu archivo fields.json donde tienes tu objeto de campo de texto enriquecido, puedes activar ciertas características agregando las opciones válidas de la barra de herramientas en una matriz a la propiedad `enabled_features` como se ilustra a continuación: ```json theme={null} // Rich text field with only Bold, Link, and Image available in the Toolbar { "name": "description", "label": "Description", "required": false, "locked": false, "type": "richtext", "default": null, "enabled_features": ["bold", "link", "image"] } ``` El editor de contenido luego vería el editor de texto enriquecido con solo las opciones incluidas habilitadas como se ilustra en la imagen a continuación: > [!NOTE] > > Nota: algunas características, como el botón "Borrar estilos" que te permite volver al estilo predeterminado para el editor, siempre estarán habilitadas y no se pueden eliminar. Si se omite la propiedad `enabled_features`, se mostrarán todas las características. ![Un ejemplo de una barra de herramientas de RTE con funciones habilitadas.](https://f.hubspotusercontent00.net/hubfs/53/Developer%20Site/assets/images/custom_rte_toolbar.jpg) ## Lista de características A continuación se muestra una lista de características que se pueden habilitar individualmente al usar la propiedad `enabled_features`. ### Grupos de controles | Opción | Description | | - | - | | `colors` | Controles de color de texto y color de fondo. | | `fonts` | Familia de fuentes y controles de tamaño de fuente. | | `indents` | Controles de sangría. | | `lists` | Controles de listas numeradas y con viñetas. | | `standard_emphasis` | Controles de negrita, cursiva y subrayado. | | `advanced_emphasis` | Controles de tachado, superíndice, subíndice y formato de código. | | `glyphs` | Controles de emojis, caracteres especiales e iconos. No se admite en los módulos de correo electrónico. Para agregar el selector de emojis a los módulos de correo electrónico, usa [emojis](#insert-buttons) en su lugar. | ### Formato de texto | Opción | Description | | - | - | | `block` | Muestra el menú desplegable del conmutador de estilo. | | `font_family` | Muestra el menú desplegable del conmutador de fuentes. | | `font_size` | Muestra el menú desplegable de tamaño de la fuente. | | `bold` | Muestra el botón de negrita. | | `italic` | Muestra el botón de cursiva. | | `underline` | Muestra el botón de subrayado. | | `text_color` | Muestra el botón de color del texto. | | `background_color` | Muestra el botón de color de fondo. | | `alignment` | Muestra el botón de alineación. | | `bulleted_list` | Muestra el botón de lista con viñetas. | | `numbered_list` | Muestra el botón de listas numeradas. | | `lineheight` | Muestra el botón de altura de línea. | | `outdent` | Muestra el botón de atenuación. | | `indent` | Muestra el botón de sangría. | | `strikethrough` | Muestra el botón de tachado. | | `superscript` | Muestra el botón de superíndice. | | `subscript` | Muestra el botón de subíndice. | | `code_format` | Muestra el botón de formato de código. | ### Insertar botones | Opción | Description | | - | - | | `link` | Muestra el botón de enlace. | | `image` | Muestra el botón de imagen. No se admite en los módulos de correo electrónico. | | `emoji` | Muestra el botón de emoji. | | `personalize` | Muestra el elemento de barra de herramientas de personalización. | | `cta` | Muestra el elemento del menú de llamada a la acción en el menú de inserción. | | `embed` | Muestra el elemento de menú de incrustación en el menú de inserción. | | `video` | Muestra el elemento del menú de video en el menú de inserción. | | `table` | Muestra el elemento del menú de la tabla en el menú de inserción. | | `charmap` | Muestra el elemento del menú de caracteres especiales en el menú de inserción. | | `anchor` | Muestra el elemento del menú de anclaje en el menú de inserción. | | `hr` | Muestra la posición del menú de línea horizontal en el menú de inserción. | | `nonbreaking_space` | Muestra el elemento de menú de espacio de no ruptura en el menú de inserción. | | `icon` | Muestra el elemento del menú de icono en el menú de inserción. | ### Opciones avanzadas | Opción | Description | | - | - | | `source_code` | Muestra el elemento del menú de código fuente en el menú avanzado. | | `visual_blocks` | Muestra el elemento de menú mostrar bloques en el menú avanzado. | # Filtros de HubL Source: https://developers.hubspot.es/docs/cms/reference/hubl/filters Lista de filtros de HubL y ejemplos para desarrolladores en el CMS de HubSpot. Los filtros modifican la información de salida de tu HubL y pueden aplicarse a diversas instrucciones y expresiones para ajustar el marcador de plantilla que emite el servidor. La sintaxis básica de un filtro es `|filtername` y se agrega directamente después de la instrucción o de la expresión, dentro de sus delimitadores. Algunos filtros tienen parámetros adicionales que se pueden agregar entre paréntesis. La sintaxis básica de un filtro con un parámetro de cadena, un número y un booleano es: `|filtername("stringParameter", 10, true)`. Recuerda que los parámetros de cadena deben ir entre comillas. También, hay que tener en cuenta que los filtros de HubL pueden tener un alias que sirve para el mismo propósito que el filtro principal. Este artículo incluye todos los filtros compatibles de HubL. > [!WARNING] > > ### Nota: > > Puedes aplicar filtros de HubL a los [tokens de personalización](https://knowledge.hubspot.com/marketing-email/use-personalization-tokens), como tokens de contacto y de empresa, en las páginas del CMS de HubSpot y blogs, pero no en los correos electrónicos. ## abs Obtiene el valor absoluto de un número. Puedes usar este filtro para garantizar que un número sea positivo. ```text hubl.txt theme={null} {% set my_number = -53 %} {{ my_number|abs }} ``` ```text resultados renderizados.txt theme={null} 53 ``` ## add Agrega un valor numérico a otro. Este filtro funciona igual que el [operador +](/docs/cms/reference/hubl/operators-and-expression-tests#math). El parámetro entre paréntesis es el sumando que se combina con el valor numérico inicial. ```text hubl.txt theme={null} {% set my_num = 40 %} {{ my_num|add(13) }} ``` ```text resultados renderizados.txt theme={null} 53 ``` ## attr Renderiza el atributo de un diccionario. Este filtro equivale a imprimir una variable existente dentro de un diccionario, como `content.absolute_url`. ```text hubl.txt theme={null} {{ content|attr("absolute_url") }} ``` ```text resultados renderizados.txt theme={null} https://developers.hubspot.com/docs/cms/hubl/filters ``` | Parámetro | Descripción | | - | - | | `attribute_name` | Especifica el atributo a imprimir | ## batch Agrupa los elementos dentro de una secuencia. En el siguiente ejemplo, hay una variable que contiene una secuencia de tipos de frutas. El filtro `batch` se aplica a un bucle que itera a través de la secuencia. El bucle anidado se ejecuta tres veces para imprimir 3 tipos de fruta por fila, antes de que el bucle exterior se ejecute de nuevo. Observa en el resultado final que, como solo hay cinco tipos de fruta, el último elemento se sustituye por un ` ` (el segundo parámetro). ```html example.html theme={null} {% set rows = ["apples", "oranges", "pears", "grapes", "blueberries"] %} {% for row in rows|batch(3, " ") %} {% for column in row %} {% endfor %} {% endfor %}
{{ column }}
``` ```html example.html theme={null}
apples oranges pears
grapes blueberries  
``` | Parámetro | Tipo | Descripción | | - | - | - | | `linecount` | Numérico | El número de elementos a incluir en el lote. | | `fill_with` | Cadena | Especifica lo que hay que incluir para completar los elementos que faltan. | ## between\_times Calcula el tiempo entre dos objetos de tipo fecha y hora en una unidad de tiempo específica. > [!WARNING] > > ### Nota: > > Este filtro debe usarse únicamente con variables que devuelvan una fecha. A partir del 30 de septiembre de 2024, este filtro ya no devolverá la fecha actual cuando se pase un valor nulo. Después de esa fecha, un valor nulo en el filtro devolverá el 30 de septiembre de 2024. ```text hubl.txt theme={null} {% set begin = "2018-07-14T14:31:30+0530"|strtotime("yyyy-MM-dd'T'HH:mm:ssZ") %} {% set end = "2018-07-20T14:31:30+0530"|strtotime("yyyy-MM-dd'T'HH:mm:ssZ") %} {{ begin|between_times(end, "days") }} ``` ```text resultados renderizados.txt theme={null} 6 ``` | Parámetro | Tipo | Descripción | | - | - | - | | `end` | objeto fecha y hora | El objeto fecha y hora final. | | `timeunit` | Cadena | Las unidades de tiempo válidas son `nanos` , `micros` , `millis` , `seconds` , `minutes` , `hours` , `half_days` , `days` , `weeks` , `months` , `years` , `decades` , `centuries` , `millennia` y `eras` . | ## bool Convierte un valor de cadena de texto en un booleano. ```text hubl.txt theme={null} {% if "true"|bool == true %}hello world{% endif %} ``` ```text resultados renderizados.txt theme={null} hello world ``` ## capitalize Escribe en mayúsculas la primera letra de un valor variable. El primer carácter estará en mayúscula, mientras que las demás letras estarán en minúscula. Las siguientes palabras, ya sea separadas por espacios o guiones, no tendrán la primera letra en mayúscula. ```text hubl.txt theme={null} {% set sentence = "the first letter of a sentence should always be capitalized." %} {{ sentence|capitalize }} ``` ```text resultados renderizados.txt theme={null} The first letter of a sentence should always be capitalized. ``` ## center Centra el texto dentro de una longitud de campo determinada utilizando espacios en blanco. Este filtro no es especialmente útil ni recomendable, ya que el compilador HTML de HubSpot elimina los espacios en blanco de forma automática. No obstante, se incluye aquí para brindar una descripción completa. El siguiente ejemplo muestra este filtro aplicado a una variable dentro de una etiqueta pre-Tag, de modo que los espacios en blanco no se eliminan. ```html example.html theme={null}
{% set var = "string to center" %}
before{{ var|center(80) }}after
``` ```html example.html theme={null}
before                                string to center                                after
``` | Parámetro | Tipo | Descripción | | - | - | - | | `width` | Numérico | Especifica la longitud del espacio en blanco para centrar el texto. | ## convert\_rgb Convierte un valor HEX en una cadena RGB. Este filtro es útil si necesitas convertir las variables de color a RGB para utilizarlas con una declaración CSS RGBA. En el siguiente ejemplo, el valor establecido por un módulo de color se convierte en un valor RGB y se utiliza en una declaración CSS RGBA. ```html example.html theme={null} {% set my_color = "#FFFFFF" %} {{ my_color|convert_rgb }} {% set my_color2="#000000" %}
``` ```html example.html theme={null} 255, 255, 255
``` ## cut Elimina una cadena de un valor. Este filtro se puede utilizar para hacer coincidir y cortar una parte de una cadena. El parámetro especifica la parte de la cadena que debe ser eliminada. En el ejemplo a continuación, se elimina el espacio y la palabra "world" del valor original de la variable. ```text hubl.txt theme={null} {% set my_string = "Hello world." %} {{ my_string|cut(" world") }} ``` ```text resultados renderizados.txt theme={null} Hello. ``` | Parámetro | Tipo | Descripción | | - | - | - | | `characters_to_cut` | Cadena | La parte de la cadena que debe ser eliminada. | ## datetimeformat (obsoleto) > [!WARNING] > > **Nota**: este filtro está [obsoleto](/docs/cms/versions-deprecations/deprecated/hubl/filters-functions#datetimeformat-function). En su lugar, usa el filtro [format\_datetime](#format_datetime), que tiene una sintaxis más estandarizada. ## default Si el valor no está definido, se devolverá el primer parámetro; de lo contrario, se mostrará el valor de la variable. Si quieres usar "default" con variables que se evalúan como falsas, tienes que poner el segundo parámetro como `true`. El primer ejemplo de abajo mostrará el mensaje si la variable no está definida. El segundo ejemplo utilizó el filtro en una cadena vacía, que no está definida, pero muestra un mensaje debido al segundo parámetro. ```text hubl.txt theme={null} {{ my_variable|default("my_variable is not defined") }} {{ ""|default("the string was empty", true) }} ``` ```text resultados renderizados.txt theme={null} my_variable is not defined the string was empty ``` | Parámetro | Tipo | Descripción | | - | - | - | | `default_value` | Cadena | El valor que se devolverá si la variable no está definida. Si la variable está definida, se devolverá el valor de la variable. | | `truthy` | Booleano | con el valor `true` para usar con variables que se evalúan como `false`. | ## dictsort Ordena un diccionario y produce pares de clave y valor. Los diccionarios no tienen un orden predeterminado, pero puedes organizarlos por clave o por valor. El primer parámetro es un valor booleano para determinar si la regla de ordenamiento distingue entre mayúsculas y minúsculas. El segundo parámetro determina si ordenar el diccionario por clave o por valor. El siguiente ejemplo muestra un diccionario de contactos ordenado, incluyendo todos los detalles del contacto. ```text hubl.txt theme={null} {% for item in contact|dictsort(false, "value") %} {{item}} {% endfor %} ``` ```text resultados renderizados.txt theme={null} A sorted contact dictionary ``` | Parámetro | Tipo | Descripción | | - | - | - | | `case_sensitive` | Booleano | Determina si las reglas de ordenación distinguen entre mayúsculas y minúsculas. | | `sort_by` | `"key"` \| `"value"` | Determina si ordenar por `key` o `value`. | ## difference Este filtro devuelve las diferencias entre dos conjuntos o listas. La lista que el filtro devuelve contiene todos los elementos únicos que están en la primera lista pero no en la segunda. ```text hubl.txt theme={null} {{ [1, 2, 3]|difference([2, 3, 4, 5]) }} ``` ```text resultados renderizados.txt theme={null} [1] ``` | Parámetro | Tipo | Descripción | | - | - | - | | `list` | Matriz | La segunda lista con la que se pueden comparar los valores para encontrar las diferencias con la lista original. | ## divide Divide el valor actual por un divisor. El parámetro que se pasa es el divisor. Este filtro es una alternativa al operador /. ```text hubl.txt theme={null} {% set numerator = 106 %} {{ numerator|divide(2) }} ``` ```text resultados renderizados.txt theme={null} 53 ``` | Parámetro | Tipo | Descripción | | - | - | - | | `divisor` | Numérico | El número por el que hay que dividir la variable. | ## divisible Es una alternativa a la prueba de la expresión `divisibleby`. El filtro divisible se devolverá como 'true' si el valor es divisible por el número especificado. ```text hubl.txt theme={null} {% set num = 10 %} {% if num|divisible(2) %} The number is divisible by 2 {% endif %} ``` ```text resultados renderizados.txt theme={null} The number is divisible by 2 ``` | Parámetro | Tipo | Descripción | | - | - | - | | `divisor` | Numérico | El número que se va a utilizar cuando se evalúa si el valor es divisible. | ## escape\_html Sustituye el contenido de una entrada HTML. Acepta una cadena y convierte los caracteres `&`, `<`, `>`, `‘`, `”` y `escape_jinjava` en secuencias seguras para HTML. Usa este filtro para las variables de HubL que se emplean en HTML pero no deben admitir código HTML. ```html example.html theme={null} {% set escape_string = "
This markup is printed as text
" %} {{ escape_string|escape_html }} ``` ```html example.html theme={null}
This markup is printed as text
``` ## escape\_attr Sustituye el contenido de una entrada de atributo HTML. Acepta una cadena y convierte los caracteres `&`, `<`, `‘`, `”` y `escape_jinjava` en secuencias seguras para HTML. Utiliza este filtro para las variables HubL que se agregan a los atributos HTML. Ten en cuenta que cuando sustituyas valores de atributos que acepten URLs, como `href`, deberías usar el filtro `escape_url`. ```html example.html theme={null} {% set escape_string = "This
markup is printed as text" %} {{escape_string|escape_attr}} ``` ```html example.html theme={null} This <br> markup is printed as text ``` ## escape\_jinjava Convierte los caracteres `{` y `}` en cadenas a secuencias seguras para Jinjava. Utiliza este filtro si necesitas mostrar un texto que pueda contener dichos caracteres en Jinjava. ```text hubl.txt theme={null} {% set escape_string = "{{This markup is printed as text}}" %} {{ escape_string|escape_jinjava }} ``` ```text resultados renderizados.txt theme={null} {{This markup is printed as text}} ``` ## escape\_js Sustituye cadenas, incluyendo `escape_jinjava`, para que puedan ser insertadas con seguridad en una declaración de variable en JavaScript. Utiliza este filtro para las variables HubL que se usan dentro de los elementos del script HTML. ```text hubl.txt theme={null} {% set escape_string = "\tThey said 'This string can safely be inserted into JavaScript.'" %} {{ escape_string|escape_js }} ``` ```text resultados renderizados.txt theme={null} \tThey said \x27This string can safely be inserted into JavaScript.\x27 ``` ## escape\_url Sustituye el contenido de una URL, aplicando protocolos específicos, eliminando caracteres no válidos o peligrosos y codificando entidades HTML. Devuelve una respuesta vacía si una URL es válida. Utiliza este filtro para las variables HubL que se usan dentro de los atributos HTML y que deben ser URLs válidas. ```text hubl.txt theme={null} {% set escape_string = "http://example.com/with space/" %} ``` ```text resultados renderizados.txt theme={null} ``` ## escapejson Sustituye cadenas para que puedan ser utilizadas como valores en JSON. ```text hubl.txt theme={null} {% set escape_string = "" %} {% require_js position="head" %} {% end_require_js %} ``` ```text resultados renderizados.txt theme={null} ``` ## filesizeformat Convierte un valor numérico en un tamaño de archivo legible (por ejemplo, 13 kB, 4,1 MB, 102 Bytes, etc.). De forma predeterminada, se utilizan prefijos decimales (por ejemplo, MB y GB), pero se pueden ajustar del parámetro `binary` a `true` para utilizar prefijos binarios como mebibyte (MiB) y gibibyte (GiB). ```text hubl.txt theme={null} {% set bytes = 10000 %} {{ bytes|filesizeformat(binary=true) }} ``` ```text resultados renderizados.txt theme={null} 9.8 KiB ``` | Parámetro | Tipo | Descripción | | - | - | - | | `binary` | Booleano | Si se establece como `true`, se utilizan los prefijos binarios, como mebibyte (MiB) y gibibyte (GiB). | ## first Devuelve el primer elemento de una secuencia. ```text hubl.txt theme={null} {% set my_sequence = ["Item 1", "Item 2", "Item 3"] %} {{ my_sequence|first }} ``` ```text resultados renderizados.txt theme={null} Item 1 ``` ## float Convierte un valor en un número de punto flotante. Si la conversión no funciona, devolverá `0.0`. Puedes anular este valor predeterminado utilizando el primer parámetro. ```text hubl.txt theme={null} {% set my_text="25" %} {{ my_text|float + 17 }} ``` ```text resultados renderizados.txt theme={null} 42.0 ``` | Parámetro | Tipo | Descripción | | - | - | - | | `default` | Número | Entero a devolver si la conversión no funciona. | ## forceescape Aplica estrictamente el escape HTML. En el entorno de HubSpot no hay realmente un caso de uso para el doble escape, por lo que esto se comporta generalmente igual que el filtro de escape. ```html example.html theme={null} {% set escape_string = "
This markup is printed as text
" %} {{ escape_string|forceescape }} ``` ```html example.html theme={null}
This markup is printed as text
``` ## format Aplica el formato de cadena de Python a un objeto. El valor `%s` se puede sustituir con otra variable. ```text hubl.txt theme={null} {{ "Hi %s %s"|format(contact.firstname, contact.lastname) }} ``` ```text resultados renderizados.txt theme={null} Hi Monty Python ``` ## format\_currency (obsoleto) > [!WARNING] > > **Nota**: este filtro está [obsoleto](/docs/cms/versions-deprecations/deprecated/hubl/filters-functions). En su lugar, utiliza el filtro [format\_currency\_value](#format_currency_value). ## format\_currency\_value Da formato a un número como divisa, utilizando la divisa predeterminada del portal y la configuración regional especificada como parámetro. Reemplaza el filtro obsoleto [format\_currency](/docs/cms/versions-deprecations/deprecated/hubl/filters-functions#format-currency). ```text hubl.txt theme={null} {{ 100 | format_currency_value(locale='en-GB', currency='EUR', maxDecimalDigits=6, minDecimalDigits=1) }} ``` ```text resultados renderizados.txt theme={null} €100.0 ``` | Parámetro | Tipo | Descripción | | - | - | - | | `locale` | Cadena | [La etiqueta de lenguaje local de Java](https://www.oracle.com/java/technologies/javase/jdk8-jre8-suported-locales.html). El valor predeterminado es la página `locale.Format : ISO639LanguageCodeInLowercase-ISO3166CountryCodeInUppercase`. | | `currency` | Cadena | El [código ISO 4217 en orden alfabético](https://en.wikipedia.org/wiki/ISO_4217) de la divisa, por opción predeterminada, es la divisa predeterminada del portal. No se aceptan códigos numéricos. | | `minDecimalDigits` | Número | El mínimo de dígitos decimales que se pueden utilizar. De manera predeterminada, utiliza el número de decimales estándar de la moneda. | | `maxDecimalDigits` | Número | El máximo de dígitos decimales que se pueden utilizar. De manera predeterminada, utiliza el número de decimales estándar de la moneda. | ## format\_date Le da formato al componente de fecha de un objeto fecha. > [!WARNING] > > ### Nota: > > Este filtro debe usarse únicamente con variables que devuelvan una fecha. A partir del 30 de septiembre de 2024, este filtro ya no devolverá la fecha actual cuando se pase un valor nulo. Después de esa fecha, un valor nulo en el filtro devolverá el 30 de septiembre de 2024. ```text hubl.txt theme={null} {{ content.publish_date | format_date('long') }} {{ content.publish_date | format_date('yyyy.MMMM.dd') }} {{ content.publish_date | format_date('medium', 'America/New_York', 'de-DE') }} ``` ```text resultados renderizados.txt theme={null} November 28, 2022 02022.November.28 28.11.2022 ``` | Parámetro | Tipo | Descripción | | - | - | - | | `format` | `'short'` \| `'medium'` \| `'long'` \| `'full'` \| patrón personalizado | El formato a utilizar. Un patrón personalizado que se basa en el [Unicode LDML](https://unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns). | | `timeZone` | Cadena | La zona horaria de la fecha de salida en el [formato IANA TZDB](https://data.iana.org/time-zones/tzdb/). | | `locale` | Cadena | La configuración regional a utilizar para formatos adaptados al idioma y región. Consulta la [lista de configuraciones regionales compatibles](https://www.oracle.com/java/technologies/javase/java8locales.html). | ## format\_datetime Da formato a los componentes de fecha y hora de un objeto fecha. El filtro reemplaza el filtro obsoleto [datetimeformat](/docs/cms/versions-deprecations/deprecated/hubl/filters-functions#datetimeformat-filter). De manera predeterminada, devuelve una fecha y hora en la zona horaria UTC-0. > [!WARNING] > > ### Nota: > > Este filtro debe usarse únicamente con variables que devuelvan una fecha. A partir del 30 de septiembre de 2024, este filtro ya no devolverá la fecha actual cuando se pase un valor nulo. Después de esa fecha, un valor nulo en el filtro devolverá el 30 de septiembre de 2024. ```text hubl.txt theme={null} {{ content.publish_date | format_datetime('medium', 'America/New_York', 'de-DE') }} ``` ```text resultados renderizados.txt theme={null} 12/31/69 7:00 PM ``` | Parámetro | Tipo | Descripción | | - | - | - | | `format` | `'short'` \| `'medium'` \| `'long'` \| `'full'` \| patrón personalizado | El formato a utilizar. Puede ser uno de los siguientes [Unicode LDML](https://unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns). Cuando se utiliza `long` o `full`, la marca de tiempo incluirá una Z para indicar la hora UTC de desplazamiento cero (por ejemplo, `2:23:00 PM Z`). Para eliminar el designador Z, tienes que especificar un `timeZone`. | | `timeZone` | Cadena | La zona horaria de la fecha de salida en el [formato IANA TZDB](https://data.iana.org/time-zones/tzdb/). De forma predeterminada, devuelve la hora UTC. | | `locale` | Cadena | La configuración regional a utilizar para formatos adaptados al idioma y región. Consulta la [lista de configuraciones regionales compatibles](https://www.oracle.com/java/technologies/javase/java8locales.html). | ## format\_number Le da formato a un número según la configuración regional específica. Incluye un segundo parámetro para ajustar la precisión decimal máxima. ```text hubl.txt theme={null} {{ 1000|format_number('en-US') }} {{ 1000.333|format_number('fr') }} {{ 1000.333|format_number('en-US', 2) }} ``` ```text resultados renderizados.txt theme={null} 1,000 1 000,333 1,000.33 ``` | Parámetro | Tipo | Descripción | | - | - | - | | `locale` | Cadena | La configuración regional que se utilizará para el formato. Consulta la [lista de configuraciones regionales compatibles](https://www.oracle.com/java/technologies/javase/java8locales.html). | | `maxDecimalDigits` | Número | El máximo de dígitos decimales que se pueden utilizar. De forma predeterminada, utilizará el número de dígitos decimales del valor introducido. | ## format\_time Le da formato al componente de fecha de un objeto fecha. > [!WARNING] > > ### Nota: > > Este filtro debe usarse únicamente con variables que devuelvan una fecha. A partir del 30 de septiembre de 2024, este filtro ya no devolverá la fecha actual cuando se pase un valor nulo. Después de esa fecha, un valor nulo en el filtro devolverá el 30 de septiembre de 2024. ```text hubl.txt theme={null} {{ content.updated | format_time('long') }} {{ content.updated | format_time('hh:mm a') }} {{ content.updated | format_time('medium', 'America/New_York', 'de-DE') }} ``` ```text resultados renderizados.txt theme={null} 3:25:06 PM Z 03:25 PM 10:25:44 ``` | Parámetro | Tipo | Descripción | | - | - | - | | `format` | `'short'` \| `'medium'` \| `'long'` \| `'full'` \| patrón personalizado | El formato a utilizar. Puede ser uno de los siguientes [Unicode LDML](https://unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns). Cuando se utiliza `long` o `full`, la marca de tiempo incluirá una Z para indicar la hora UTC de desplazamiento cero (por ejemplo, `2:23:00 PM Z`). Para eliminar el designador Z, tienes que especificar un `timeZone`. | | `timeZone` | Cadena | La zona horaria de la fecha de salida en el [formato IANA TZDB](https://data.iana.org/time-zones/tzdb/). De forma predeterminada, devuelve la hora UTC. | | `locale` | Cadena | La configuración regional a utilizar para formatos adaptados al idioma y región. Consulta la [lista de configuraciones regionales compatibles](https://www.oracle.com/java/technologies/javase/java8locales.html). | ## fromjson Convierte una cadena JSON en un objeto. ```text hubl.txt theme={null} {% set obj ='{ "name":"Brian","role":"Owner" }' %} {{ obj|fromjson }} ``` ```text resultados renderizados.txt theme={null} {role=Owner, name=Brian} ``` ## geo\_distance Calcula la distancia elipsoidal en 2D entre dos puntos de la Tierra. ```text hubl.txt theme={null} {{ row.location | geo_distance(37.3435, -122.0344, "mi") }} MI ``` ```text resultados renderizados.txt theme={null} 861.1655563461395 MI ``` ## groupby El filtro groupby agrupa una secuencia de objetos por un atributo en común. El parámetro define el atributo común por el cual agrupar. ```html example.html theme={null}
    {% for group in contents|groupby("blog_post_author") %}
  • {{ group.grouper }}
      {% for content in group.list %}
    • {{ content.name }}
    • {% endfor %}
  • {% endfor %}
``` ```text resultados renderizados.txt theme={null}
  • Blog author 1
    • Post by Blog author 1
    • Post by Blog author 1
    • Post by Blog author 1
  • Blog author 2
    • Post by Blog author 2
    • Post by Blog author 2
    • Post by Blog author 2
  • Blog author 3
    • Post by Blog author 3
    • Post by Blog author 3
    • Post by Blog author 3
``` | Parámetro | Descripción | | - | - | | `attribute` | El atributo por el que se va a agrupar. | ## indent Indenta el texto dentro de una longitud utilizando espacios en blanco. Este filtro no es especialmente útil ni recomendable, ya que el compilador HTML de HubSpot elimina los espacios en blanco de forma automática. Sin embargo, se menciona aquí para ofrecer una descripción completa. El siguiente ejemplo muestra el filtro `indent` aplicado a una variable dentro de una etiqueta `
`, de modo que los espacios en blanco no se eliminen. El primer parámetro controla la cantidad de espacios en blanco y el segundo booleano cambia la sangría de la primera línea.

```html example.html theme={null}
{% set var = "string to indent" %}
{{ var|indent(2, true) }}
``` ```text resultados renderizados.txt theme={null} string to indent ``` | Parámetro | Tipo | Descripción | | - | - | - | | `width` | Numérico | La cantidad de espacios en blanco que se aplicarán. | | `indent-first` | Booleano | Si se establece como `true`, se indenta la primera línea. | ## int Convierte el valor en un entero. Si la conversión no funciona, devolverá `0`. Puedes anular este valor predeterminado utilizando el primer parámetro. ```text hubl.txt theme={null} {% set string="25" %} {{ string|int + 17 }} ``` ```text resultados renderizados.txt theme={null} 42 ``` | Parámetro | Tipo | Descripción | | - | - | - | | `default` | Numérico | Entero a devolver si la conversión no funciona. | ## intersect Este filtro devuelve la intersección de dos conjuntos o listas. La lista que el filtro devuelve contiene todos los elementos únicos que están contenidos en ambas listas. ```text hubl.txt theme={null} {{ [1, 2, 3]|intersect([2, 3, 4, 5]) }} ``` ```text resultados renderizados.txt theme={null} [2, 3] ``` | Parámetro | Tipo | Descripción | | - | - | - | | `list` | Matriz | La segunda lista con la que se comparará la lista original para encontrar su intersección. | ## ipaddr Se evalúa como `true` si el valor es una dirección IPv4 o IPv6 válida. ```text hubl.txt theme={null} {% set ip = "1.0.0.1" %} {% if ip|ipaddr %} The string is a valid IP address {% endif %} ``` ```text resultados renderizados.txt theme={null} The string is a valid IP address ``` ## join Devuelve una cadena que es la concatenación de las cadenas de la secuencia. El separador entre elementos es una cadena vacía por opción predeterminada, puedes definirlo con un parámetro opcional. El segundo parámetro puede utilizarse para especificar un atributo a unir. ```text hubl.txt theme={null} {% set my_list = [1, 2, 3] %} {% set sep = "---" %} {{ my_list|join }} {{ my_list|join("|") }} {{ my_list|join(sep) }} ``` ```text resultados renderizados.txt theme={null} 123 1|2|3 1---2---3 ``` | Parámetro | Tipo | Descripción | | - | - | - | | `delimiter` | Cadena | El delimitador a utilizar al concatenar cadenas. | | `attribute` | Variable de HubL | Atributo de valor para unir en un objeto. | ## last Devuelve el último elemento de una secuencia. ```text hubl.txt theme={null} {% set my_sequence = ["Item 1", "Item 2", "Item 3"] %} {% my_sequence|last %} ``` ```text resultados renderizados.txt theme={null} Item 3 ``` ## length Devuelve el número de elementos de una secuencia o estructura de datos. ```text hubl.txt theme={null} {% set services = ["Web design", "SEO", "Inbound Marketing", "PPC"] %} {{ services|length }} ``` ```text resultados renderizados.txt theme={null} 4 ``` ## list Convierte los valores en una lista. Las cadenas se devolverán como caracteres separados a menos que estén contenidas en delimitadores de secuencia de corchetes `[ ]`. ```text hubl.txt theme={null} {% set one = 1 %} {% set two = 2 %} {% set three = "three" %} {% set four = ["four"] %} {% set list_num = one|list + two|list + three|list + four|list %} {{ list_num }} ``` ```text resultados renderizados.txt theme={null} [1, 2, t, h, r, e, e, four] ``` ## log Calcula el logaritmo natural de un número. ```text hubl.txt theme={null} {{ 10|log }} {{ 65536|log(2) }} ``` ```text resultados renderizados.txt theme={null} 2.302585092994046 16.0 ``` | Parámetro | Tipo | Descripción | | - | - | - | | `base` | Número | La base a utilizar para el cálculo logarítmico. | ## lower Convierte todas las letras de un valor a minúsculas. ```text hubl.txt theme={null} {% set text="Text to MAKE LowercaSe" %} {{ text|lower }} ``` ```text resultados renderizados.txt theme={null} text to make lowercase ``` ## map Aplica un filtro a una secuencia de objetos o busca un atributo. Este filtro es especialmente útil cuando trabajas con listas de objetos y solo necesitas obtener un valor en particular. El uso básico es la asignación en un atributo. Por ejemplo, si deseas utilizar la lógica condicional para comprobar si un valor está presente en un atributo particular de un dicc. Como alternativa, puedes permitir que aplique un filtro pasando el nombre del filtro seguido de los argumentos. ```text hubl.txt theme={null} {# Usage 1 #} Apply a filter to a sequence: {% set seq = ["item1", "item2", "item3"] %} {{ seq|map("upper") }} {# Usage 2 #} Look up an attribute: {{ content|map("currentState")}} ``` ```text resultados renderizados.txt theme={null} Apply a filter to a sequence: [ITEM1, ITEM2, ITEM3] Look up an attribute: [DRAFT] ``` | Parámetro | Tipo | Descripción | | - | - | - | | `filter` | Filtro a aplicar a la secuencia de objetos. | | ## md5 Calcula el [hash md5](https://en.wikipedia.org/wiki/MD5) del objeto dado. ```text hubl.txt theme={null} {{ content.absolute_url|md5 }} ``` ```text resultados renderizados.txt theme={null} 923adb4ce05a4c6342c04c80be88d15e ``` ## minus\_time Resta una cantidad de tiempo a un objeto de fecha y hora. ```text hubl.txt theme={null} {% set date = "2018-07-14T14:31:30+0530"|strtotime("yyyy-MM-dd'T'HH:mm:ssZ") %} {{ date }} {{ date|minus_time(2, "months") }} ``` ```text resultados renderizados.txt theme={null} 2018-07-14 14:31:30 2018-05-14 14:31:30 ``` | Parámetro | Tipo | Descripción | | - | - | - | | `diff` | Numérico | Cantidad a restar. | | `timeunit` | Cadena | Las unidades de tiempo válidas son `nanos` , `micros` , `millis` , `seconds` , `minutes` , `hours` , `half_days` , `days` , `weeks` , `months` , `years` , `decades` , `centuries` , `millennia` y `eras` . | ## multiply Multiplica un valor por un número. Funciona igual que el [\ operador \*](/docs/cms/reference/hubl/operators-and-expression-tests). ```text hubl.txt theme={null} {% set n = 20 %} {{ n|multiply(3) }} ``` ```text resultados renderizados.txt theme={null} 60 ``` ## plus\_time Agrega una cantidad de tiempo a un objeto de fecha y hora. ```text hubl.txt theme={null} {% set date = "2018-07-14T14:31:30+0530"|strtotime("yyyy-MM-dd'T'HH:mm:ssZ") %} {{ date }} {{ date|plus_time(5, "days") }} ``` ```text resultados renderizados.txt theme={null} 2018-07-14 14:31:30 2018-07-19 14:31:30 ``` | Parámetro | Tipo | Descripción | | - | - | - | | `diff` | Numérico | Cantidad a restar. | | `timeunit` | Cadena | Las unidades de tiempo válidas son `nanos` , `micros` , `millis` , `seconds` , `minutes` , `hours` , `half_days` , `days` , `weeks` , `months` , `years` , `decades` , `centuries` , `millennia` y `eras` . | ## pprint Muestra una variable con formato legible. Muestra el tipo de variable y otra información útil para la depuración. ```text hubl.txt theme={null} {% set this_var ="Variable that I want to debug" %} {{ this_var|pprint }} ``` ```text resultados renderizados.txt theme={null} (String: Variable that I want to debug) ``` ## random Devuelve un elemento aleatorio de la secuencia. > [!WARNING] > > ### Nota: > > Cuando uses este filtro, la página se [prerrenderizará](/docs/cms/best-practices/testing-staging-performance/prerendering) periódicamente en lugar de cada vez que se actualice el contenido de la página. Esto significa que el contenido filtrado no se actualizará cada vez que se cargue la página de nuevo. > > Esto puede no ser un problema para ciertos tipos de contenido, como mostrar una lista aleatoria de publicaciones de blog. Sin embargo, si necesitas que el contenido cambie al azar cada vez que se carga una página, deberías usar JavaScript para mostrar de forma aleatoria el contenido del lado del cliente. ```text hubl.txt theme={null} {% for content in contents|random %}
Post item markup
{% endfor %} ``` ```text resultados renderizados.txt theme={null}
Random post
``` ## regex\_replace Busca un patrón de expresión regular y lo sustituye por una secuencia de caracteres. El primer argumento es un patrón de expresión regular estilo RE2, el segundo es la cadena de sustitución. Más información sobre [la sintaxis regex RE2](https://github.com/google/re2/wiki/Syntax). ```text hubl.txt theme={null} {{ "contact-us-2"|regex_replace("[^a-zA-Z]", "") }} ``` ```text resultados renderizados.txt theme={null} contactus ``` ## reject Filtra una secuencia de objetos aplicando una [prueba de expresión](/docs/cms/reference/hubl/operators-and-expression-tests) al objeto y rechazando los que tienen éxito en la prueba. ```text hubl.txt theme={null} {% set some_numbers = [10, 12, 13, 3, 5, 17, 22] %} {{ some_numbers|reject("even") }} ``` ```text resultados renderizados.txt theme={null} [13, 3, 5, 17] ``` | Parámetro | Tipo | Descripción | | - | - | - | | `exp_text` | Cadena | El nombre de la [prueba de expresión](/docs/cms/reference/hubl/operators-and-expression-tests#expression-tests) que se aplicará al objeto. | ## rejectattr Filtra una secuencia de objetos aplicando una prueba a un atributo de un objeto y rechazando los que tienen éxito en la prueba. ```html example.html theme={null} {% for content in contents|rejectattr("post_list_summary_featured_image") %}
{% if content.post_list_summary_featured_image %} {% endif %} {{ content.post_list_content|safe }}
{% endfor %} ``` ```html example.html theme={null}
Post with no featured image
Post with no featured image
Post with no featured image
``` | Parámetro | Tipo | Descripción | | - | - | - | | `attribute_name` | Cadena | Especifica el atributo a seleccionar. Puedes acceder a los atributos anidados utilizando la notación de puntos. | | `exp_test` | Cadena | el nombre de la [prueba de expresión](/docs/cms/reference/hubl/operators-and-expression-tests#expression-tests) que se aplicará al objeto. | ## render Procesa cadenas que contienen HubL de manera anticipada para que el resultado pueda pasarse a otros filtros. ```html example.html theme={null} {{ personalization_token("contact.lastname", "default value")|render|lower }} ``` ```html example.html theme={null} mclaren ``` ## replace Reemplaza todas las instancias de una subcadena por una nueva. ```html example.html theme={null} {% if topic %}

Posts about {{ page_meta.html_title|replace("Blog | ", "") }}

{% endif %} ``` ```html example.html theme={null}

Posts about topic name

``` | Parámetro | Tipo | Descripción | | - | - | - | | `old` | Cadena | La subcadena que se debe reemplazar. | | `new` | Cadena | La subcadena que será reemplazada. | | `count` | Número | Si se proporciona, solo se reemplazan las primeras ocurrencias. | ## reverse Revierte el objeto o devuelve un iterador que recorre el objeto en sentido inverso. Para invertir una lista utiliza [.reverse()](/docs/cms/reference/hubl/functions#reverse) ```text hubl.txt theme={null} {% set nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] %} {% for num in nums|reverse %} {{ num }} {% endfor %} ``` ```text resultados renderizados.txt theme={null} 10 9 8 7 6 5 4 3 2 1 ``` ## root Extrae la raíz cuadrada de un valor. ```text hubl.txt theme={null} {{ 16|root }} {{ 625|root(4) }} ``` ```text resultados renderizados.txt theme={null} 4 5 ``` | Parámetro | Tipo | Descripción | | - | - | - | | `nth_root` | Número | La raíz enésima a utilizar para el cálculo. | ## round Redondea un número con la precisión especificada. ```text hubl.txt theme={null} {{ 52.5|round }} {{ 52.5|round(0, "floor") }} ``` ```text resultados renderizados.txt theme={null} 53 52 ``` | Parámetro | Tipo | Descripción | | - | - | - | | `precision` | Número | Especifica la precisión del redondeo. | | `rounding_method` | `'common'` (predeterminado) \| `'ceil'` \| `'floor'` | las opciones incluyen `common` redondea hacia arriba o hacia abajo (predeterminado); `ceil` siempre redondea hacia arriba; `floor` siempre redondea hacia abajo. | ## safe Marca el valor como seguro, lo que evita que se escape en entornos con escape automático activado. ```text hubl.txt theme={null} {{ content.post_list_content|safe }} ``` ```html example.html theme={null}

HTML post content that is not escaped.

``` ## sanitize\_html Depura el contenido de una entrada HTML para la salida de contenido de texto enriquecido. Acepta una cadena y luego elimina las etiquetas HTML que no están permitidas. Utiliza este filtro para las variables HubL que se usan en HTML y que deberían permitir un HTML seguro. Puedes incluir los siguientes parámetros para permitir los específicos tipos de etiquetas HTML: `FORMATTING`, `BLOCKS`, `STYLES`, `LINKS`, `TABLES`, `IMAGES`. Por ejemplo, `sanitize_html(IMAGES)`. El uso de `sanitize_html` incluirá todos los parámetros en el filtro. También puedes incluir un parámetro `STRIP` para eliminar todo el HTML. Todo el contenido también se ejecuta mediante `escape_jinjava` para evitar la interpretación anidada. ```text hubl.txt theme={null} {% set escape_string = "This
markup is printed as text.
" %} {{ escape_string|sanitize_html("IMAGES") }} ``` ```html example.html theme={null} This markup is printed as text.
``` ## select Filtra una secuencia de objetos aplicando una prueba al objeto y seleccionando solo los que tienen éxito en la prueba. ```text hubl.txt theme={null} {% set some_numbers = [10, 12, 13, 3, 5, 17, 22] %} {{ some_numbers|select("even") }} ``` ```html example.html theme={null} [10, 12, 22] ``` | Parámetro | Tipo | Descripción | | - | - | - | | `exp_text` | Cadena | La prueba de expresión que se aplicará al objeto. | ## selectattr Filtra una secuencia de objetos aplicando una prueba a un atributo de un objeto y seleccionando solo los que tienen éxito en la prueba. ```html example.html theme={null} {% for content in contents|selectattr("post_list_summary_featured_image") %}
{% if content.post_list_summary_featured_image %} {% endif %} {{ content.post_list_content|safe }}
{% endfor %} ``` ```html example.html theme={null}
Post with featured image
``` | Parámetro | Tipo | Descripción | | - | - | - | | `attribute_name` | Cadena | El atributo que debe ponerse a prueba. Puedes acceder a los atributos anidados utilizando la notación de puntos. | | `exp_test` | Cadena | el nombre de la [prueba de expresión](/docs/cms/reference/hubl/operators-and-expression-tests#expression-tests) que se aplicará al objeto. | | `val` | Cadena | Valor a comprobar. | ## shuffle Organiza de forma aleatoria el orden de iteración a través de una secuencia. El siguiente ejemplo mezcla un bucle de blog estándar. > [!WARNING] > > ### Nota: > > Cuando uses este filtro, la página se [prerrenderizará](/docs/cms/best-practices/testing-staging-performance/prerendering) periódicamente en lugar de cada vez que se actualice el contenido de la página. Esto significa que el contenido filtrado no se actualizará cada vez que se cargue la página de nuevo. > > Esto puede no ser un problema para ciertos tipos de contenido, como mostrar una lista aleatoria de publicaciones de blog. Sin embargo, si necesitas que el contenido cambie al azar cada vez que se carga una página, deberías usar JavaScript para mostrar de forma aleatoria el contenido del lado del cliente. ```html example.html theme={null} {% for content in contents|shuffle %}
Markup of each post
{% endfor %} ``` ```html example.html theme={null}
Markup of each post 5
Markup of each post 3
Markup of each post 1
Markup of each post 2
Markup of each post 4
``` ## slice Corta un iterador y devuelve una lista de listas que contienen esos elementos. El primer parámetro especifica cuántos elementos serán cortados y el segundo parámetro especifica los caracteres para rellenar los cortes vacíos. ```html example.html theme={null} {% set items = ["laptops", "tablets", "smartphones", "smart watches", "TVs"] %}
{% for column in items|slice(3," ") %}
    {% for item in column %}
  • {{ item }}
  • {% endfor %}
{% endfor %}
``` ```html example.html theme={null}
  • laptops
  • tablets
  • smartphones
  • smart watches
  • TVs
``` | Parámetro | Tipo | Descripción | | - | - | - | | `slices` | Numérico | Cuántos artículos se cortarán. | | `filler` | Cadena | Especifica los caracteres para rellenar los cortes vacíos. | ## sort Ordena un iterable. Este filtro requiere que todos los parámetros se ordenen por un atributo en HubSpot. El primer parámetro es un booleano para invertir el orden de clasificación y el segundo parámetro determina si el orden distingue entre mayúsculas y minúsculas. El último parámetro especifica un atributo por el que ordenar. En el siguiente ejemplo, las entradas de un blog se representan y se ordenan alfabéticamente por nombre. ```html example.html theme={null} {% set my_posts = blog_recent_posts("default", limit=5) %} {% for item in my_posts|sort(False, False, "name") %} {{ item.name }}
{% endfor %} ``` ```html example.html theme={null} A post
B post
C post
D post
E post
``` | Parámetro | Tipo | Descripción | | - | - | - | | `reverse` | Booleano | Establécelo como `true` para invertir el orden de clasificación. | | `case_sensitive` | Booleano | Establécelo como `true` para que el orden distinga entre mayúsculas y minúsculas. | | `attribute` | Cadena | Atributo por el que ordenar. Puedes omitirlo al ordenar una lista. | ## split Divide la cadena de entrada en una lista usando el separador indicado. El primer parámetro especifica el separador entre el que se divide la variable y el segundo parámetro determina cuántas veces debe dividirse la variable. El resto de los artículos permanecerán en el grupo. En el siguiente ejemplo, una cadena de nombres se divide en el `;` para los primeros cuatro nombres. ```html example.html theme={null} {% set string_to_split = "Mark; Irving; Helly; Dylan; Milchick; Harmony;" %} {% set names = string_to_split|split(";", 4) %}
    {% for name in names %}
  • {{ name }}
  • {% endfor %}
``` ```html example.html theme={null}
  • Mark
  • Irving
  • Helly
  • Dylan; Milchick; Harmony;
``` | Parámetro | Tipo | Descripción | | - | - | - | | `character_to_split_by` | Cadena | Especifica el separador entre el que se divide la variable. | | `number_of_splits` | Número | Determina cuántas veces debe dividirse la variable. Los elementos restantes permanecerán agrupados. | ## string Convierte un tipo de variable diferente en una cadena. En el siguiente ejemplo, un número entero se convierte en una cadena (se utiliza `pprint` para confirmar el cambio de tipo de la variable). ```text hubl.txt theme={null} {% set number_to_string = 45 %} {{ number_to_string|string|pprint }} ``` ```text resultados renderizados.txt theme={null} (String: 45) ``` ## striptags Elimina las etiquetas SGML y XML, y reemplaza los espacios en blanco adyacentes por un espacio. Este filtro puede utilizarse para eliminar cualquier etiqueta HTML de una variable. ```html example.html theme={null} {% set some_html = "
Some text
" %} {{ some_html|striptags }} ``` ```html example.html theme={null} some text ``` ## strtodate Convierte una cadena y un formato de fecha en un objeto de fecha. ```text hubl.txt theme={null} {{ '3/3/21'|strtodate('M/d/yy') }} ``` ```text resultados renderizados.txt theme={null} 2021-03-03 00:00:00 ``` | Parámetro | Tipo | Descripción | | - | - | - | | `dateFormat` | Cadena | El [formato de fecha](https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html) a utilizar. | ## strtotime Convierte una cadena de fecha y hora y un formato datetime en un objeto de fecha y hora. ```text hubl.txt theme={null} {{ "2018-07-14T14:31:30+0530"|strtotime("yyyy-MM-dd'T'HH:mm:ssZ")|unixtimestamp }} ``` ```text resultados renderizados.txt theme={null} 1531558890000 ``` | Parámetro | Tipo | Descripción | | - | - | - | | `datetimeFormat` | Cadena | El [formato de fecha y hora](https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html) a utilizar. | ## sum Agrega valores numéricos en una secuencia. El primer parámetro puede especificar un atributo opcional y el segundo parámetro establece un valor a devolver si no hay nada en la variable a sumar. ```text hubl.txt theme={null} // Simple sum {% set sum_this = [1, 2, 3, 4, 5] %} {{ sum_this|sum }} // Sum of attribute {% set items = [15, 10] %} {% set dict_var = [{"name": "Item1", "price": "20"}, {"name": "Item2", "price": "10"}] %} Total: {{ dict_var|sum(attribute="price") }} ``` ```text resultados renderizados.txt theme={null} 15 Total: 30 ``` | Parámetro | Tipo | Descripción | | - | - | - | | `attribute` | Cadena | Atributo a sumar. | | `return_if_nothing` | Cadena | Valor a devolver si no hay nada en la variable a sumar. | ## symmetric\_difference Este filtro devuelve la diferencia simétrica de dos conjuntos o listas. La lista que el filtro devuelve contiene todos los elementos únicos que están en la primera lista pero no en la segunda, o están en la segunda lista pero no en la primera. ```text hubl.txt theme={null} {{ [1, 2, 3]|symmetric_difference([2, 3, 4, 5]) }} ``` ```text resultados renderizados.txt theme={null} [1, 4, 5] ``` | Parámetro | Tipo | Descripción | | - | - | - | | `list` | Matriz | La segunda lista con la que comparar para encontrar la diferencia simétrica con la lista original. | ## title Devuelve una versión del valor en formato de título (es decir, las palabras comenzarán con letras mayúsculas y el resto de los caracteres estarán en minúsculas). ```text hubl.txt theme={null} {% set my_title="my title should be title case" %} {{ my_title|title }} ``` ```text resultados renderizados.txt theme={null} My Title Should Be Title Case ``` ## tojson Escribe un objeto como una cadena JSON. ```text hubl.txt theme={null} {% for content in contents %} {{ content.blog_post_author|tojson }} {% endfor %} ``` ```json example.json theme={null} { "portalId": 1234567, "id": 12312253109, "created": 1566413741989, "updated": 1566414012799, "deletedAt": 0, "fullName": "Sample User", "email": "sampleUser@example.com", "userId": null, "username": null, "slug": "sample-user", "jsonBody": { "avatar": "https://app.hubspot.com/settings/avatar/109d6874a0cb066c1c7263ac5df6ce7a", "bio": "Sample Bio", "facebook": "", "linkedin": "", "twitter": "", "website": "https://www.hubspot.com" }, "bio": "Sample Bio", "facebook": "", "linkedin": "", "avatar": "https://app.hubspot.com/settings/avatar/109d6874a0cb066c1c7263ac5df6ce7a", "gravatarUrl": "https://app.hubspot.com/settings/avatar/108bb5ac667ded34796271437dfe8d58", "twitterUsername": "", "hasSocialProfiles": false, "website": "https://www.hubspot.com", "twitter": "", "displayName": "Sample User" } ``` ## trim Elimina los espacios en blanco iniciales y finales. HubSpot ya recorta los espacios en blanco del marcado, pero este filtro está documentado para que sea más completo. ```text hubl.txt theme={null} {{ " remove whitespace " }} {{ " remove whitespace "|trim }} ``` ```text resultados renderizados.txt theme={null} remove whitespace remove whitespace ``` ## truncate Corta el texto después de un determinado número de caracteres. El valor predeterminado es 255. Los caracteres HTML se incluyen en este conteo. > [!WARNING] > > **Nota:** ya que este filtro depende de los espacios entre palabras para acortar las cadenas, es posible que no funcione correctamente en idiomas que no los utilizan, como el japonés. ```text hubl.txt theme={null} {{ "I only want to show the first sentence. Not the second."|truncate(40) }} {{ "I only want to show the first sentence. Not the second."|truncate(35, true, "..........") }} ``` ```text resultados renderizados.txt theme={null} I only want to show the first sente.......... ``` | Parámetro | Tipo | Descripción | | - | - | - | | `number_of_characters` | Número | Número de caracteres permitidos antes de cortar el texto. Por opción predeterminada es 255. | | `breakword` | Booleano | Si es `true`, el filtro cortará el texto a lo largo. En el caso contrario, si es `false`, se descartará la última palabra. | | `end` | Cadena | Anula los caracteres finales '...' predeterminados después del corte. | ## truncatehtml Corta una cadena, respetando el marcado HTML (es decir, cerrará correctamente todas las etiquetas anidadas). Esto evitará que una etiqueta permanezca abierta después del corte. Los caracteres HTML no cuentan en el total de caracteres. > [!WARNING] > > **Nota:** ya que este filtro depende de los espacios entre palabras para acortar las cadenas, es posible que no funcione correctamente en idiomas que no los utilizan, como el japonés. ```html example.html theme={null} {% set html_text = "

I want to truncate this text without breaking my HTML

" %} {{ html_text|truncatehtml(28, "..." , false) }} ``` ```html example.html theme={null}

I want to truncate this..

``` | Parámetro | Tipo | Descripción | | - | - | - | | `number_of_characters` | Número | Número de caracteres permitidos antes de cortar el texto. Por opción predeterminada es 255. | | `end` | Cadena | Anula los caracteres finales '...' predeterminados después del corte. | | `breakword` | Booleano | Valor booleano. Si es `true`, el filtro cortará el texto a lo largo. Si es `false` (predeterminado), se descartará la última palabra. Si solo utilizas uno de los parámetros opcionales, utiliza argumentos de palabra clave, como`truncatehtml(70, breakwords = false)`. | ## unescape\_html Convierte texto con entidades codificadas en HTML a sus equivalentes en Unicode. ```text hubl.txt theme={null} {% set escape_string = "me & you" %} {{ escape_string|unescape_html }} ``` ```text resultados renderizados.txt theme={null} me & you ``` ## union Este filtro devuelve la unión de dos conjuntos o listas. La lista que el filtro devuelve contiene todos los elementos únicos que están en cualquiera de las dos listas. ```text hubl.txt theme={null} {{ [1, 2, 3]|union([2, 3, 4, 5]) }} ``` ```text resultados renderizados.txt theme={null} [1, 2, 3, 4, 5] ``` | Parámetro | Tipo | Descripción | | - | - | - | | `list` | Matriz | La segunda lista a unir con la lista original. | ## unique Este filtro extrae un conjunto único de una secuencia o dicc. de objetos. Al filtrar un dicc., como una lista de mensajes devueltos por una función, puedes especificar qué atributo se utiliza para desduplicar los elementos en el dicc. ```text hubl.txt theme={null} {% set my_sequence = ["one", "one", "two", "three" ] %} {{ my_sequence|unique }} ``` ```text resultados renderizados.txt theme={null} [one, two, three] ``` | Parámetro | Tipo | Descripción | | - | - | - | | `attr` | Cadena | Especifica el atributo que debe utilizarse al filtrar un valor de dicc. | ## unixtimestamp Este filtro convierte un objeto de fecha y hora en una marca de tiempo Unix. > [!WARNING] > > ### Nota: > > Este filtro debe usarse únicamente con variables que devuelvan una fecha. A partir del 30 de septiembre de 2024, este filtro ya no devolverá la fecha actual cuando se pase un valor nulo. Después de esa fecha, un valor nulo en el filtro devolverá el `September 30, 2024`. ```text hubl.txt theme={null} {{ local_dt }} {{ local_dt|unixtimestamp }} ``` ```text resultados renderizados.txt theme={null} 2017-01-30 17:11:44 1485814304000 ``` ## upper Convierte todas las letras de un valor a mayúsculas. ```text hubl.txt theme={null} {% set text="text to make uppercase" %} {{ text|upper }} ``` ```text resultados renderizados.txt theme={null} TEXT TO MAKE UPPERCASE ``` ## urlencode Escapa y codifica la URL de una cadena usando el formato UTF-8. Acepta tanto diccionarios como cadenas regulares, así como iterables por pares. ```text hubl.txt theme={null} {% set encode_value="Escape & URL encode this string" %} {{ encode_value|urlencode }} ``` ```text resultados renderizados.txt theme={null} Escape+%26+URL+encode+this+string ``` ## urldecode Decodifica las cadenas de URL codificadas de vuelta a la URL original. Acepta tanto diccionarios como cadenas regulares, así como iterables por pares. ```text hubl.txt theme={null} {% set decode_value="Escape+%26+URL+decode+this+string" %} {{ decode_value|urldecode }} ``` ```text resultados renderizados.txt theme={null} Escape & URL decode this string ``` ## urlize Convierte direcciones URL en texto sin formato a enlaces en los que se puede hacer clic. Si le pasas al filtro un número entero adicional, acortará las URL a ese número. El segundo parámetro es un booleano que dicta si el enlace es rel="no follow". El último parámetro permite especificar si el enlace se abrirá en una nueva pestaña. | Parámetro | Tipo | Descripción | | - | - | - | | `shorten_text` | Número | Número entero que acortará las URL al número deseado. | | `no_follow` | Booleano | Si se establece como `true`, el enlace incluirá `rel="no follow"`. | | `target="_blank"` | Cadena | Especifica si el enlace se abrirá en una pestaña nueva. | ```text hubl.txt theme={null} {{ "http://hubspot.com/"|urlize }} {{ "http://hubspot.com/"|urlize(10,true) }} {{ "http://hubspot.com/"|urlize("",true) }} {{ "http://hubspot.com/"|urlize("",false,target="_blank") }} ``` ```html example.html theme={null} http://hubspot.com/ http://... http://hubspot.com/ http://hubspot.com/ ``` ## wordcount Cuenta el número de palabras de una cadena. > [!WARNING] > > Si la cadena contiene HTML, utiliza el filtro `striptags` para obtener un recuento preciso. ```text hubl.txt theme={null} {% set count_words = "Count the number of words in this variable" %} {{ count_words|wordcount }} ``` ```text resultados renderizados.txt theme={null} 8 ``` ## wordwrap Hace que las palabras se cierren al llegar a un número determinado de caracteres. Esto funciona mejor en una etiqueta `
` porque HubSpot elimina los espacios en blanco de manera predeterminada.

```text hubl.txt theme={null}
{% set wrap_text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam efficitur, ipsum non sagittis euismod, ex risus rhoncus lectus, vel maximus leo enim sit amet dui. Ut laoreet ultricies quam at fermentum." %}
{{ wrap_text|wordwrap(10) }}
```

```text resultados renderizados.txt theme={null}
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam efficitur, ipsum
non sagittis euismod, ex risus rhoncus lectus, vel maximus leo enim sit amet
dui. Ut laoreet ultricies quam at fermentum.
```

| Parámetro | Descripción |
| - | - |
| `character_count` | Número de caracteres para cerar el contenido. |

## xmlattr

Crea una cadena de atributos HTML y XML, basada en los elementos de un dicc. Todos los valores que no sean nulos ni indefinidos se escapan automáticamente. Antepone un espacio al elemento si el filtro devuelve algún valor, a menos que el primer parámetro sea falso.

```html example.html theme={null}
{% set html_attributes = {"class": "bold", "id": "sidebar"} %}
``` ```html example.html theme={null} ``` | Parámetro | Tipo | Descripción | | - | - | - | | `autospace` | Booleano | Establécelo como `true` para añadir un espacio delante del elemento. | # Funciones de HubL Source: https://developers.hubspot.es/docs/cms/reference/hubl/functions Una lista de referencia de todas las funciones disponibles de HubL. Las funciones en HubL son similares a los filtros porque los dos aceptan parámetros y generan un valor. Sin embargo, no es necesario aplicar todas las funciones al valor inicial de una plantilla, ya que estas interactúan con otras áreas de tu entorno en HubSpot. Si mantienes un sitio web antiguo, también puedes consultar la [lista de funciones de HubL obsoletas](/docs/cms/versions-deprecations/deprecated/hubl/filters-functions). A continuación, encontrarás más información sobre cada función de HubL y su sintaxis. ## append Agrega un solo elemento al final de una lista. ```text hubl.txt theme={null} {% set numbers_under_5 = [1,2,3] %} {% do numbers_under_5.append(4) %} {{numbers_under_5}} ``` ```text resultados renderizados.txt theme={null} [1, 2, 3, 4] ``` | Parámetro | Tipo | Descripción | | - | - | - | | `item` | Cualquiera | Elemento que se agregará a la lista. | ## blog\_all\_posts\_url La función `blog_all_posts_url` da como resultado la URL completa de la página de índice de todas las publicaciones del blog especificado. El siguiente ejemplo muestra cómo se puede utilizar esta función como la etiqueta `href` de un ancla. ```html example.html theme={null} All Marketing blog posts ``` ```html example.html theme={null} All Marketing blog posts ``` | Parámetro | Tipo | Descripción | | - | - | - | | `selected_blog` | ID del blog o "default" | Especifica qué blog utilizar. El ID del blog se obtiene del [campo del blog en el módulo](/docs/cms/reference/fields/module-theme-fields#blog). | ## blog\_author\_url La función `blog_author_url` da como resultado la URL completa de la página del autor del blog especificado. El siguiente ejemplo muestra cómo se puede utilizar esta función como la etiqueta `href` de un ancla. Que se puede combinar con `blog_authors` como se muestra en los ejemplos de esa función. ```html example.html theme={null} Brian Halligan ``` ```html example.html theme={null} Brian Halligan ``` | Parámetro | Tipo | Descripción | | - | - | - | | `selected_blog` | ID del blog o el blog "default" | Especifica en qué blog existe la página del autor. Puedes especificar un blog por su ID o utilizar la variable `"default"` para seleccionar el blog predeterminado. El ID del blog está dado por el [campo de blog del módulo](/docs/cms/reference/fields/module-theme-fields#blog). | | `author_slug` | Cadena o variable de HubL | Especifica el autor al que se va a enlazar. Puedes utilizar la variable `content.blog_post_author.slug` o un nombre con guión en minúsculas, por ejemplo: `"jane-doe"`. | ## blog\_authors La función `blog_authors` da como resultado una secuencia de objetos con los datos del autor para el blog especificado, en orden ascendente según el slug. Esta secuencia se puede almacenar en una variable e iterarla a fin de crear filtros personalizados para las publicaciones del autor. Se puede obtener el número de artículos publicados de cada autor usando el parámetro `author.live_posts`. > [!WARNING] > > **Nota:** esta función tiene un límite de 250 autores. Esta función también tiene un límite de 10 llamadas por página. La primera línea del ejemplo siguiente demuestra cómo la función da como resultado una secuencia de objetos de autor. El resto del ejemplo muestra un caso en el que se guarda una secuencia en una variable y luego se itera con los objetos de autor, imprimiendo el conjunto de enlaces a las páginas de los autores. En el ejemplo se asume que el blog tiene 4 autores. ```html example.html theme={null} {{ blog_authors("default", 250) }} {% set my_authors = blog_authors("default", 250) %} ``` ```html example.html theme={null} [ Brian Halligan, Dharmesh Shah, Katie Burke, Kipp Bodnar] ``` | Parámetro | Tipo | Descripción | | - | - | - | | `selected_blog` | ID del blog o "default" | Especifica qué blog utilizar, ya sea un blog específico por su ID o el blog predeterminado con `"default"`. El ID del blog está dado por el [campo de blog del módulo](/docs/cms/reference/fields/module-theme-fields#blog). | | `limit` | Entero | Establece el límite del número de autores que se pueden obtener. | ## blog\_by\_id La función `blog_by_id` da como resultado un blog con su ID. El siguiente código de ejemplo muestra esta función en uso, que genera una lista de elementos con los hipervínculos. > [!WARNING] > > **Nota:** esta función tiene un límite de 10 llamadas por página. ```html example.html theme={null} {% set my_blog = blog_by_id(47104297) %} ``` ```html example.html theme={null} ``` | Parámetro | Tipo | Descripción | | - | - | - | | `selected_blog` | ID del blog o "default" | Especifica qué blog utilizar, ya sea un blog específico por su ID o el blog predeterminado con `"default"`. El ID del blog está dado por el [campo de blog del módulo](/docs/cms/reference/fields/module-theme-fields#blog). | ## blog\_page\_link La función `blog_page_link` genera la URL de una vista por páginas de la lista de blogs. La función toma un parámetro numérico, que permite generar enlaces para la página actual, la siguiente, la anterior o una página específica. Esta función se utiliza generalmente en el atributo `href` de las etiquetas de ancla de la paginación y debe ser utilizada en la plantilla del listado de blogs. Los siguientes ejemplos muestran esta función en uso como etiqueta `href` de un ancla. El primer ejemplo muestra la página actual. El segundo ejemplo toma el número 7 como el parámetro para especificar la séptima página. El tercer ejemplo utiliza la variable `next_page_num` para generar un enlace relativo al número de página actual (también puedes utilizar la variable `last_page_num` para la página anterior). El último ejemplo utiliza la variable `current_page_num` y un operador `+` para crear un enlace que esté 4 páginas más adelante de la página actual. ```html example.html theme={null} Current page Page 7 Next Page Plus 4 ``` ```html example.html theme={null} Page 1 Page 7 Next Page Plus 4 ``` | Parámetro | Tipo | Descripción | | - | - | - | | `page` | Número o variable de HubL | Número de página utilizado para generar la URL o la variable de HubL del número de página. | ## blog\_popular\_posts Esta función convierte un número determinado de publicaciones populares en una secuencia. Esta secuencia se puede guardar en una variable e iterarla mediante un bucle "for", creando un listado personalizado de las publicaciones más populares. Los resultados de esta función se almacenan en caché durante seis horas. Para obtener publicaciones de blog usando HubL de una manera que evite el almacenamiento en caché, podrías usar [blog\_recent\_tag\_posts](#blog-recent-tag-posts) en su lugar. En el siguiente código de ejemplo, la primera línea muestra cómo la función da como resultado una secuencia. La secuencia se guarda como una variable que luego se usa en un [bucle "for"](/docs/cms/reference/hubl/loops). [Toda variable de una publicación de blog](/docs/cms/reference/hubl/variables#blog-variables) debe usar el nombre de cada elemento del bucle en lugar de `content.`. En el ejemplo, se utiliza `pop_post.name`. Esta técnica se puede utilizar en plantillas de blog y páginas de sitio web. > [!WARNING] > > **Nota:** esta función tiene un límite de 200 publicaciones. Esta función también tiene un límite de 10 llamadas por página. ```html example.html theme={null} {% set pop_posts = blog_popular_posts("default", 5, ["marketing-tips", "sales-tips"], "popular_past_month", "AND") %} {% for pop_post in pop_posts %}
{{ pop_post.name }}
{% endfor %} ``` ```html example.html theme={null} [Popular post title 1, Popular post title 2, Popular post title 3, Popular post title 4, Popular post title 5]
Popular post title 1
Popular post title 2
Popular post title 3
Popular post title 4
Popular post title 5
``` | Parámetro | Tipo | Descripción | | - | - | - | | `selected_blog` | ID del blog o "default" | Especifica qué blog utilizar, ya sea un blog específico por su ID o el blog predeterminado con `"default"`. | | `limit` | Entero | Especifica el número de publicaciones que se agregarán a la secuencia, hasta un límite de 200. Si no se especifica, el valor predeterminado es 10. | | `tag_slug` | Matriz | Lista opcional de etiquetas para filtrar las publicaciones. | | `time_frame` | Cadena | Período de tiempo opcional de las analíticas para filtrar las publicaciones. Por opción predeterminada es `"popular_past_year"`. Debe ser una entre estas:
  • `"popular_all_time"`
  • `"popular_past_year"`
  • `"popular_past_six_months"`
  • `"popular_past_month"`
Este parámetro es obligatorio cuando se incluye el parámetro `logical_operator`. | | `logical_operator` | Cadena | Cuando `tag_slug` contiene varias etiquetas, utiliza este operador para filtrar los resultados con la lógica `AND` u `OR`. Por opción predeterminada, esta función utiliza la lógica `OR` para devolver publicaciones con cualquiera de las etiquetas especificadas. Al incluir este parámetro, `time_frame` es obligatorio. | ## blog\_post\_archive\_url La función `blog_post_archive_url` da como resultado una URL completa que enlaza a la página de índice de los archivos según los valores de fecha dados en el blog especificado. Esta función tiene dos parámetros obligatorios y dos opcionales. El primer parámetro es el ID de un blog o simplemente la palabra clave `"default"`. El segundo es el año de las publicaciones archivadas que deseas mostrar. Los parámetros opcionales incluyen el mes y el día de las publicaciones archivadas que deseas mostrar, respectivamente. El siguiente ejemplo muestra cómo se puede utilizar esta función como la etiqueta `href` de un ancla. ```html example.html theme={null} Posts from July 5th, 2017 ``` ```html example.html theme={null} Posts from July 5th, 2017 ``` | Parámetro | Tipo | Descripción | | - | - | - | | `selected_blog` | ID del blog o "default" | Especifica qué blog utilizar, ya sea un blog específico por su ID o el blog predeterminado con `"default"`. | | `year` | Entero | El año. | | `month` | Entero | El mes opcional. | | `day` | Entero | El día opcional. | ## blog\_recent\_author\_posts La función `blog_recent_author_posts` da como resultado una secuencia de objetos de publicaciones de blog del autor especificado, ordenados según el más reciente. Esta secuencia de publicaciones se pueden almacenar en una variable e iterar con un bucle "for", creando un listado de publicaciones personalizado de un autor en particular. La función toma tres parámetros. El primer parámetro especifica de qué blog se recogen las publicaciones de un autor. El valor debe ser el parámetro `"default"` o el ID de un blog en particular (disponible en la URL del panel de blogs). El segundo parámetro especifica el autor a utilizar. Este parámetro puede utilizar **`content.blog_post_author.slug`** para usar el autor de la publicación actual o aceptar un nombre con guion en minúsculas como `"brian-halligan"`. El tercer parámetro especifica cuántos posts se obtendrán. La primera línea del ejemplo de abajo demuestra cómo la función devuelve una secuencia con las publicaciones de un autor. En este ejemplo, en lugar de especificar el nombre de un autor, se utiliza el autor actual de la publicación. La secuencia se guarda en una variable y se repite en bucle. [Toda variable de una publicación de blog](/docs/cms/reference/hubl/variables#blog-variables) debe usar el nombre de cada elemento del bucle en lugar de `content.`. En el ejemplo, se utiliza `author_post.name`. Esta técnica se puede utilizar en las plantillas de blogs y páginas. > [!WARNING] > > **Nota:** Esta función tiene un límite de 200 publicaciones y 10 llamadas por página. ```html example.html theme={null} {{ blog_recent_author_posts("default", content.blog_post_author.slug, 5 ) }} {% set author_posts = blog_recent_author_posts("default", content.blog_post_author.slug, 5) %} {% for author_post in author_posts %}
{{ author_post.name }}
{% endfor %} ``` ```html example.html theme={null} [Post by author title 1, Post by author title 2, Post by author title 3, Post by author title 4, Post by author title 5]
Post by author title 1
Post by author title 2
Post by author title 3
Post by author title 4
Post by author title 5
``` | Parámetro | Tipo | Descripción | | - | - | - | | `selected_blog` | ID del blog o blog "default" | Especifica qué blog utilizar. El ID del blog está dado por el [campo de blog del módulo](/docs/cms/reference/fields/module-theme-fields#blog). | | `author_slug` | Cadena | Especifica el autor que se usará en el filtro. | | `limit` | Entero | Especifica el número de publicaciones que se agregarán a la secuencia, hasta un límite de 200. | ## blog\_recent\_posts La función `blog_recent_posts` da como resultado una secuencia de objetos de publicaciones para el blog especificado, ordenados según el más reciente. Esta secuencia de publicaciones se puede guardar en una variable e iterar mediante un bucle "for", creando un listado personalizado de publicaciones de tus publicaciones más populares. La función toma dos parámetros. El primer parámetro especifica de qué blog se recogen los posts populares. El valor debe ser el parámetro `"default"` o el ID de un blog en particular (disponible en la URL del panel de blogs). El segundo parámetro especifica cuántos posts se obtendrán. La primera línea del ejemplo de abajo demuestra cómo la función devuelve una secuencia. La secuencia se guarda en una variable y se repite en bucle. [Toda variable de una publicación de blog](/docs/cms/reference/hubl/variables#blog-variables) debe usar el nombre de cada elemento del bucle en lugar de `content.`. En el ejemplo, se utiliza `rec_post.name`. Esta técnica se puede utilizar no sólo en las plantillas de los blogs, sino también en otras páginas. > [!WARNING] > > **Nota:** Esta función tiene un límite de 200 publicaciones y 10 llamadas por página. ```html example.html theme={null} {{ blog_recent_posts("default", 5) }} {% set rec_posts = blog_recent_posts("default", 5) %} {% for rec_post in rec_posts %}
{{ rec_post.name }}
{% endfor %} ``` ```html example.html theme={null} [Recent post title 1, Recent post title 2, Recent post title 3, Recent post title 4, Recent post title 5]
Recent post title 1
Recent post title 2
Recent post title 3
Recent post title 4
Recent post title 5
``` | Parámetro | Tipo | Descripción | | - | - | - | | `selected_blog` | ID del blog o "default" | Especifica qué blog utilizar, ya sea un blog específico por su ID o el blog predeterminado con `"default"`. El ID del blog está dado por el [campo de blog del módulo](/docs/cms/reference/fields/module-theme-fields#blog). | | `limit` | Entero | Especifica el número de publicaciones que se agregarán a la secuencia, máximo 200. | ## blog\_recent\_tag\_posts La función `blog_recent_tag_posts` da como resultado una secuencia de objetos de publicaciones de blog correspondiente a una o varias etiquetas especificadas, ordenadas según la más reciente. Esta secuencia de publicaciones se puede guardar en una variable e iterar con un bucle "for", creando un listado de publicaciones personalizado según una o varias etiquetas en particular. En el código de ejemplo a continuación: * La primera línea muestra cómo la función devuelve una secuencia de publicaciones por etiqueta. * La segunda línea muestra cómo guardar la función en una variable de secuencia. El resto del código utiliza un bucle "for" para repetir el ciclo de los valores de la variable. [Toda variable de una publicación de blog](/docs/cms/reference/hubl/variables#blog-variables) debe usar el nombre de cada elemento del bucle en lugar de `content.`. En el ejemplo, se utiliza `tag_post.name`. Puedes usar esta técnica tanto en páginas de blog como en páginas de sitio web. Encuentra más información sobre cómo [crear una lista de publicaciones de blog relacionadas](/docs/cms/reference/hubl/tags/related-blog-posts). > [!WARNING] > > **Nota:** Esta función tiene un límite de 100 publicaciones y 10 llamadas por página. ```html example.html theme={null} {{ blog_recent_tag_posts("default", "marketing-tips", 5) }} {% set tag_posts = blog_recent_tag_posts("default", ["marketing", "fun", "inbound"], 3, "AND") %} {% for tag_post in tag_posts %}
{{ tag_post.name }}
{% endfor %} ``` ```html example.html theme={null} [Post about Marketing 1, Post about Marketing 2, Post about Marketing 3, Post about Marketing 4, Post about Marketing 5]
Post about Marketing
Post about Fun
Post about Inbound
``` | Parámetro | Tipo | Descripción | | - | - | - | | `selected_blog` | ID del blog o "default" | Especifica qué blog utilizar, ya sea un blog específico por su ID o el blog predeterminado con `"default"`. El ID del blog está dado por el [campo de blog del módulo](/docs/cms/reference/fields/module-theme-fields#blog). | | `tag_slug` | Cadena | Especifica la etiqueta que se utilizará en el filtro. Puedes incluir hasta 10 etiquetas, separadas por comas. Las etiquetas con varias palabras deben estar en minúsculas con los espacios reemplazados por guiones. | | `limit` | Entero | Especifica el número de publicaciones que se agregarán a la secuencia. Este parámetro es obligatorio cuando se incluye el parámetro `logical_operator`. | | `logical_operator` | Cadena | Cuando `tag_slug` contiene varias etiquetas, utiliza este operador para filtrar los resultados con la lógica `AND` u `OR`. Por opción predeterminada, esta función utiliza la lógica `OR` para devolver publicaciones con cualquiera de las etiquetas especificadas. Al incluir este parámetro, `limit` es obligatorio. | ## blog\_tag\_url La función `blog_tag_url` da como resultado una URL completa enlazada a la página de índice del blog cuya etiqueta se ha especificado. Esta función acepta dos parámetros. El primer parámetro especifica en qué blog se encuentra la página de índice de la etiqueta. El segundo parámetro especifica la etiqueta que se debe enlazar. Este parámetro puede utilizar **`topic.slug`** para una etiqueta específica de `content.topic_list` o acepta un nombre con guion en minúsculas como `"marketing-tips"`. El siguiente ejemplo muestra cómo se puede utilizar esta función como etiqueta href de un ancla. ```html example.html theme={null} Inbound Marketing ``` ```html example.html theme={null} Inbound Marketing ``` | Parámetro | Tipo | Descripción | | - | - | - | | `selected_blog` | ID del blog o "default" | Especifica qué blog utilizar, ya sea un blog específico por su ID o el blog predeterminado con `"default"`. | | `tag_slug` | Cadena | Especifica la etiqueta a la que se va a enlazar. | ## blog\_tags La función `blog_tags` da como resultado una secuencia de las 250 etiquetas con la mayor cantidad de artículos en el blog (en función del número de publicaciones asociadas) para el blog especificado, ordenadas según el número de publicaciones. Esta secuencia se puede almacenar en una variable e iterar para crear filtros personalizados para las etiquetas de las publicaciones. Se puede ver el número de publicaciones de cada etiqueta con `tag.live_posts`. Esta función acepta dos parámetros. El primer parámetro especifica de qué blog se van a obtener las etiquetas. El segundo parámetro establece un límite en el número de etiquetas obtenidas. La primera línea del ejemplo de abajo muestra cómo la función devuelve una secuencia de objetos de etiqueta. El resto del ejemplo muestra un caso en el que se guarda una secuencia en una variable y luego se itera en todos los objetos de etiqueta, imprimiendo un conjunto de enlaces a etiquetas. En el ejemplo se asume que el blog tiene 4 etiquetas. > [!WARNING] > > **Nota:** Esta función tiene un límite de 250 etiquetas. ```html example.html theme={null} {{ blog_tags("default", 250) }} {% set my_tags = blog_tags("default", 250) %}
    {% for item in my_tags %}
  • {{ item }}
  • {% endfor %}
``` ```html example.html theme={null} [ Blogging, Inbound Marketing, SEO, Social Media] ``` | Parámetro | Tipo | Descripción | | - | - | - | | `selected_blog` | ID del blog o blog "default" | Especifica qué blog utilizar. El ID del blog está dado por el [campo de blog del módulo](/docs/cms/reference/fields/module-theme-fields#blog). | | `limit` | Entero | La cantidad máxima de etiquetas que saldrán en los resultados. | ## blog\_total\_post\_count Esta función da como resultado el número total de artículos publicados en el blog especificado. Si no se especifica ningún parámetro, contará las publicaciones del blog especificado por defecto. Como alternativa, puedes especificar el parámetro `"default"` o el ID de un blog diferente para hacer el conteo. El ID del blog está disponible en la URL del panel de control para cada blog. > [!WARNING] > > **Nota:** esta función tiene un límite de 10 llamadas por página. ```text hubl.txt theme={null} {{ blog_total_post_count }} {{ blog_total_post_count(359485112) }} ``` ```text resultados renderizados.txt theme={null} 16 54 ``` | Parámetro | Tipo | Descripción | | - | - | - | | `selected_blog` | ID del blog o "default" | Especifica en qué blog hacer el conteo. El ID del blog está dado por el [campo de blog del módulo](/docs/cms/reference/fields/module-theme-fields#blog). | ## clear Elimina todos los elementos de una lista. A diferencia de `pop()`, no entrega ningún resultado. ```text hubl.txt theme={null} {% set words = ["phone","home"] %} {% do words.clear() %} {{words}} ``` ```text resultados renderizados.txt theme={null} [] ``` ## color\_contrast Esta función valida el contraste de color con base en [los estándares de las Web Content Accessibility Guidelines (WCAG)](https://www.w3.org/WAI/WCAG21/Understanding/contrast-minimum). Tendrás que incluir dos colores como argumentos, y puedes incluir un argumento opcional para especificar la calificación (`AA` o `AAA`). El resultado serán los parámetros `true` o `false` en función de si los colores cumplen o superan los estándares. ```text hubl.txt theme={null} {{color_contrast('#FFFFFF','#273749')}} {{color_contrast('rgb(255, 255, 255)','rgb(229, 237, 245)','AAA')}}

Hey there

``` ```text resultados renderizados.txt theme={null} true false Hey there ``` | Parámetro | Tipo | Descripción | | - | - | - | | `color_1` | Color | El primer color que se va a comparar. Acepta:
  • Códigos hexadecimales de 6 dígitos (`#FFFFFF`)
  • Códigos hexadecimales de 3 dígitos (`#F0A`)
  • Códigos de color RGB (`rgb(12,31,1)`)
También puede usar una variable que almacene un código de color hexadecimal o RGB, por ejemplo, `theme.primary_color.color` | | `color_2` | Color | El segundo color que se va a comparar con el primero. | | `rating` | Cadena | El estándar de las WCAG que se utilizará para la calificación. Puede ser `AA` (predeterminado) o `AAA`. | ## color\_variant Esta función aclara u oscurece un valor hexadecimal o una variable de color en un grado específico. El primer parámetro es el color hexadecimal (por ejemplo ("#FFDDFF") o una variable que almacene un valor hexadecimal. El segundo parámetro es el grado en el que se debe ajustar, de 0 a 255. Esta función se puede utilizar en archivos CSS para crear variaciones de color. Otro buen ejemplo es utilizarla con un parámetro de color de un módulo de color, para permitir a los usuarios especificar un color primario que genere automáticamente variaciones de color. En el ejemplo de abajo, el color hexadecimal #3A539B se almacena en una variable llamada `base_color`. El color se modifica en -80 dando como resultado un azul más oscuro (#00034B). ```text hubl.txt theme={null} {% set base_color ="#3A539B" %} {{ color_variant(base_color, -80) }} ``` ```text resultados renderizados.txt theme={null} #00034b ``` | Parámetro | Tipo | Descripción | | - | - | - | | `base_color` | Cadena de color hexadecimal | El color inicial que se modificará. Por ejemplo, `#F7F7F7`. | | `brightness_offset` | Entero | Un número positivo o negativo que se utiliza para aclarar u oscurecer el color de base. | ## content\_by\_id La función **`content_by_id`** da como resultado una landing page, una página de sitio web o una publicación de blog según el ID. El único parámetro aceptado por esta función es un ID de contenido numérico. El siguiente código de ejemplo muestra esta función en uso, que genera una lista de elementos con los hipervínculos. > [!WARNING] > > **Nota:** esta función tiene un límite de 10 llamadas por página. ```html example.html theme={null} {% set my_content = content_by_id(4715624297) %} ``` ```html example.html theme={null} ``` | Parámetro | Tipo | Descripción | | - | - | - | | `id` | ID | El ID del contenido que se buscará. | ## content\_by\_ids Dada una lista de varios ID de contenido, da como resultado un dict (diccionario) de páginas de destino, páginas de sitio web o publicaciones de blog que coinciden con esos ID. Esta función toma un parámetro, una lista de ID de páginas o publicaciones de blog para buscar, colocadas en orden. Se pueden pasar hasta 100 objetos de contenido. El siguiente código de ejemplo muestra esta función en uso para generar una lista de elementos con sus hipervínculos. > [!WARNING] > > **Nota:** esta función tiene un límite de 10 llamadas por página. ```html example.html theme={null} {% set contents = content_by_ids([4715624297, 4712623297, 5215624284]) %} ``` ```html example.html theme={null} ``` | Parámetro | Tipo | Descripción | | - | - | - | | `ids` | Lista | Una lista de ID de páginas o publicaciones de blog para buscar. Se pueden pasar hasta 100 objetos de contenido. | ## copy Da como resultado una copia superficial de la lista. Equivalente a `a[:]`. Una *copia superficial* construye un nuevo objeto compuesto y luego (en la medida de lo posible) inserta en él *referencias* a los objetos que se encuentran en el original. ```text hubl.txt theme={null} {% set a = ["ham"] %} {% set b = a.copy() %} a: {{a}} b: {{b}} After Append {% do a.append("swiss") %} a: {{a}} b: {{b}} ``` ```text resultados renderizados.txt theme={null} a: [ham] b: [ham] After Append a: [ham, swiss] b: [ham] ``` ## count Da como resultado el número de veces que una variable existe en una lista. ```html example.html theme={null} {% set attendees = ["Jack","Jon","Jerry","Jessica"] %} {% set jon_count = attendees.count("Jon") %} There are {{jon_count}} Jon's in the list.

After append:

{% do attendees.append("Jon") %} {% set jon_count_after_append = attendees.count("Jon") %} There are now {{jon_count_after_append}} Jon's in the list. ``` ```html example.html theme={null} There are 1 Jon's in the list.

After append:

There are now 2 Jon's in the list. ``` ## crm\_associations Obtiene una lista de registros del CRM asociados a otro registro mediante su ID de registro, la categoría de asociación y el ID que define la asociación. Esta función devuelve un objeto con los siguientes atributos: `has_more`, `total`, `offset` y `results`. * `has_more` indica que hay más resultados disponibles además de este bloque (total > offset). * `total` es el número total de resultados disponibles. * `offset` es el desplazamiento que se utilizará para el siguiente bloque de resultados. * *`results`* devuelve una lista de los objetos asociados especificados que coinciden con los parámetros de la función. > [!WARNING] > > **Nota:** Por razones de seguridad, de los [tipos de objetos estándar de HubSpot](https://knowledge.hubspot.com/es/get-started/manage-your-crm-database#standard-objects) solo los objetos `producto` y `evento de marketing` se pueden obtener desde una página de acceso público. Cualquier otro tipo de objeto estándar debe alojarse en una página que esté [protegida por contraseña](https://knowledge.hubspot.com/es/website-pages/password-protect-a-page) o que requiera un [inicio de sesión por membresía en el CMS](https://knowledge.hubspot.com/es/website-pages/require-member-registration-to-access-private-content). Los objetos personalizados no tienen esta misma restricción. ```text hubl.txt theme={null} {% set associated_contacts = crm_associations(847943847, "HUBSPOT_DEFINED", 2, "limit=3&years_at_company__gt=2&orderBy=email", "firstname,email", false) %} {{ associated_contacts }} ``` ```text resultados renderizados.txt theme={null} {has_more=true, offset=3, total=203, results=[{firstname=Aimee, id=905, email=abanks@company.com}, {firstname=Amy, id=1056, email=abroma@company.com}, {firstname=Abigael, id=957, email=adonahu@company.com}]} ``` > [!WARNING] > > **Nota:** Esta función se puede llamar un máximo de 10 veces por página. Cada llamada de la función `crm_associations` puede dar como resultado como máximo 100 objetos. El límite por opción predeterminada es de 10 objetos. | Parámetro | Tipo | Descripción | | - | - | - | | `id` | ID | ID del registro a partir del que se deben buscar asociaciones. | | `association category` | Cadena | La categoría de la definición de la asociación. Los valores posibles son `HUBSPOT_DEFINED`, `USER_DEFINED` y `INTEGRATOR_DEFINED`. Este parámetro puede omitirse en el caso de los tipos de asociación integrados definidos por HubSpot. | | `association type id` | Entero | El ID de la definición de la asociación que se va a utilizar. Para saber los objetos estándar de HubSpot compatibles, consulta [ID del tipo de asociación que vas a usar](https://developers.hubspot.es/docs/guides/api/crm/associations). De otro modo, el ID de la asociación se puede encontrar en la [API del esquema de objetos del CRM](/docs/cms/start-building/features/data-driven-content/crm-objects#getting-a-custom-object-type-s-details). | | `query` | Cadena | El `id` del registro, o una cadena de consulta, delimitada por `&`. Todas las expresiones se suman con AND. Los operadores admitidos son:
  • `eq` (predeterminado)
  • `neq`
  • `lt`
  • `lte`
  • `gt`
  • `gte`
  • `is_null`
  • `not_null`
  • `in`
  • `nin`
  • `contains` (aplicable para propiedades con varios valores o propiedades de cadena, por ejemplo, *"firstname\_\_contains=Tim"*).
Las consultas pueden incluir los siguientes parámetros:
  • `limit`: el número máximo de resultados obtenidos en la respuesta, por ejemplo, `limit=50`.
  • `offset`: para distribuir los resultados en páginas si el número de resultados devueltos es superior al parámetro límite, por ejemplo, `offset=51`.
  • `orderBy`: ordena los resultados por una propiedad específica, por ejemplo, `orderBy=email`.
| | `properties` | Cadena | Opcional. Una lista separada con comas de las propiedades que saldrán en los resultados. Por defecto, el resultado es un pequeño conjunto de propiedades comunes. Siempre se devuelve la propiedad ID. Se puede encontrar una lista completa de propiedades utilizando los endpoints para [obtener todas las propiedades de los contactos](https://developers.hubspot.es/docs/api-reference/legacy/crm-properties-v1-contacts/get-properties-v1-contacts-properties#get-all-contact-properties) y [obtener todas las propiedades de las empresas](https://developers.hubspot.es/docs/api-reference/legacy/crm-properties-v1-companies/get-properties-v1-companies-properties#get-all-company-properties). | | `formatting` | Booleano | Opcional. Da formato a los valores, como las fechas y la divisa, de acuerdo con la configuración del portal. Omite o pasa el parámetro `false` con las cadenas sin procesar. | ## crm\_object Obtiene un único registro del CRM por consulta o por ID. Los registros aparecerán en un dicc. de propiedades y valores. Esta función también se puede [utilizar con objetos personalizados y de integraciones](/docs/cms/start-building/features/data-driven-content/crm-objects). > [!WARNING] > > **Nota:** Por razones de seguridad, de los [tipos de objetos estándar de HubSpot](https://knowledge.hubspot.com/es/get-started/manage-your-crm-database#standard-objects) solo los objetos `producto` y `evento de marketing` se pueden obtener desde una página de acceso público. Cualquier otro tipo de objeto estándar debe alojarse en una página que esté [protegida por contraseña](https://knowledge.hubspot.com/es/website-pages/password-protect-a-page) o que requiera un [inicio de sesión por membresía en el CMS](https://knowledge.hubspot.com/es/website-pages/require-member-registration-to-access-private-content). Los objetos personalizados no tienen esta misma restricción. > [!TIP] > > ¿Cuál es la diferencia entre los parámetros `in` y `contains`? > > `in` entrega resultados si el valor de la propiedad coincide con alguno de los valores dados. Por otro lado, `contains` entrega resultados si los valores de las propiedades en una selección múltiple tienen todos los valores especificados. ```text hubl.txt theme={null} {% set contact = crm_object("contact", "email=contact@company.com", "firstname,lastname", false) %} {% set contact = crm_object("contact", 123) %} {{ contact.firstname }} {{ contact.lastname }} ``` ```text resultados renderizados.txt theme={null} Brian Halligan ``` > [!WARNING] > > **Nota:** Esta función solo se puede llamar un máximo de 10 veces en una misma página. | Parámetro | Tipo | Descripción | | - | - | - | | `object_type` | Cadena | El nombre del tipo de objeto. Los nombres de los tipos de objetos distinguen entre mayúsculas y minúsculas. Encuentra más información sobre los [tipos de objetos admitidos](/docs/cms/start-building/features/data-driven-content/crm-objects#supported-crm-object-types). Para encontrar los nombres de los tipos de objetos específicos de la cuenta y de integraciones disponibles en tu cuenta, utiliza la [API del esquema de objetos del CRM](/docs/cms/start-building/features/data-driven-content/crm-objects#getting-a-custom-object-type-s-details) para obtener las definiciones de los tipos y encontrar el nombre de la propiedad. Contiene el nombre del tipo de objeto interno que se debe usar para la función. En el caso de los tipos de objeto de integraciones y específicos de la cuenta con el mismo nombre que los objetos de la aplicación debes usar el [nombre completamente calificado](/docs/cms/start-building/features/data-driven-content/crm-objects#getting-a-custom-object-type-s-details) (FQN, por sus siglas en inglés) de los objetos. | | `query` | Cadena | Opcional. El `id` del registro, o una cadena de consulta, delimitada con`&`. Todas las expresiones se suman con AND. Los operadores admitidos son:
  • `eq` (predeterminado)
  • `neq`
  • `lt`
  • `lte`
  • `gt`
  • `gte`
  • `is_null`
  • `not_null`
  • `in`
  • `nin`
  • `contains` (aplicable para propiedades con varios valores o propiedades de cadena, por ejemplo, *"firstname\_\_contains=Tim"*).
Las consultas pueden incluir los siguientes parámetros:
  • `limit`: el número máximo de resultados obtenidos en la respuesta. por ejemplo, `limit=50`.
  • `offset`: para distribuir los resultados en páginas si el número de resultados devueltos es superior al parámetro límite, por ejemplo, `offset=51`.
  • `orderBy`: ordena los resultados por una propiedad específica, por ejemplo, `orderBy=email`.
| | `properties` | Cadena | Opcional. Una lista separada con comas de las propiedades que saldrán en los resultados. Por defecto, el resultado es un pequeño conjunto de propiedades comunes. Siempre se devuelve la propiedad ID. Se puede encontrar una lista completa de propiedades utilizando los endpoints para [obtener todas las propiedades de los contactos](https://developers.hubspot.es/docs/api-reference/legacy/crm-properties-v1-contacts/get-properties-v1-contacts-properties#get-all-contact-properties) y [obtener todas las propiedades de las empresas](https://developers.hubspot.es/docs/api-reference/legacy/crm-properties-v1-companies/get-properties-v1-companies-properties#get-all-company-properties). | | `formatting` | Booleano | Opcional. Da formato a los valores, como las fechas y la divisa, de acuerdo con la configuración del portal. Pasa el parámetro `false` con las cadenas sin procesar. | > [!WARNING] > > **Nota:** Cuando creas una consulta, los valores `range`, `distinct` `ndistinct` y `startswith` son palabras clave reservadas. Para consultar una propiedad que usa uno de esos nombres, deberás usar el siguiente formato: `range__eq=` (en lugar de `range=`). ## crm\_objects Obtiene una lista de registros para un tipo de objeto específico del CRM de HubSpot. Esta función devuelve un objeto con los siguientes atributos: `has_more`, `total`, `offset` y `results`. * `has_more` indica que hay más resultados disponibles además de este bloque (total > offset). * `total` es el número total de resultados disponibles. * `offset` es el desplazamiento que se utilizará para el siguiente bloque de resultados. * `results` devuelve una lista de los objetos especificados que coinciden con los parámetros de la función. Los resultados se pueden ordenar utilizando al menos un parámetro de orden en la consulta. Por ejemplo, `crm_objects("contact", "firstname=Bob&order=lastname&order=createdate")` ordenará los contactos con el nombre `"Bob"` según el apellido y luego según el parámetro `createdate`. Para invertir el orden, agrega el signo `-` al nombre de la propiedad así: `order=-createdate`. La función de objetos del CRM también puede utilizarse con [objetos personalizados y de integraciones](/docs/cms/start-building/features/data-driven-content/crm-objects). > [!WARNING] > > **Nota:** Por razones de seguridad, de los [tipos de objetos estándar de HubSpot](https://knowledge.hubspot.com/es/get-started/manage-your-crm-database#standard-objects) solo los objetos `producto` y `evento de marketing` se pueden obtener desde una página de acceso público. Cualquier otro tipo de objeto estándar debe alojarse en una página que esté [protegida por contraseña](https://knowledge.hubspot.com/es/website-pages/password-protect-a-page) o que requiera un [inicio de sesión por membresía en el CMS](https://knowledge.hubspot.com/es/website-pages/require-member-registration-to-access-private-content). Los objetos personalizados no tienen esta misma restricción. ```text hubl.txt theme={null} {% set objects = crm_objects("contact", "firstname__not_null=&limit=3", "firstname,lastname") %} {{ objects }} ``` ```text resultados renderizados.txt theme={null} {has_more=true, offset=3, total=331, results=[{firstname=Brian, id=44151, lastname=Halligan}, {firstname=Dharmesh, id=44051, lastname=Shah}, {firstname=George, id=88551, lastname=Washington}]} ``` > [!WARNING] > > **Nota:** Esta función se puede llamar un máximo de 10 veces por página. Cada llamada de la función `crm_objects` puede dar como resultado como máximo 100 objetos. El límite por opción predeterminada es de 10 objetos. | Parámetro | Tipo | Descripción | | - | - | - | | `object_type` | Cadena | El tipo de objeto por su nombre. Los nombres de los tipos de objetos distinguen entre mayúsculas y minúsculas. Se aceptan el singular y el plural en el caso de los tipos de objetos estándar (por ejemplo, `contacto`, `contactos`). Encuentra más información sobre los [tipos de objetos admitidos](/docs/cms/start-building/features/data-driven-content/crm-objects#supported-crm-object-types). Para encontrar los nombres de los tipos de objetos específicos de la cuenta y de integraciones disponibles en tu cuenta, utiliza la [API del esquema de objetos del CRM](/docs/cms/start-building/features/data-driven-content/crm-objects#getting-a-custom-object-type-s-details) para obtener las definiciones de los tipos y las propiedades del nombre. En el caso de los tipos de objetos específicos de integraciones y de la cuenta con el mismo nombre que los objetos propios de la aplicación, utiliza el [nombre completo cualificado](/docs/cms/start-building/features/data-driven-content/crm-objects#getting-a-custom-object-type-s-details) (FQN, por sus siglas en inglés) de los objetos. | | `query` | Cadena | Opcional. El ID del registro o una cadena de consulta, delimitada con `&`. Todas las expresiones se suman con AND. Los operadores admitidos son:
  • `eq` (predeterminado)
  • `neq`
  • `lt`
  • `lte`
  • `gt`
  • `gte`
  • `is_null`
  • `not_null`
  • `in`
  • `nin`
  • `contains` (aplicable para propiedades con varios valores o propiedades de cadena, por ejemplo, *"firstname\_\_contains=Tim"*).
Ejemplo:`"email=contact@company.com"` | | `properties` | Cadena | Opcional. Una lista separada con comas de las propiedades que saldrán en los resultados. Por defecto, el resultado es un pequeño conjunto de propiedades comunes. Siempre se devuelve el ID de la propiedad. Puedes encontrar una lista completa de las propiedades utilizando los endpoints para [obtener todas las propiedades de los contactos](https://developers.hubspot.es/docs/api-reference/legacy/crm-properties-v1-contacts/get-properties-v1-contacts-properties#get-all-contact-properties) y [obtener todas las propiedades de las empresas](https://developers.hubspot.es/docs/api-reference/legacy/crm-properties-v1-companies/get-properties-v1-companies-properties#get-all-company-properties). El ID del registro siempre se incluye en las propiedades del objeto que salen en los resultados, incluso cuando no se agrega explícitamente en la lista de propiedades. | | `formatting` | Booleano | Opcional. Da formato a los valores, como las fechas y la divisa, de acuerdo con la configuración del portal. Pasa el parámetro `false` con las cadenas sin procesar. | > [!WARNING] > > **Nota:** Cuando creas una consulta, los valores `range`, `distinct` `ndistinct` y `startswith` son palabras clave reservadas. Para consultar una propiedad que usa uno de esos nombres, deberás usar el siguiente formato: `range__eq=` (en lugar de `range=`). ## crm\_property\_definition Permite obtener la definición de la propiedad para un tipo de objeto y un nombre de propiedad dados. Los tipos de objetos admitidos son los objetos estándar de HubSpot (por ejemplo, los contactos), los objetos específicos del portal y los objetos de integraciones. **HubL** ```hubl theme={null} {{ crm_property_definition("house_listing", "agent_name") }} ``` | Parámetro | Tipo | Descripción | | - | - | - | | `object_type` | Cadena | El nombre del tipo de objeto. Los nombres de los tipos de objetos distinguen entre mayúsculas y minúsculas. Encuentra más información sobre los [tipos de objetos admitidos](/docs/cms/start-building/features/data-driven-content/crm-objects#supported-crm-object-types). Para encontrar los nombres de los tipos de objetos específicos de la cuenta y de integraciones disponibles en tu cuenta, utiliza la [API del esquema de objetos del CRM](/docs/cms/start-building/features/data-driven-content/crm-objects#getting-a-custom-object-type-s-details) para obtener las definiciones de los tipos y encontrar el nombre de la propiedad. Contiene el nombre del tipo de objeto interno que se debe usar para functionFor. En el caso de los tipos de objeto de integraciones y específicos de la cuenta con el mismo nombre que los objetos de la aplicación debes usar el [nombre completamente calificado](/docs/cms/start-building/features/data-driven-content/crm-objects#getting-a-custom-object-type-s-details) (FQN, por sus siglas en inglés) de los objetos. | | `property_name` | Cadena | El nombre de la propiedad que sirve para obtener la definición y que no distingue entre mayúsculas y minúsculas. | ## crm\_property\_definitions Permite obtener las definiciones de las propiedades para un tipo de objeto y un conjunto de nombres de propiedades dados. Los tipos de objetos admitidos son los objetos estándar de HubSpot (por ejemplo, los contactos), los objetos específicos del portal y los objetos de integraciones. **HubL** ```hubl theme={null} {{ crm_property_definitions("house_listing", "agent_name,address") }} ``` | Parámetro | Tipo | Descripción | | - | - | - | | `object_type` | Cadena | El nombre del tipo de objeto. Los nombres de los tipos de objetos distinguen entre mayúsculas y minúsculas. Encuentra más información sobre los [tipos de objetos admitidos](/docs/cms/start-building/features/data-driven-content/crm-objects#supported-crm-object-types). Para encontrar los nombres de los tipos de objetos específicos de la cuenta y de integraciones disponibles en tu cuenta, utiliza la [API del esquema de objetos del CRM](/docs/cms/start-building/features/data-driven-content/crm-objects#getting-a-custom-object-type-s-details) para obtener las definiciones de los tipos y encontrar el nombre de la propiedad. Contiene el nombre del tipo de objeto interno que se debe usar para functionFor. En el caso de los tipos de objeto de integraciones y específicos de la cuenta con el mismo nombre que los objetos de la aplicación debes usar el [nombre completamente calificado](/docs/cms/start-building/features/data-driven-content/crm-objects#getting-a-custom-object-type-s-details) (FQN, por sus siglas en inglés) de los objetos. | | `property_name` | Cadena | Opcional. Los nombres de las propiedades que sirven para obtener la definición, separados por comas, sin distinción entre mayúsculas y minúsculas. Si está vacío, se extraerán las definiciones de todas las propiedades. | ## cta Debido a que los módulos de CTA tienen muchos parámetros con variaciones en el código de programación, puedes utilizar la función CTA para generar fácilmente una CTA particular en una plantilla, página o correo electrónico. Esta es la función que utiliza el editor de texto enriquecido cuando se agrega una CTA mediante el editor. > [!WARNING] > > **Nota:** Esta función tiene un límite de 10 llamadas por página. ```text hubl.txt theme={null} {{ cta("ccd39b7c-ae18-4c4e-98ee-547069bfbc5b") }} {{ cta("ccd39b7c-ae18-4c4e-98ee-547069bfbc5b", "justifycenter") }} ``` ```html example.html theme={null} Start a HubSpot trial Start a HubSpot trial ``` | Parámetro | Tipo | Descripción | | - | - | - | | `guid` | Cadena | El ID de la CTA que se renderiza. Se puede encontrar en la URL de la pantalla de datos de la CTA. | | `align_opt` | Enumeración | Ajusta la alineación de la CTA. Los valores incluyen: `justifyleft`, `justifycenter`, `justifyright`, `justifyfull`. | ## extend Permite ampliar una lista agregando todos los elementos de un bloque iterable. En otras palabras, inserta todos los elementos de una lista en otra lista. ```text hubl.txt theme={null} {% set vehicles = ["boat","car","bicycle"] %} {% set more_vehicles = ["airplane","motorcycle"] %} {% do vehicles.extend(more_vehicles) %} {{vehicles}} ``` ```text resultados renderizados.txt theme={null} [boat, car, bicycle, airplane, motorcycle] ``` ## file\_by\_id Esta función entrega los metadatos de un archivo según el ID. Acepta un único parámetro, el ID numérico del fichero que se busca. Para obtener varios archivos a la vez, utiliza la función [files\_by\_ids](#files_by_ids) en su lugar. > [!WARNING] > > **Nota:** Esta función está limitada a 10 llamadas por página. ```text hubl.txt theme={null} {% set file = file_by_id(123) %} {{ file.friendlyUrl }} ``` ```text resultados renderizados.txt theme={null} https://www.hubspot.com/hubfs/HubSpot_Logos/HSLogo_color.svg ``` | Parámetro | Tipo | Descripción | | - | - | - | | `file_id` | Número | El ID del archivo que se busca. | ## files\_by\_ids Entrega los metadatos de varios archivos según el ID. Acepta una serie de ID de archivo. > [!WARNING] > > **Nota:** Esta función está limitada a 10 llamadas por página y puede aceptar hasta 100 ID de archivo. ```text hubl.txt theme={null} {% set files = files_by_ids([123,456])%} {% for file in files %} URL:{{file.friendlyUrl}}
{% endfor %} ``` ```text resultados renderizados.txt theme={null} URL:https://api-na1.hubspot.com/filemanager/api/v2/files/123/example-file-1 URL:https://api-na1.hubspot.com/filemanager/api/v2/files/456/example-file-2 ``` | Parámetro | Tipo | Descripción | | - | - | - | | `file_id` | Número | Los ID de los archivos que se buscan, separados por comas (hasta 100). | Por ejemplo, puedes usar esta función para repetir los archivos que se han subido para un contacto. Para volver sobre los resultados, deberás usar el [filtro split de HubL](/docs/cms/reference/hubl/filters#split), ya que la propiedad del CRM será una cadena separada con punto y coma. ```hubl theme={null} {% set objects = crm_objects("contact", "email=bh@hubspot.com", "file").results %} {% for item in objects %} {% set fileIDs = item.file|split(";") %} {% set files = files_by_ids(fileIDs) %} {% for file in files %}
File name: {{file.name}}
Friendly Url: {{file.friendlyUrl }}
Url: {{file.url }}

{% endfor %} {% endfor %} ``` ## flag\_content\_for\_access\_check Cuando una publicación de blog está [configurada para el acceso por autorregistro](https://knowledge.hubspot.com/es/blog/use-self-registration-for-private-blog-content), los visitantes deberán registrarse o iniciar sesión para ver el contenido completo de la publicación. Los recursos de blog predeterminados de HubSpot incluyen esta función automáticamente y también un indicador con el icono de un candado para las publicaciones que requieren autorregistro para acceder. Obtén más información sobre cómo [crear soluciones personalizadas utilizando esta función y su API correspondiente](/docs/cms/start-building/features/memberships/overview#private-blog-posts-with-self-registration). Esta función comprueba si el visitante actual puede acceder a una publicación de blog. Cuando se llama, la función se reemplaza con el siguiente atributo: `hs-member-content-access=` A value of `true` indicates that the blog post requires the visitor to log in to view the full content. ```text hubl.txt theme={null} {% for content in contents %}
...
{% endfor %} ``` ```text resultados renderizados.txt theme={null}
...
``` | Parámetro | Tipo | Descripción | | - | - | - | | `ID` | ID | El ID del contenido que se cotejará con la persona que ha iniciado sesión en ese momento. | ## follow\_me\_links Devuelve los [enlaces de las cuentas de redes sociales fijadas en la configuración de la cuenta](https://knowledge.hubspot.com/es/design-manager/use-default-modules-in-the-layout-editor#add-social-accounts-to-the-follow-me-module). Se utiliza en el [módulo predeterminado follow\_me](/docs/cms/reference/modules/default-modules#follow-me). ```text hubl.txt theme={null} {% set fm = follow_me_links() %} {{ fm }} ``` ```text resultados renderizados.txt theme={null} [FollowMeLink{type=URL, id=5142734, altName=RSS, followMeUrl=http://website.com/rss.xml, iconName=rss, name=http://website.com/rss.xml}] ``` ## format\_address Le da formato a una dirección según la configuración regional del contexto. ```text hubl.txt theme={null} {{ format_address('en-us', { address: "25 First Street", address2: "2nd Floor", city: "Cambridge", state: "MA", country: "United States", zip: "02141"}) }} ``` ```text resultados renderizados.txt theme={null} [25 First Street, 2nd Floor, Cambridge, MA 02141, United States] ``` | Parámetro | Tipo | Descripción | | - | - | - | | `locale` | Cadena | La configuración regional que determinará el formato de la dirección. | | `address` | Cadena | La dirección del lugar. | | `address2` | Cadena | La segunda línea de la dirección, como el número de piso o apartamento. | | `city` | Cadena | La ciudad de la dirección. | | `state` | Cadena | El estado de la dirección. | | `country` | Cadena | El país de la dirección. | | `zip` | Cadena | El código postal de la dirección. | ## format\_company\_name Permite darle formato al nombre de una empresa agregando sufijos honoríficos japoneses cuando corresponda. ```text hubl.txt theme={null} {{ format_company_name("companyName", addJapaneseHonorifics) }} ``` ```text resultados renderizados.txt theme={null} HubSpot ``` | Parámetro | Tipo | Descripción | | - | - | - | | `companyName` | Cadena | El nombre de la empresa. | | `useHonorificIfApplicable` | Booleano | Cuando se establece en `true` y el idioma del contexto es japonés, se agregará el sufijo honorífico para la empresa cuando corresponda. | ## format\_name Permite dar formato al nombre de una persona colocando el apellido antes del primer nombre y agrega sufijos honoríficos japoneses cuando corresponda. ```text hubl.txt theme={null} {{ format_name("firstName", "surname", addJapaneseHonorifics) }} ``` ```text resultados renderizados.txt theme={null} Hobbes Baron ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `firstName` | Cadena | El nombre de la persona. | | | `surname` | Cadena | El apellido de la persona. | `False` | | `useHonorificIfApplicable` | Booleano | Cuando se establece en `true` y el idioma del contexto es japonés, se agregará un sufijo honorífico japonés cuando corresponda. | | ## format\_datetime Permite darle formato a los componentes de fecha y hora de un objeto de fecha, similar al filtro de HubL [format\_datetime](/docs/cms/reference/hubl/filters#format_datetime). Esta función reemplaza a la función obsoleta `datetimeformat`. ```text hubl.txt theme={null} {{ format_datetime(content.publish_date, "short", "America/New_York", "en") }} ``` ```text resultados renderizados.txt theme={null} 12/31/69 7:00 PM ``` | Parámetro | Tipo | Descripción | | - | - | - | | `format` | Cadena | El formato que se utilizará. Puede ser uno de los siguientes:
  • `short`
  • `medium`
  • `long`
  • `full`
  • un patrón personalizado basado en las normas [Unicode LDML](https://unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns)
| | `timeZone` | Cadena | La zona horaria de la fecha del resultado en [formato IANA TZDB](https://data.iana.org/time-zones/tzdb/). | | `locale` | Cadena | La configuración regional que se utilizará en los formatos adaptados a la configuración regional. | ## geo\_distance Esta función contiene 4 parámetros y calcula la altura elipsoidal 2D entre dos puntos de la Tierra. Utiliza esta función como una consulta de filtro para obtener los datos de HubDB. ```html example.html theme={null} {% for row in hubdb_table_rows(1234567, "geo_distance(loc,1.233,-5.678,mi)__gt=500") %} {{row.name}}
{% endfor %} ``` ```html example.html theme={null} Cambridge, MA
Salem, MA
San Diego, CA
Chicago, IL
``` | Parámetro | Tipo | Descripción | | - | - | - | | `point1` | Ubicación | Ubicación desde una columna de HubDB. | | `point2_lat` | Latitud | Latitud del punto 2. | | `point2_long` | Longitud | Longitud del punto 2. | | `units` | Cadena | Unidades de medida del valor resultante. Las opciones son `FT` para pies, `MI` para millas, `M` para metros o `KM` para kilómetros. | ## get\_asset\_url Esta función devuelve la URL pública de la plantilla o el archivo de programación especificado. El parámetro de esta función es la ruta del recurso en el administrador de diseño. Las URL de los archivos incluidas en el código se actualizan cada vez que se publican; por lo tanto, al utilizar esta función te aseguras de utilizar siempre la última versión del archivo. Puedes generar automáticamente esta función en la aplicación, bien haciendo clic con el botón derecho en un **archivo** y seleccionando **Copiar URL pública**, o bien haciendo clic en **Acciones** y seleccionando luego **Copiar URL pública**. En el siguiente ejemplo se obtiene la URL de un archivo Javascript creado en el administrador de diseño que se puede incluir como atributo `src` de una etiqueta ` ``` ## resize\_image\_url Convierte la URL de la imagen almacenada en el administrador en archivos a una URL que redimensionará la imagen si así se requiere. La función acepta un parámetro obligatorio y cinco opcionales. Se debe pasar al menos un parámetro opcional. Requerido * **URL:** cadena, la URL de una imagen alojada en HubSpot. Opcionales * **width:** número, la nueva anchura de la imagen en pixeles. * **height:** número, la nueva altura de la imagen en pixeles. * **length:** número, la nueva longitud del lado mayor, en pixeles. * **upscale:** booleano, utiliza las dimensiones de la imagen redimensionada incluso si superan la imagen original (las imágenes pueden aparecer borrosas). * **upsize:** booleano, muestra la imagen redimensionada aunque sea mayor que la original en bytes. > [!WARNING] > > **Nota:** las imágenes que son mayores a 4096 pixeles en altura o ancho no se redimensionarán automáticamente. En lugar de eso, tendrás que [cambiar el tamaño de la imagen manualmente](https://knowledge.hubspot.com/es/files/automatic-image-resizing-on-hubspot-content). ```text hubl.txt theme={null} {{ resize_image_url("http://your.hubspot.site/hubfs/img.jpg", 0, 0, 300) }} ``` ```text resultados renderizados.txt theme={null} http://your.hubspot.site/hubfs/img.jpg?length=300&name=img.jpg ``` | Parámetro | Tipo | Descripción | | - | - | - | | `url` | Cadena | URL de una imagen alojada en HubSpot. | | `width` | Entero (px) | El nuevo ancho de la imagen, en pixeles. | | `height` | Entero (px) | La nueva altura de la imagen, en pixeles. | | `length` | Entero (px) | La nueva longitud del lado más largo, en pixeles. | | `upscale` | Booleano | Utiliza las dimensiones de la imagen redimensionada incluso si superan la imagen original (las imágenes pueden aparecer borrosas). El valor por opción predeterminada es `false`. | | `upsize` | Booleano | Muestra la imagen redimensionada aunque sea mayor que la original en bytes. El valor por opción predeterminada es `false`. | ## reverse Invierte el orden de los elementos de una lista. No toma ningún parámetro. Para invertir un objeto o devolver un elemento iterable para repetir la lista a la inversa, utiliza [`|reverse`](/docs/cms/reference/hubl/filters#reverse) ```text hubl.txt theme={null} {% set numbers = [1,2,3,4] %} {% do numbers.reverse() %} {{numbers}} ``` ```text resultados renderizados.txt theme={null} [4, 3, 2, 1] ``` ## set\_response\_code Establece el código de respuesta como el código especificado. [404](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/404) es el único código admitido por ahora. Cuando se utiliza, la página mostrará un error `404`. ```text hubl.txt theme={null} {{ set_response_code(404) }} ``` ```text resultados renderizados.txt theme={null} ``` | Parámetro | Tipo | Descripción | | - | - | - | | `code` | Entero | el código de la respuesta del HTTP. Actualmente, `404` es el único código admitido. | ## super Esta función imprime el contenido de la plantilla principal en una plantilla secundaria utilizando la etiqueta [extends](/docs/cms/reference/hubl/overview#blocks-and-extends). Por ejemplo, en el ejemplo de código de abajo, se ha creado una plantilla HTML básica con un bloque HubL llamado `sidebar` y se ha guardado como `parent.html`. Se creará un segundo archivo de plantilla que ampliará ese archivo principal. Normalmente, el valor de la etiqueta `

` se imprimiría en el bloque de la barra lateral del HTML principal. Pero al usar `super`, el contenido del bloque de la barra lateral de la plantilla principal se combina con el contenido de la plantilla secundaria. ```html example.html theme={null} {% extends "custom/page/web_page_basic/parent.html" %} {% block sidebar %}

Table Of Contents

{{ super() }} {% endblock %} ``` ```html example.html theme={null} This is the parent template

Table of contents

Sidebar content from parent. ``` ## today Muestra el inicio del día de hoy (12:00am). Como alternativa, puedes agregar un parámetro para cambiar la zona horaria de la zona UTC predeterminada. ```text hubl.txt theme={null} {{ today() }} {{ today("America/New_York") }} {{ unixtimestamp(today("America/New_York").plusDays(1)) }} ``` ```text resultados renderizados.txt theme={null} 2018-10-23T00:00Z 2018-10-23T00:00-04:00[America/New_York] 1540353600000 ``` ## to\_local\_time Convierte una marca de tiempo UNIX a la hora local, con base en la configuración de los informes en HubSpot. A continuación, puedes aplicar un filtro datetimeformat para darle formato a la fecha. ```text hubl.txt theme={null} {{ to_local_time(eastern_dt) }} ``` ```text resultados renderizados.txt theme={null} 2015-05-13 10:37:31 ``` | Parámetro | Tipo | Descripción | | - | - | - | | `date` | Fecha y hora | Marca de tiempo UNIX para convertir a la hora local. | ## topic\_cluster\_by\_content\_id Devuelve un objeto dicc. de HubL que representa el grupo de temas asociado a un contenido (determinado por el ID del contenido que se proporcionó), e incluye los metadatos de la página pilar asociada, el tema central y los temas secundarios. Se puede usar para "enlazar automáticamente" un contenido con su página pilar asociada \[si existe]. Los metadatos disponibles se encuentran con las etiquetas: attachableContent (los metadatos del contenido actual), topic (los metadatos del tema asociado al contenido actual), coreTopic (los metadatos del tema central del conjunto asociado) y pillarPage (los metadatos de la página pilar asociada). Utiliza `{{ topicCluster|pprint }}` para que se muestren todas las propiedades y atributos disponibles. ```html example.html theme={null} {{ topic_cluster_by_content_id(content.id) }} {%- if content.id -%} {%- set topicCluster = topic_cluster_by_content_id(content.id) -%} {%- if topicCluster.pillarPage.url.value and topicCluster.pillarPage.publishState == "PUBLISHED" -%} {%- endif -%} {%- endif -%} ``` ```html example.html theme={null} { attachedContent, topic, coreTopic, pillarPage } (AttachedContentWithContext: {attachedContent=AttachedContent{id=1234, topicId=1234, clusterId=1234, portalId=0, attachable=Attachable{contentId=124, url=ValidatedUri{https://www.hubspot.com/}, attachableType=LANDING_PAGE, title=title, publishState=PUBLISHED, deletedAt=null}, isLinkedToPillarPage=null, isPillarPage=null, createdAt=1547238986475, updatedAt=1547238986475, deletedAt=null}, coreTopic=Optional[Topic{id=1234, portalId=0, clusterId=1234, phrase=TOPIC PHRASE, attachedContent=null, isCoreTopic=false, createdAt=1547157062081, updatedAt=1547232313421, deletedAt=null}], pillarPage=Optional[AttachedContent{id=1234, topicId=1234, clusterId=1234, portalId=0, attachable=Attachable{contentId=null, url=ValidatedUri{https://www.hubspot.com.com/}, attachableType=EXTERNAL_URL, title=null, publishState=PUBLISHED, deletedAt=null}, isLinkedToPillarPage=null, isPillarPage=null, createdAt=1547157062086, updatedAt=1547157062086, deletedAt=null}], topic=Optional[Topic{id=1234, portalId=0, clusterId=8345, phrase=topic phrase, attachedContent=null, isCoreTopic=false, createdAt=1547238962703, updatedAt=1547238962703, deletedAt=null}]}) ``` > [!WARNING] > > **Nota:** esta función tiene un límite de 10 llamadas por página. | Parámetro | Tipo | Descripción | | - | - | - | | `content_id` | ID | El ID de la página que se busca. | ## truncate La función de truncamiento actúa del mismo modo que el [filtro truncar](/docs/cms/reference/hubl/filters#truncate) pero utiliza la sintaxis de una función en lugar de la de un filtro. El primer parámetro especifica la cadena. El segundo parámetro especifica el punto en el que se debe truncar. El último parámetro especifica los caracteres que se agregarán cuando se produzca el truncamiento. > [!WARNING] > > **Nota:** Debido a que esta función depende de los espacios entre las palabras para acortar las cadenas, es posible que no funcione como se espera con idiomas sin espacios entre caracteres, como el japonés. ```text hubl.txt theme={null} {{ truncate("string to truncate at a certain length", 19, false, "...") }} {% set longString = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus sodales ultricies velit sit amet ornare." %} {{ truncate(longString, 40, false, "...") }} ``` ```text resultados renderizados.txt theme={null} string to truncate ... Lorem ipsum dolor sit amet, consectetur ... ``` | Parámetro | Tipo | Descripción | | - | - | - | | `string_to_truncate` | Cadena | La cadena que se trunca. | | `length` | Entero | Especifica el punto en el que se debe truncar el texto (incluye los caracteres HTML). | | `killwords` | Booleano | Si es verdadero, la cadena cortará el texto, independientemente de si está en medio de una palabra. | | `end` | Cadena | Los caracteres que se agregarán para indicar dónde se ha truncado el texto. | ## type Esta función acepta un argumento y muestra el tipo de objeto. El valor devuelto es uno de los siguientes: `"bool"`, `"datetime"`, `"dict"`, `"float"`, `"int"`, `"list"`, `"long"`, `"null"`, `"str"` o `"tuple"`. ```text hubl.txt theme={null} {{ type("Blog") }} {% set my_type = type("Blog") %}

{{my_type}}

``` ```text resultados renderizados.txt theme={null}

str

``` ## unixtimestamp Esta función da como resultado una marca de tiempo UNIX cuando se proporciona un objeto datetime. ```text hubl.txt theme={null} {{ unixtimestamp(d) }} ``` ```text resultados renderizados.txt theme={null} 1565983117868 ``` ## update Actualiza el objeto dict con los elementos de otro objeto dict o de un elemento iterable de pares clave-valor. Utiliza esta función para combinar o fusionar objetos. ```text hubl.txt theme={null} {% set dict_var = {"authorName": "Douglas Judy", "authorTitle": "Mastermind" } %} {% do dict_var.update({"authorFriend": "Jake"}) %} {% do dict_var.update({"authorLocation": "unknown"}) %} {{ dict_var }} ``` ```text resultados renderizados.txt theme={null} {authorName=Douglas Judy, authorTitle=Mastermind, authorFriend=Jake, authorLocation=unknown} ``` # Sentencias If Source: https://developers.hubspot.es/docs/cms/reference/hubl/if-statements Una guía práctica de las declaraciones if de Hubl de HubSpot para desarrolladores de CMS. Puedes incluir lógica condicional en tus módulos y plantillas utilizando las[sentencias if](#basic-if-statement-syntax) y [sentencias unless](#unless-statements) de HubL. Las sentencias If suelen contener [operadores compatibles](/docs/cms/reference/hubl/operators-and-expression-tests) con HubL y pueden utilizarse para ejecutar [pruebas de expresión](/docs/cms/reference/hubl/operators-and-expression-tests#expression-tests). > [!WARNING] > > ### Nota: > > Si utilizas [tokens de personalización](/docs/cms/reference/hubl/functions#personalization-token) dentro de una sentencia condicional de tu módulo de correo electrónico, debes [activar el correo electrónico programable para el módulo](/docs/cms/start-building/features/data-driven-content/emails-with-programmable-content). > > La información pasada a través de [v3](/docs/api-reference/marketing-marketing-emails-v3/guide) o [v4](/docs/api-reference/marketing-single-send-v4/guide) de la API de envío único no funcionará dentro de las declaraciones `if`, ya que las plantillas se compilan antes de que la información se rellene. ## Sintaxis básica de la sentencia if HubL utiliza sentencias if para ayudar a definir la lógica de una plantilla. La sintaxis de las sentencias if de HubL es muy similar a la lógica condicional de Python. Las sentencias `if` están envueltas en [delimitadores de sentencias](/docs/cms/reference/hubl/variables-macros-syntax), comenzando con una sentencia `if` de apertura y terminando con un `endif`. El ejemplo siguiente proporciona la sintaxis básica de una sentencia if, en la que "condición" se sustituiría por la regla booleana que ibas a evaluar como verdadera o falsa. ```hubl theme={null} {% if condition %} If the condition is true print this to template. {% endif %} ``` Ahora que has visto la sintaxis básica, veamos algunos ejemplos reales de sentencias if básicas. Los siguientes ejemplos muestran sentencias if que comprueban si un módulo HubL con el nombre `my_module` y si una variable llamada `my_module` están presentes en una plantilla. Observa que sin ningún operador, la sentencia if evaluará si el módulo está definido o no en el contexto de la plantilla. ```hubl theme={null} {% module "my_module" path="@hubspot/rich_text", label="My rich text module", html="Default module text" export_to_template_context=true %} {% if widget_data.my_module %} A module named "my_module" is defined in this template. {% endif %} {% set my_variable = "A string value for my variable" %} {% if my_variable %} The variable named my_variable is defined in this template. {% endif %} ``` Observa que al evaluar el módulo HubL, el nombre del módulo se deja entre comillas dentro de la sentencia `if` y al probar la variable no se utilizan comillas alrededor del nombre de la variable. En los dos ejemplos anteriores, el módulo y la variable existen en la plantilla, por lo que las sentencias se evalúan para imprimir la marca. Ten en cuenta que estos ejemplos solo prueban si el módulo y la variable están definidos, no si tienen o no un valor. Ahora veamos una sentencia `if` que evalúa si un módulo tiene un valor, en lugar de evaluar si existe en la plantilla. Para ello, debemos utilizar el parámetro [export\_to\_template\_context](/docs/cms/reference/modules/export-to-template-context) . En el ejemplo siguiente, si se valora el módulo de texto en el editor de contenidos, se imprimiría la marca. Si el campo de texto del módulo estuviera vacío, no se mostraría ninguna marca. Si estás trabajando con módulos personalizados, existe una sintaxis simplificada de `widget.widget_name` que se describe en el[ejemplo aquí](/docs/cms/reference/modules/configuration). ```text input.txt theme={null} {% module "product_names" path="@hubspot/text", label="Enter the product names that you would like to render the coupon ad for", value="all of our products", export_to_template_context=True %} {% if widget_data.product_names.value %}

For a limited time, get 50% off {{ widget_data.product_names.value}}!

{% endif %} ``` ```text output.txt theme={null}

For a limited time get 50% off all of our products!

``` ## Usando elif y else Las sentencias `if` pueden hacerse más sofisticadas con sentencias condicionales adicionales o con una regla que se ejecuta cuando la condición o las condiciones son falsas. Las sentencias `elif` te permiten agregar condiciones adicionales a tu lógica que se evaluarán después de la condición anterior. Las sentencias **`else`** definen una regla que se ejecuta cuando todas las demás condiciones son falsas. Puedes tener un número ilimitado de sentencias `elif` dentro de una sola sentencia if, pero solo una sentencia `else`. A continuación se muestra el ejemplo de sintaxis básica de la sentencia if que utiliza el [operador `<=`](/docs/cms/reference/hubl/operators-and-expression-tests#comparison) para comprobar el valor de una variable. En este ejemplo, la plantilla se imprimirá con la leyenda: "El número con nombre de la variable es menor que o igual a 6." ```hubl theme={null} {% set number = 5 %} {% if number <= 2 %} Variable named number is less than or equal to 2. {% elif number <= 4 %} Variable named number is less than or equal to 4. {% elif number <= 6 %} Variable named number is less than or equal to 6. {% else %} Variable named number is greater than 6. {% endif %} ``` A continuación se muestra otro ejemplo que utiliza un módulo de elección para mostrar diferentes encabezados para una página de carreras, en función del departamento elegido por el usuario. El ejemplo utiliza el [operador ==](/docs/cms/reference/hubl/operators-and-expression-tests#comparison), para comprobar ciertos valores predefinidos en el módulo de elección. ```hubl theme={null} {% choice "department" label="Choose department", value="Marketing", choices="Marketing, Sales, Dev, Services" export_to_template_context=True %} {% if widget_data.department.value == "Marketing" %}

Want to join our amazing Marketing team?!

We have exciting career opportunities on the {{ widget_data.department.value }} team.

{% elif widget_data.department.value == "Sales" %}

Are you a Sales superstar?

We have exciting career opportunities on the {{ widget_data.department.value }} team.

{% elif widget_data.department.value == "Dev" %}

Do you love to ship code?

We have exciting career opportunities on the {{ widget_data.department.value }} team.

{% else %}

Want to work with our awesome customers?

We have exciting career opportunities on the {{ widget_data.department.value }} team.

{% endif %} ``` ## Sentencias unless Las sentencias `unless` son condicionales al igual que las sentencias `if`, pero funcionan con la lógica inversa. Se renderizará y compilará el código entre las etiquetas de apertura y cierre, a menos que la condición booleana única se evalúe como verdadera. Las sentencias unless comienzan con un **`unless`** y terminan con un **`endunless`.** Las sentencias `unless` admiten `else` pero no `elif`. A continuación se muestra un ejemplo que imprime un encabezado "En construcción", a menos que se valore el campo de texto enriquecido. Si el campo de texto enriquecido tiene contenido, entonces ese contenido se mostrará. ```hubl theme={null} {% module "my_page_content" path="@hubspot/rich_text", label="Enter your page content", html="" export_to_template_context=true %} {{ widget_data.my_page_content.html }} {% unless widget_data.my_page_content.html %}

This page is under construction.

Come back soon!

{% endunless %} ``` ## ifchanged Además de las sentencias if y unless, HubL admite las sentencias `ifchanged`. Estas sentencias pueden utilizarse para que solo se muestre la marca cuando una variable ha cambiado desde una invocación anterior de esta etiqueta. ## Sentencias if en línea HubL admite las sentencias `if` en línea. Se pueden utilizar para escribir lógica condicional de forma concisa con [operadores y pruebas de expresión](/docs/cms/reference/hubl/operators-and-expression-tests). ```hubl theme={null} {% set color = "Blue" if is_blue is truthy else "Red" %} // color == "blue" {{ "Blue" if is_blue is truthy else "Red" }} // "Blue" {% set dl = true %} Download PDF ``` ## Operadores ternarios También es posible utilizar operadores ternarios para escribir rápidamente lógica condicional con [operadores y pruebas de expresión](/docs/cms/reference/hubl/operators-and-expression-tests#logical). ```hubl theme={null} // If the variable is_blue is true, output "blue", otherwise output"red" {{ is_blue is truthy ? "blue" : "red" }} // Set the variable is_red to false if is_blue is true, otherwise set to true {% set is_red = is_blue is truthy ? false : true %} ``` # Bucles for Source: https://developers.hubspot.es/docs/cms/reference/hubl/loops Los bucles for se pueden utilizar en HubL para iterar a través de secuencias de objetos. Los bucles for se pueden utilizar en HubL para iterar a través de secuencias de objetos. Lo más habitual es que se utilicen con la renderización del [contenido del blog](/docs/cms/start-building/building-blocks/templates/blog) en formato de listado, pero también pueden utilizarse para ordenar otras variables de secuencia. Los bucles for comienzan con una sentencia `{% for %}` y terminan con una sentencia `{% endfor %}`. Dentro de la sentencia `{% for %}` se nombra un solo elemento de la secuencia seguido de `in` y luego el nombre de la secuencia. El código entre las sentencias `for` de apertura y cierre se imprime con cada iteración, y generalmente incluye la variable impresa del elemento individual de la secuencia. A continuación se muestra la sintaxis básica de un bucle for: ```hubl theme={null} {% for item in items %} {{ item }} {% endfor %} ``` A continuación se presenta un ejemplo básico que muestra cómo imprimir una secuencia de valores de variables en una lista. ```html example.html theme={null} {% set languages = ["HTML", "CSS", "Javascript", "Python", "Ruby", "PHP", "Java"] %}

Languages

;
    {% for language in languages %}
  • {{ language }}
  • {% endfor %}
``` ```html example.html theme={null}

Languages

  • HTML
  • CSS
  • Javascript
  • Python
  • Ruby
  • PHP
  • Java
``` ## Propiedades del bucle A medida que un bucle itera, puedes utilizar la [lógica condicional](/docs/cms/reference/hubl/if-statements) para definir el comportamiento del bucle. La propiedad variable `loop.index` mantiene una cuenta del número actual de las iteraciones del bucle. Hay otras propiedades de las variables de bucle que cuentan las iteraciones de diferentes maneras. Estas propiedades se describen a continuación: | Variable | Description | | - | - | | `loop.cycle` | Una función de ayuda para recorrer una lista de secuencias. Consulta la explicación más abajo. | | `loop.depth` | Indica la profundidad de un bucle recursivo en la que se encuentra la renderización. Comienza en el nivel 1 | | `loop.depth0` | Indica la profundidad de un bucle recursivo en la que se encuentra la renderización. Comienza en el nivel 0 | | `loop.first` | Esta variable se evalúa como verdadera, si es la primera iteración del bucle. | | `loop.index` | La iteración actual del bucle. Esta variable empieza a contar en 1. | | `loop.index0` | La iteración actual del bucle. Esta variable empieza a contar en 0. | | `loop.last` | Esta variable se evalúa como verdadera, si es la última iteración del bucle. | | `loop.length` | El número de elementos en la secuencia. | | `loop.revindex` | El número de iteraciones desde el final del bucle. Cuenta regresiva hasta 1. | | `loop.revindex0` | El número de iteraciones desde el final del bucle. Cuenta regresiva hasta 0. | A continuación se muestran algunos ejemplos que utilizan diferentes variables de bucle. El siguiente ejemplo básico utiliza `loop.index` para mantener una cuenta que se imprime con cada iteración. ```html example.html theme={null} {% set loopy = ["Content", "Social", "Contacts", "Reports"] %} {% for app in loopy %} {{ loop.index }}. {{app}}
{% endfor %} ``` ```html example.html theme={null} 1. Content
2. Social
3. Contacts
4. Reports
``` El siguiente ejemplo utiliza la lógica condicional para comprobar si la longitud del bucle es `divisibleby` ciertos números. A continuación, se renderiza la anchura del div de post-item en consecuencia. El ejemplo utiliza el bucle estándar de post de blog y asume que hay 6 posts en el bucle. ```html example.html theme={null} {% for content in contents %} {% if loop.length is divisibleby 4 %}
Post content
{% elif loop.length is divisibleby 3 %}
Post content
{% else %}
Post content
{% endif %} {% endfor %} ``` ```html example.html theme={null}
Post content
Post content
Post content
Post content
Post content
Post content
Post content
``` ## Bucles anidados Los bucles también pueden anidarse con bucles. El bucle for secundario se ejecutará con cada iteración del bucle for principal. En el siguiente ejemplo, se imprime una lista de elementos secundarios en un `
    ` anidado dentro de un `
      ` de elementos principales. ```html example.html theme={null} {% set parents = ["Parent item 1", "Parent item 2", "Parent item 3"] %} {% set children = ["Child item 1", "Child item 2", "Child item 3"] %}
        {% for parent in parents %}
      • {{parent}}
          {% for child in children %}
        • {{child}}
        • {% endfor %}
      • {% endfor %}
      ``` ```html example.html theme={null}
      • Parent item 1
        • Child item 1
        • Child item 2
        • Child item 3
      • Parent item 2
        • Child item 1
        • Child item 2
        • Child item 3
      • Parent item 3
        • Child item 1
        • Child item 2
        • Child item 3
      ``` ## cycle La etiqueta cycle puede utilizarse dentro de un bucle for para recorrer una serie de valores de cadena e imprimirlos en cada iteración. Una de las aplicaciones más prácticas de esta técnica es aplicar la alternancia de clases a los posts de tu blog en un listado. Esta etiqueta puede utilizarse en más de dos valores y repetirá el ciclo si hay más iteraciones del bucle que valores del ciclo. En el ejemplo siguiente, se aplica una clase `odd` y `even` a los posts de un listado (el ejemplo supone que hay 5 posts en el bucle) Ten en cuenta que **no hay espacios** entre los valores de la cadena de ciclos separados por comas. ```html example.html theme={null} {% for content in contents %}
      Blog post content
      {% endfor %} ``` ```html example.html theme={null}
      Blog post content
      Blog post content
      Blog post content
      Blog post content
      Blog post content
      ``` ## Variables dentro de los bucles > [!WARNING] > > Cualquier variable definida dentro de los bucles está limitada al ámbito de ese bucle y no puede ser llamada desde fuera del mismo. Puedes llamar a las variables definidas fuera de un bucle, desde dentro de un bucle, pero no a la inversa. ## Pares clave y valor en los bucles Si el diccionario de información que está recorriendo tiene pares clave y valor, un simple bucle for solo tendría acceso a los valores. Si deseas tener acceso tanto a las claves como a los valores dentro del bucle for, el HubL se formatearía así: ```text entrada.txt theme={null} {% set dict_var = {"name": "Cool Product", "price": "$20", "size":"XL"} %} {% for key, val in dict_var.items() %} {{ key }}: {{ val }}
      {% endfor %} ``` ```text salidas.txt theme={null} name: Cool Product
      price: $20
      size: XL
      ``` ## Iterar un número determinado de veces A veces se quiere iterar un número determinado de veces, esto puede ser útil para generar HTML o CSS. Puedes hacerlo con la función de rango. ```html example.html theme={null} {% for x in range(0,5) %} {{loop.index}} {% endfor %} ``` ```text salida renderizada.txt theme={null} 1 2 3 4 5 ``` ## Uso de las etiquetas HubL en los bucles Cuando agregas una etiqueta a la página HubSpot asignas automáticamente un `id` al HTML que la envuelve. Esta etiqueta es única por su "nombre". En situaciones en las que se necesita utilizar una etiqueta en un bucle for, establecer nombres únicos no es práctico. Agrega el parámetro `unique_in_loop` a tu etiqueta para generar identificadores únicos. Este parámetro agrega el nombre del módulo con el número de iteración del bucle actual, asegurando que es único. Los identificadores únicos no solo son necesarios para un HTML válido, sino que son importantes para la [accesibilidad](/docs/cms/best-practices/improve-existing-sites/accessibility). ```hubl theme={null} {% for item in module.icon_field %} {% icon name="{{ item.name }}", style="{{ item.type }}", unicode="{{ item.unicode }}", unique_in_loop=True %} {% endfor %} ``` # Operadores y pruebas de expresiones Source: https://developers.hubspot.es/docs/cms/reference/hubl/operators-and-expression-tests Para ampliar la lógica y la funcionalidad de tus plantillas, HubL admite varios operadores clave y pruebas de expresión. Los operadores permiten ejecutar funciones matemáticas, realizar comparaciones, generar lógica más compleja en las plantillas y modificar la representación del marcado. Además, este artículo contiene una lista completa de pruebas de expresión que pueden utilizarse en HubL. Para ampliar la lógica y la funcionalidad de tus plantillas, HubL admite varios operadores clave y pruebas de expresión. Los [operadores](/docs/cms/reference/hubl/operators-and-expression-tests#operators) permiten ejecutar funciones matemáticas, realizar comparaciones, generar lógica más compleja en las plantillas y modificar la representación del marcado. Además, este artículo contiene una lista completa de [pruebas de expresión](/docs/cms/reference/hubl/operators-and-expression-tests#expression-tests) que se pueden utilizar en HubL. ## Operadores Los operadores son símbolos que indican al compilador de HubL que ejecute diversas operaciones que dan lugar al output final del marcador. Los operadores se colocan entre los operadores para relacionar ambos valores, ya sea para ejecutar funciones matemáticas, realizar comparaciones o implementar expresiones booleanas. ![operators-and-operands-diagram](https://www.hubspot.es/hubfs/Knowledge_Base_2023-24-25/operators-and-operands.png) A continuación están los operadores que puedes utilizar en HubL, organizados por el tipo. ### Matemáticas Los operadores matemáticos estándar pueden utilizarse para calcular valores en el contexto de una plantilla. ```hubl theme={null} {% set my_num = 11 %} {% set my_number = 2 %} {{ my_num + my_number }} {{ my_num - my_number }} {{ my_num / my_number }} {{ my_num % my_number }} {{ my_num // my_number }} {{ my_num * my_number }} {{ my_num ** my_number }} ``` | Símbolo | Descripción | | - | - | | `+` | Suma dos objetos, generalmente valores numéricos. Para concatenar cadenas o listas, debes utilizar el [operador `~`](#other-hubl-operators). | | `-` | Resta un número de otro. | | `/` | Divide números | | `%` | Devuelve el resto de la división de números | | `//` | Divide dos números y devuelve el resultado entero truncado. Por ejemplo, `{{ 20 // 7 }}` es `2`. | | `*` | Multiplica números | | `**` | Eleva el operador izquierdo a la potencia del operador derecho | ### Comparación Los operadores de comparación se pueden utilizar para evaluar valores para la lógica de la plantilla. Puedes ver algunos ejemplos de operadores de comparación en las [sentencias if](/docs/cms/reference/hubl/if-statements). ```hubl theme={null} {% set my_num = 11 %} {% set my_number = 2 %} {{ my_num == my_number }} {{ my_num != my_number }} {{ my_num > my_number }} {{ my_num >= my_number }} {{ my_num < my_number }} {{ my_num <= my_number }} ``` | Símbolo | Abreviación | Descripción | | - | - | - | | `==` | eq | Igual a. Evalúa como verdadero si los dos objetos tienen valores iguales. | | `!=` | ne | No es igual a. Se evalúa como verdadero si dos objetos no son iguales. | | `>` | gt | Mayor que. Evalúa como verdadero si el valor del operador izquierdo es mayor que el del operador derecho. | | `>=` | gte | Mayor que o igual a. Evalúa como verdadero si el operador izquierdo es mayor o igual que el operador derecho. | | `<` | lt | Menor que. Evalúa como verdadero si el operador izquierdo es menor que el operador derecho. | | `<=` | lte | Menor que o igual a. Evalúa como verdadero si el operador izquierdo es menor o igual que el operador derecho. | > [!TIP] > > La versión abreviada de los operadores de comparación se puede utilizar en filtros que implican la comprobación de una expresión como [`|selectattr()`](/docs/cms/reference/hubl/filters#selectattr). ### Lógica Los operadores lógicos te permiten implementar expresiones booleanas, así como combinar varias expresiones en una sola instrucción. ```text and.txt theme={null} Two non-empty strings: {{ "a" and "b" }} Empty string and non-empty string: {{ "" and "b" }} Two non-zero numbers: {{ 1 and 2 }} Zero and non-zero number: {{ 0 and 1 }} Two non-empty lists: {{ [1] and [2] }} Empty list and non-empty list: {{ [] and [2] }} Two non-empty dicts: {{ {a: 1} and {b: 2} }} Empty dict and non-empty dict: {{ {} and {b: 2} }} ``` ```text or.txt theme={null} Two non-empty strings: {{ "a" or "b" }} Empty string and non-empty string: {{ "" or "b" }} Two non-zero numbers: {{ 1 or 2 }} Zero and non-zero number: {{ 0 or 1 }} Two non-empty lists: {{ [1] or [2] }} Empty list and non-empty list: {{ [] or [2] }} Two non-empty dicts: {{ {a: 1} or {b: 2} }} Empty dict and non-empty dict: {{ {} or {b: 2} }} ``` ```text is / is not.txt theme={null} Conditional using `is` operator: {% set string = "strings are a cat's best friend" %} {% if string is string_containing "cat" %} Meow {% else %} Woof {% endif %} Conditional using `not` operator: {% set string = "strings are a cat's best friend" %} {% if string is not string_containing "cat" %} Meow {% else %} Woof {% endif %} ``` ```text (expr).txt theme={null} {% set my_num = 10 %} {% set my_variable = 5 %} {{ (my_num + 2) * my_variable }} ``` ```text ?.txt theme={null} {% set date = local_dt %} {{ date ? date : 'No date'}} {{ todays_date ? todays_date : 'No date'}} ``` | Símbolo | Descripción | | - | - | | `and` | Devuelve `true` si tanto el operador izquierdo como el derecho son verdaderos. En caso contrario, devuelve `false`. Este operador no se comporta como el operador `and` en Python o el operador `&&` en JavaScript. Más información sobre el uso de los operadores `and` a continuación. | | `or` | Devuelve el primer operador si es verdadero. En caso contrario, devuelve el segundo operador. Este operador es equivalente a `or` en Python y `\|\|` en JavaScript Más información sobre el uso de los operadores `or` a continuación. | | `is` | Une dos operadores para una declaración afirmativa. | | `not` | Niega una afirmación, junto con `is`. | | `(expr)` | Agrupa una expresión para el orden de las operaciones. Por ejemplo, `(10 - 2) * variable`. | | `?` | El [operador ternario](/docs/cms/reference/hubl/if-statements) puede utilizarse para escribir rápidamente la lógica condicional. Acepta 3 argumentos: expresión, condición verdadera, condición falsa. Evalúa una expresión y devuelve la condición correspondiente. | **Utilizar operadores "and" y "or"** En HubL, el operador `or` se comporta como el operador `or` en Python y como el operador `||` en JavaScript. Devolverá el primer operador si la expresión se evalúa como verdadera, en caso contrario devolverá el segundo operador. Un caso de uso habitual del operador `or` es el ajuste de un valor alternativo cuando no está definido el valor de una variable. ```hubl theme={null} Two non-empty strings: {{ "a" or "b" }} Empty string and non-empty string: {{ "" or "b" }} Defining a fallback value: {{ some_variable or "default value" }} ``` Sin embargo, el operador `and` se comporta de forma diferente al operador `and` en Python y al operador `&&` en JavaScript. En HubL, `and` siempre devolverá un valor booleano: cuando la expresión se evalúe como verdadera, se devolverá `true`, de lo contrario devolverá `false`. Por otra parte, los operadores de Python y JavaScript devolverán un valor de operando dependiendo si la instrucción se evalúa como verdadera o falsa. ```hubl theme={null} Two non-empty strings: {{ "a" and "b" }} Empty string and non-empty string: {{ "" and "b" }} ``` En HubL, las listas vacías (`[]`) y los dicc. vacíos (`{}`) se consideran falsos. Esto es equivalente al comportamiento en Python, pero diferente de JavaScript, donde `[]` y `{}` son veraces. ```hubl theme={null} Empty list and non-empty list: {{ [] or [2] }} Empty dict and non-empty dict: {{ {} and {b: 2} }} ``` ### Otros operadores de HubL A continuación se encuentran otros operadores importantes de HubL que pueden utilizarse para realizar diversas tareas. | Símbolo | Descripción | | - | - | | `in` | Comprueba si un valor está en una secuencia. | | `is` | Realiza una [prueba de expresión](/docs/cms/reference/hubl/operators-and-expression-tests#expression-tests). | | `\|` | Aplica un filtro. | | `~` | Concatena los valores. | ## Pruebas de expresión Las pruebas de expresión son varias condiciones booleanas que pueden evaluarse utilizando operadores lógicos. ### boolean Verifica si el objeto es booleano (en un sentido estricto, no solo si puede evaluarse como una expresión verdadera). ```text hubl.txt theme={null} {% set isActive = false %} {% if isActive is boolean %} isActive is a boolean {% endif %} ``` ```text resultados renderizados.txt theme={null} isActive is a boolean ``` ### containing La prueba de expresión comprueba si una variable de lista tiene un valor en ella. ```text hubl.txt theme={null} {% set numbers = [1, 2, 3] %} {% if numbers is containing 2 %} Set contains 2! {% endif %} ``` ```text resultados renderizados.txt theme={null} Set contains 2! ``` ### containingall La prueba de expresión comprueba si una variable de lista contiene todos los valores de otra lista. ```text hubl.txt theme={null} {% set numbers = [1, 2, 3] %} {% if numbers is containingall [2, 3] %} Set contains 2 and 3! {% endif %} {% if numbers is containingall [2, 4] %} Set contains 2 and 4! {% endif %} ``` ```text resultados renderizados.txt theme={null} Set contains 2 and 3! ``` ### defined La prueba de expresión comprueba si una variable está definida en el contexto de la plantilla. Aunque puedes utilizar esta prueba de expresión, al escribir una sentencia if sin ningún operador se comprobará por opción predeterminada si la variable está definida o no. En el siguiente ejemplo, se comprueba el parámetro de color de un módulo de color. Si el parámetro de color no tuviera ningún valor, la plantilla, por opción predeterminada, mostraría un color de fondo negro. Si se define, muestra el color de fondo establecido por el usuario. ```text hubl.txt theme={null} {% color "my_color" color="#930101", export_to_template_context=True %} ``` ```html example.html theme={null} ``` ### divisibleby Comprueba si un objeto es divisible por otro número. Por ejemplo, a continuación se crea un bucle for que itera a través de una lista de tipos de animales. Cada tipo de animal se imprime en un div, y al quinto div tiene aplicado un estilo en línea diferente (width:100%). Este concepto podría aplicarse a un blog en el que se renderiza un marcador diferente para un determinado patrón de entradas. Para saber más sobre los bucles for y loop.index, [consulta este artículo](/docs/cms/reference/hubl/loops). ```text hubl.txt theme={null} {% set animals = ["lions", "tigers", "bears", "dogs", "sharks"] %} {% for animal in animals %} {% if loop.index is divisibleby 5 %}
      {{animal}}
      {% else %}
      {{animal}}
      {% endif %} {% endfor %} ``` ```html example.html theme={null}
      lions
      tigers
      bears
      dogs
      sharks
      ``` ### equalto Comprueba si el valor de una variable es igual a una constante o a otra variable. También puedes utilizar el operador `==` para realizar la misma prueba. En el siguiente ejemplo, el ancho de loas publicaciones del blog se ajusta en función del número total de entradas en el bucle. La salida del ejemplo supone que hay 4 publicaciones en el blog. ```html example.html theme={null} {% for content in contents %} {% if loop.length is equalto 2 %}
      Post content
      {% elif loop.length is equalto 3 %}
      Post content
      {% elif loop.length is equalto 4 %}
      Post content
      {% else %}
      Post content
      Post content
      Post content
      Post content
      ``` ### even Comprueba si una variable numérica es un número par. El siguiente ejemplo muestra un bucle simplificado de listado de blogs, en el que si la iteración actual del bucle es par, se asigna una clase de `even-post` al div del elemento de la entrada. De lo contrario, se asigna una clase de `odd-post`. ```html example.html theme={null} {% for content in contents %} {% if loop.index is even %}
      Post content
      {% else %}
      Post content
      {% endif %} {% endfor %} ``` ```html example.html theme={null}
      Post content
      Post content
      Post content
      Post content
      ``` ### float Comprueba si una variable numérica es un número de punto flotante. ```html example.html theme={null} {% set quantity = 1.20 %} {% if quantity is float %} quantity is a floating point number {% endif %} ``` ```html example.html theme={null} quantity is a floating-point number ``` ### integer Comprueba si una variable es un entero. ```html example.html theme={null} {% set quantity = 120 %} {% if quantity is integer %} Quantity is an integer {% endif %} ``` ```html example.html theme={null} Quantity is an integer ``` ### iterable Comprueba si una variable se puede recorrer en bucle. Este ejemplo comprueba una variable llamada `jobs` para ver si puede ser iterada. Como la variable contiene una lista de trabajos, la [sentencia if](/docs/cms/reference/hubl/if-statements) se evaluaría como `true` y el bucle se ejecutaría. Si la variable contuviera un solo valor, la sentencia if imprimiría ese valor con un marcador diferente. [Más información sobre los bucles for](/docs/cms/reference/hubl/loops). ```html example.html theme={null} {% set jobs = ["Accountant", "Developer", "Manager", "Marketing", "Support"] %} {% if jobs is iterable %}

      Available positions

        {% for job in jobs %}
      • {{ job }}
      • {% endfor %}
      {% else %}

      Available position

      {{ jobs }}
      {% endif %} ``` ```html example.html theme={null}

      Available positions

      • Accountant
      • Developer
      • Manager
      • Marketing
      • Support
      ``` ### lower Comprueba si una cadena está en minúsculas. El siguiente ejemplo utiliza una [instrucción unless](/docs/cms/reference/hubl/if-statements#unless-statements) y un filtro lower para asegurar que una cadena de texto introducida en un módulo de texto esté siempre en minúsculas. ```html example.html theme={null} {% module "my_text" path="@hubspot/text" label="Enter text", value="Some TEXT that should be Lowercase", export_to_template_context=True %} {% unless widget_data.my_text.value is lower %} {{ widget_data.my_text.value|lower }} {% endunless %} ``` ```text resultados renderizados.txt theme={null} some text that should be lowercase ``` ### mapping Comprueba si un objeto es un dicc. (diccionario). El siguiente ejemplo comprueba si el objeto de contacto es un diccionario. ```html example.html theme={null} {% if contact is mapping %} This object is a dictionary. {% else %} This object is not a dictionary. {% endif %} ``` ```text resultados renderizados.txt theme={null} This object is a dictionary. ``` ### none Comprueba si una variable tiene un valor `null`. ```html example.html theme={null} {% module "user_email" path="@hubspot/text" label="Enter user email", value="example@hubspot.com", export_to_template_context=True %} {% unless widget_data.user_email.value is none %} {{ widget_data.user_email.value }} {% endunless %} ``` ```text resultados renderizados.txt theme={null} example@hubspot.com ``` ### number Comprueba si el valor de una variable es un número. El siguiente ejemplo comprueba si una variable es o no una variable, y si es así la convierte en millones. ```html example.html theme={null} {% set my_var = 40 %} {% if my_var is number %} {{ my_var * 1000000 }} {% else %} my_var is not a number. {% endif %} ``` ```text resultados renderizados.txt theme={null} 40000000 ``` ### odd Comprueba si una variable numérica es un número impar. A continuación se muestra el mismo ejemplo que la prueba de expresión par inversa descrita anteriormente. ```html example.html theme={null} {% for content in contents %} {% if loop.index is odd %}
      Post content
      {% else %}
      Post content
      {% endif %} {% endfor %} ``` ```html example.html theme={null}
      Post content
      Post content
      Post content
      Post content
      ``` ### sameas Comprueba si dos variables tienen o no el mismo valor. El siguiente ejemplo establece dos variables y luego comprueba si son iguales o no. ```text hubl.txt theme={null} {% set var_one = True %} {% set var_two = True %} {% if var_one is sameas var_two %} The variables values are the same. {% else %} The variables values are different. {% endif %} ``` ```text resultados renderizados.txt theme={null} The variables values are the same. ``` ### sequence Similar a la prueba **iterable**, esta prueba de expresión comprueba si una variable es una secuencia. El siguiente ejemplo comprueba si una variable es una secuencia y luego itera a través de esa secuencia de géneros musicales. ```html example.html theme={null} {% set genres = ["Pop", "Rock", "Disco", "Funk", "Folk", "Metal", "Jazz", "Country", "Hip-Hop", "Classical", "Soul", "Electronica" ] %} {% if genres is sequence %}

      Favorite genres

        {% for genre in genres %}
      • {{ genre }}
      • {% endfor %}
      {% else %}

      Favorite genre:

      {{ genres }}
      {% endif %} ``` ```html example.html theme={null}
      • Pop
      • Rock
      • Disco
      • Funk
      • Folk
      • Metal
      • Jazz
      • Country
      • Hip-Hop
      • Classical
      • Soul
      • Electronica
      ``` ### string Comprueba si el valor almacenado en una variable es texto. El siguiente ejemplo comprueba si una variable es o no una cadena, y si es así, aplica un filtro de título para cambiar las mayúsculas. ```text hubl.txt theme={null} {% set my_var = "title of section" %} {% if my_var is string %} {{ my_var|title }} {% else %} my_var is not a string {% endif %} ``` ```text resultados renderizados.txt theme={null} Title Of Section ``` ### string\_containing Comprueba si una subcadena está contenida dentro de otra cadena. Esta prueba de expresión se utiliza junto con el operador `is`. ```text hubl.txt theme={null} {% if content.domain is string_containing ".es" %} Markup that will only render on content hosted on .es domains {% elif content.domain is string_containing ".jp" %} Markup that will only render on content hosted on .jp domains {% else %} Markup that will render on all other domains {% endif %} ``` ```text resultados renderizados.txt theme={null} Markup that will render on all other domains ``` ### string\_startingwith Comprueba si una cadena empieza por una cadena determinada. Se utiliza junto con el operador `is`. ```text hubl.txt theme={null} {% if content.slug is string_startingwith "es/" %} Markup that will only render on content hosted in a /es/ subdirectory {% elif content.slug is string_startingwith "jp/" %} Markup that will only render on content hosted in a /jp/ subdirectory {% else %} Markup that will render on all subdirectories {% endif %} ``` ```text resultados renderizados.txt theme={null} Markup that will render on all subdirectories ``` ### truthy Comprueba si una expresión se evalúa como `True`. El siguiente ejemplo utiliza un módulo de casilla de verificación booleana para mostrar un mensaje de alerta. ```html example.html theme={null} {% boolean "check_box" label="Show alert", value=True, export_to_template_context=True %} {% if widget_data.check_box.value is truthy %}
      Danger!
      {% endif %} ``` ```html example.html theme={null}
      Danger!
      ``` ### undefined Comprueba si una variable está indefinida en el contexto de la plantilla. Esta prueba es diferente de la de `none`, ya que undefined será `true` cuando la variable esté presente pero no tenga ningún valor; mientras que none será `true` cuando la variable tenga un valor nulo. El siguiente ejemplo comprueba la existencia de la variable "my\_var" en una plantilla. ```text hubl.txt theme={null} {% if my_var is undefined %} A variable named "my_var" does not exist on this template. {% else %} {{ my_var }} {% endif %} ``` ```text resultados renderizados.txt theme={null} A variable named "my_var" does not exist on this template. ``` ### upper Comprueba si una cadena está toda en mayúsculas. A continuación se muestra un ejemplo inverso de la prueba de expresión `lower` [anterior](#lower). ```text hubl.txt theme={null} {% module "my_text" path="@hubspot/text" label="Enter text", value="Some TEXT that should be Uppercase", export_to_template_context=True %} {% unless widget_data.my_text.value is upper %} {{ widget_data.my_text.value|upper }} {% endunless %} ``` ```text resultados renderizados.txt theme={null} SOME TEXT THAT SHOULD BE UPPERCASE ``` ### within Comprueba si una variable está presente en una lista. ```text hubl.txt theme={null} {% set numbers = [1, 2, 3] %} {% if 2 is within numbers %} 2 is in the list! {% endif %} {% if 4 is within numbers %} 4 is in the list! {% endif %} ``` ```text resultados renderizados.txt theme={null} 2 is in the list! ``` # Etiquetas HubL del área de arrastrar y soltar Source: https://developers.hubspot.es/docs/cms/reference/hubl/tags/dnd-areas Las etiquetas HubL se utilizan para construir áreas de arrastrar y soltar que permiten a los desarrolladores crear secciones de páginas que admiten cambios de diseño, estilos y de contenido directamente dentro de los editores de contenido. [Las áreas de arrastrar y soltar](https://developers.hubspot.es/docs/cms/start-building/building-blocks/drag-and-drop/overview) permiten a los desarrolladores crear secciones de páginas y parciales globales que admiten cambios de diseño, estilo y contenido directamente en los editores de contenido. Consulta el [tutorial sobre crear un área de arrastrar y soltar](/docs/cms/start-building/building-blocks/drag-and-drop/tutorial) para una introducción a la configuración de las áreas de arrastrar y soltar. Las áreas de arrastrar y soltar se basan en una cuadricula responsiva de 12 columnas. Las etiquetas de arrastrar y soltar generan marcas con nombres de clase que designan columnas y filas. Tendrás que agregar una hoja de estilos para orientar esos nombres de clase.  Un ejemplo de estilos de diseño que podrías implementar se encuentra en la [plantilla de CMS de HubSpot](https://github.com/HubSpot/cms-theme-boilerplate/blob/main/src/css/objects/_layout.css). Tu hoja de estilo puede agregarse a la plantilla usando [`{{ require_css() }}`](/docs/cms/reference/hubl/tags/standard-tags#require-css). > [!WARNING] > > ### Nota: > > Las áreas de arrastrar y soltar no se pueden utilizar en [publicaciones de blog](/docs/cms/start-building/building-blocks/templates/blog) ni [plantillas de correo electrónico](https://developers.hubspot.es/docs/cms/start-building/building-blocks/templates/overview#email) en este momento. ## dnd\_area Un [área de arrastrar y soltar](https://developers.hubspot.es/docs/cms/start-building/building-blocks/drag-and-drop/overview) es un contenedor que hace que una parte de la página web sea editable en cuanto a su estructura, diseño y contenido. El cuerpo de una etiqueta`{% dnd_area %}` proporciona el contenido predeterminado del área de arrastrar y soltar. Los módulos en sí no pueden contener áreas de arrastrar y soltar. Para proporcionar a los creadores de contenido una interfaz para agregar contenido uniforme dentro de un módulo, utiliza en su lugar [campos y grupos repetibles](/docs/cms/reference/fields/module-theme-fields#repeaters). Una etiqueta `dnd_area` puede contener los siguientes parámetros: | Parámetro | Tipo | Descripción | | - | - | - | | `class` | Cadena | Una clase agregada al div envolvente de un dnd\_area | | `label` | Cadena | Se utiliza en el editor para etiquetar el área en la barra lateral. | ```text entrada.txt theme={null} {% dnd_area "unique_name", class="main" %} {% end_dnd_area %} ``` ```text salida.txt theme={null}
      ``` Las etiquetas `dnd_area` también pueden contener etiquetas `dnd_section`. > [!WARNING] > > ### Nota: > > Un creador de contenido puede cambiar la plantilla de una página por otra del mismo tipo, dependiendo de si tiene etiquetas [dnd\_area](/docs/cms/reference/hubl/tags/dnd-areas). > > * Las plantillas construidas con el editor de diseño visual de arrastrar y soltar pueden cambiarse por otras plantillas de arrastrar y soltar o plantillas codificadas con o sin etiquetas `dnd_area`. > * Las plantillas codificadas con etiquetas *dnd\_area* solo pueden cambiarse por otras plantillas codificadas con etiquetas `dnd_area`. > * Las plantillas codificadas sin etiquetas `dnd_area` solo pueden cambiarse por otras plantillas codificadas sin etiquetas `dnd_area`. ## dnd\_section Una [`{% dnd_section %}`](/docs/cms/start-building/building-blocks/sections/sections) es una fila de nivel superior, y debe estar anidada dentro de una etiqueta `{% dnd_area %}`. [Las secciones también pueden definirse como una plantilla](/docs/cms/start-building/building-blocks/sections/sections#section-templates) y luego [incluirse](/docs/cms/start-building/building-blocks/sections/sections#section-context) en una `dnd_area`, lo que las hace ideales para estructurar rápidamente una plantilla. Una etiqueta `dnd_section` puede contener los siguientes parámetros: | Parámetro | Tipo | Descripción | | - | - | - | | `background_color` | Dict | Un dict que permite especificar un [color de fondo](#background-color). También se puede proporcionar como una cadena de texto. | | `background_image` | Dict | Un dict que permite especificar una [imagen de fondo](#background-image). | | `background_linear_gradient` | Dict | Un dict que permite especificar un [fondo gradiente lineal](#background-linear-gradient). | | `full_width` | Booleano | Un booleano que determina si la sección está destinada a ser de ancho completo o limitada por un contenedor interior. | | `margin` | Dict | Un dict que permite especificar valores de margen en `cm`, `mm`, `Q`, `in`, `pc`, `pt`, `px`, `em`, `ex`, `ch`, `rem`, `lh`, `vw`, `vh`, `vmin`, `vmax` y `%`. Cuando no se proporciona ninguna unidad de medida, se aplica el valor predeterminado `px`. | | `max_width` | Entero | Un valor en píxeles que establece el ancho máximo del contenido en un dict de envoltura. | | `padding` | Dict | Un dict que permite especificar valores de relleno en `cm`, `mm`, `Q`, `in`, `pc`, `pt`, `px`, `em`, `ex`, `ch`, `rem`, `lh`, `vw`, `vh`, `vmin`, `vmax` y `%`. Cuando no se proporciona ninguna unidad de medida, se aplica el valor predeterminado `px`. | | `vertical_alignment` | Cadena | Alineación vertical del contenido secundario. Las opciones disponibles incluyen:
      • `TOP`
      • `MIDDLE`
      • `BOTTOM`
      | > [!WARNING] > > ### Nota: > > Solo puede utilizar un parámetro de fondo por etiqueta `dnd_section`. ```text entrada.txt theme={null} {% dnd_section background_image={ "backgroundPosition": "MIDDLE_CENTER", "backgroundSize": "cover", "imageUrl": "https://example.com/path/to/image.jpg" }, margin={ "top": 32, "bottom": 32 }, padding={ "top": "1em", "bottom": "1em", "left": "1em", "right": "1em" }, max_width=1200, vertical_alignment="MIDDLE" %} {% end_dnd_section %} ``` ```text salida.txt theme={null}
      ``` Las etiquetas `dnd_section` también pueden contener las siguientes etiquetas: * `dnd_column` * `dnd_module` ## dnd\_column Un [`{% dnd_column %}`](https://developers.hubspot.es/docs/cms/start-building/building-blocks/drag-and-drop/overview#column) es un bloque estructural vertical que ocupa una o más columnas de diseño definidas por su fila principal. Esta etiqueta HubL debe estar anidada dentro de una etiqueta`{% dnd_area %}`. Una etiqueta `dnd_column` puede contener los siguientes parámetros: | Parámetro | Tipo | Descripción | | - | - | - | | `background_color` | Dict | Un dict que permite especificar un [color de fondo](#background-color). | | `background_image` | Dict | Un dict que permite especificar una [imagen de fondo](#background-image). | | `background_linear_gradient` | Dict | Un dict que permite especificar un [fondo gradiente lineal](#background-linear-gradient). | | `margin` | Dict | Un dict que permite especificar valores de margen en `cm`, `mm`, `Q`, `in`, `pc`, `pt`, `px`, `em`, `ex`, `ch`, `rem`, `lh`, `vw`, `vh`, `vmin`, `vmax` y `%`. Cuando no se proporciona ninguna unidad de medida, se aplica el valor predeterminado `px`. | | `max_width` | Entero | Un valor en píxeles que establece el ancho máximo del contenido en un dict de envoltura. | | `padding` | Dict | Un dict que permite especificar valores de relleno en `cm`, `mm`, `Q`, `in`, `pc`, `pt`, `px`, `em`, `ex`, `ch`, `rem`, `lh`, `vw`, `vh`, `vmin`, `vmax` y `%`. Cuando no se proporciona ninguna unidad de medida, se aplica el valor predeterminado `px`. | | `vertical_alignment` | Cadena | Alineación vertical del contenido secundario. Las opciones disponibles incluyen:
      • `TOP`
      • `MIDDLE`
      • `BOTTOM`
      | > [!WARNING] > > ### Nota: > > Solo puedes utilizar un parámetro de fondo por etiqueta `dnd_column`. ```text entrada.txt theme={null} {% dnd_column offset=0, width=12, background_color={ r: 255, g: 0, b: 0, a: 1 }, margin={ "top": "1em", "bottom": "1em" }, %} {% end_dnd_column %} ``` ```text salida.txt theme={null}
      ``` Una etiqueta `dnd_column` también puede contener `dnd_row`. ## dnd\_row Una [`{% dnd_row %}`](https://developers.hubspot.es/docs/cms/start-building/building-blocks/drag-and-drop/overview#row) es un bloque estructural horizontal que crea una cuadricula de diseño anidada de 12 columnas en la que se pueden colocar columnas y módulos. Esta etiqueta HubL debe estar anidada dentro de una etiqueta`{% dnd_area %}`. Una etiqueta `dnd_row` puede incluir los siguientes parámetros: | Parámetro | Tipo | Descripción | | - | - | - | | `background_color` | Dict | Un dict que permite especificar un [color de fondo](#background-color). | | `background_image` | Dict | Un dict que permite especificar una [imagen de fondo](#background-image). | | `background_linear_gradient` | Dict | Un dict que permite especificar un [fondo gradiente lineal](#background-linear-gradient). | | `margin` | Dict | Un dict que permite especificar valores de margen en `cm`, `mm`, `Q`, `in`, `pc`, `pt`, `px`, `em`, `ex`, `ch`, `rem`, `lh`, `vw`, `vh`, `vmin`, `vmax` y `%`. Cuando no se proporciona ninguna unidad de medida, se aplica el valor predeterminado `px`. | | `max_width` | Entero | Un valor en píxeles que establece el ancho máximo del contenido en un dict de envoltura. | | `padding` | Dict | Un dict que permite especificar valores de relleno en `cm`, `mm`, `Q`, `in`, `pc`, `pt`, `px`, `em`, `ex`, `ch`, `rem`, `lh`, `vw`, `vh`, `vmin`, `vmax` y `%`. Cuando no se proporciona ninguna unidad de medida, se aplica el valor predeterminado `px`. | | `vertical_alignment` | Cadena | Alineación vertical del contenido secundario. Las opciones disponibles incluyen:
      • `TOP`
      • `MIDDLE`
      • `BOTTOM`
      | > [!WARNING] > > ### Nota: > > Solo puedes utilizar un parámetro de fondo por etiqueta `dnd_row`. ```text entrada.txt theme={null} {% dnd_row background_color={ r: 123, g: 123, b: 123, a: 1.0 }, margin={ "top": 20, "bottom": 200 }, padding={ "top": 20, "bottom": 200, "left": 20, "right": 20 } %} {% end_dnd_row %} ``` ```text salida.txt theme={null}
      ``` Las etiquetas dnd\_row también pueden contener las siguientes etiquetas: * `dnd_column` * `dnd_module` ## dnd\_module Un [`{% dnd_module %}`](https://developers.hubspot.es/docs/cms/start-building/building-blocks/drag-and-drop/overview#module) es un [módulo](https://developers.hubspot.es/docs/cms/start-building/building-blocks/modules/overview) envuelto dentro de un div donde se puede agregar diseño, estilos y contenido. El módulo se especifica haciendo referencia a su ruta, que puede ser un módulo predeterminado de HubSpot (usando el espacio de nombres `@hubspot/`), o módulos que hayas construido, especificando su ruta dentro del árbol de archivos del administrador de diseño Esta etiqueta HubL debe estar anidada dentro de una etiqueta`{% dnd_area %}`. Una etiqueta `dnd_module` puede contener los siguientes parámetros: | Parámetro | Tipo | Descripción | | - | - | - | | `path` | Cadena | La ruta a un módulo. | | `horizontal_alignment` | Cadena | El posicionamiento horizontal, admite:`LEFT`, `CENTER`, `RIGHT` | | `offset` | Entero | El desplazamiento desde 0 en la cuadrícula de 12 columnas. | | `width` | Entero | El número de columnas que ocupan la cuadrícula de 12 columnas. | | `flexbox_positioning` | Cadena | **Obsoleto, no utilizar.** En su lugar, utiliza `horizontal_alignment` junto con la fila o sección `vertical_alignment` . Valor de posición de Flexbox para el módulo. Admite una cadena que indica la posición vertical seguida de la horizontal:
      • `TOP_LEFT`
      • `TOP_CENTER`
      • `TOP_RIGHT`
      • `MIDDLE_LEFT`
      • `MIDDLE_CENTER`
      • `MIDDLE_RIGHT`
      • `BOTTOM_LEFT`
      • `BOTTOM_CENTER`
      • `BOTTOM_RIGHT`
      | > [!TIP] > > ¿Tienes un módulo antiguo cuyo nombre de campo coincide con uno de los parámetros de `dnd_module` anteriores? Puedes [pasar valores predeterminados a través de un parámetro de campos](/docs/cms/reference/modules/using-modules-in-templates#passing-fields-that-have-dnd-associated-parameters), como lo harías con un grupo de campos. ```text entrada.txt theme={null} {% dnd_module path="@hubspot/rich_text", offset=0, width=8, %} {% module_attribute "html" %}

      Hello, world!

      {% end_module_attribute %} {% end_dnd_module %} ``` ```text salida.txt theme={null}

      Hello, world!

      ``` ## Fondo Hay varias formas de establecer fondos en los elementos dnd de columna, sección y fila, [`background_image`](#background-image), [`background_linear_gradient`](#background-linear-gradient) y [`background_color`](#background-color). ### background\_color Las etiquetas dnd de columna, sección y fila admiten colores de fondo. Puedes establecer el color de fondo predeterminado para un elemento de arrastrar y soltar utilizando `background_color`. Este parámetro es un parámetro basado en una cadena y puede incluir los siguientes formatos indicados en el ejemplo siguiente. ```hubl theme={null} {% dnd_section %} // Hex Value (both 3 and 6 char length) {% dnd_column background_color="#F7F7F7" %} {% end_dnd_column %} {% dnd_column background_color="#FFF" %} {% end_dnd_column %} // Both RGB and RGBA {% dnd_column background_color="rgb(255,255,255)" %} {% end_dnd_column %} {% dnd_column background_color="rgba(0,0,0,.25)" %} {% end_dnd_column %} {% end_dnd_section %} ``` ### background\_linear\_gradient Los elementos dnd de columna, sección y fila admiten gradientes lineales de fondo. Puedes establecer un gradiente predeterminado utilizando el parámetro `background_linear_gradient`. El parámetro espera un dict. Actualmente solo admite dos paradas de color. | Parámetro | Tipo | Descripción | | - | - | - | | `direction` | Cadena | La dirección del gradiente.
      • `to bottom`
      • `to top`
      • `to left`
      • `to right`
      | | `colors` | matriz | Matriz de cadenas de color. Actualmente admite 2 valores, el inicial y el final. Los valores se proporcionan como cadenas, y se admiten los siguientes formatos:
      • `RGB`
      • `RGBA`
      • `3 char hex`
      • `6 char hex`
      • `8 char hex`
      | ```hubl theme={null} {% dnd_section background_linear_gradient={ "direction": "to bottom", "colors": [ "#1EB6C3", "#2A2859" ] } %} {% dnd_module path="@hubspot/rich_text" width="6" %} {% end_dnd_module %} {% end_dnd_section %} ``` ### background\_image Los elementos dnd de columna, sección y fila admiten imágenes de fondo. Puedes proporcionar una imagen de fondo predeterminada utilizando el parámetro `background_image` que espera un dict. | Clave | Tipo | Descripción | | - | - | - | | `backgroundPosition` | Cadena | La posición de fondo de la imagen. Admite una cadena que indica la posición vertical seguida de la horizontal.
      • `TOP_LEFT`
      • `TOP_CENTER`
      • `TOP_RIGHT`
      • `MIDDLE_LEFT`
      • `MIDDLE_CENTER`
      • `MIDDLE_RIGHT`
      • `BOTTOM_LEFT`
      • `BOTTOM_CENTER`
      • `BOTTOM_RIGHT`
      | | `backgroundSize` | Cadena | La propiedad de tamaño de fondo CSS utilizada para la imagen. Los valores admitidos son:
      • `cover`
      • `contain`
      • `auto`
      | | `imageUrl` | Cadena | URL absoluta de la imagen. | ```hubl theme={null} {% dnd_section background_image = { "backgroundPosition": "MIDDLE_CENTER", "backgroundSize": "cover", "imageUrl": "https://www.example.com/bg-image.jpg" }, %} {% dnd_module path="@hubspot/rich_text" width="6" %} {% end_dnd_module %} {% end_dnd_section %} ``` ## Cómo se trasladan los parámetros de estilo de dnd a la página Cuando utilizas parámetros basados en estilo, como los [fondos](#background), los márgenes o el relleno, los nombres de las clases se calculan automáticamente para las secciones, columnas, filas y módulos. Los valores de propiedad que has asignado se agregan a los nombres de clase creados automáticamente y el código CSS resultante se coloca antes de la etiqueta de cierre `` en la página en una etiqueta `
      dharmesh.jpeg

      " The Content Optimization System matches content with context to create a highly personalized, relevant and meaningful customer experience. "

      Dharmesh Shah, HubSpot
      ``` | Parámetro | Tipo | Descripción | | - | - | - | | `module_id` | Cadena | El ID del módulo que se renderizará. | | `path` | Cadena | La ruta del módulo que se renderizará. Incluye la barra inclinada para la ruta absoluta, de lo contrario la ruta es relativa a la plantilla. Consulta los módulos predeterminados de HubSpot con rutas correspondientes a sus etiquetas de HubL, como @hubspot/rich\_text, @hubspot/linked\_image, etc. | ## Marcadores de posición del editor Para mostrar el contenido del marcador de posición de un módulo en el editor, puedes añadir el contenido predeterminado a los campos del módulo o utilizar la etiqueta de HubL `editor_placeholder`. Esta etiqueta puede ser útil cuando el módulo no tiene o necesita contenido predeterminado, o bien para optimizar la construcción del módulo. ![module-placeholder-content](https://www.hubspot.es/hubfs/Knowledge_Base_2023_2024/editor-placeholder-appearance-example-2.png) Para agregar un marcador de posición del editor a un módulo personalizado, añade primero una [instrucción "if"](/docs/cms/reference/hubl/if-statements) al HTML del módulo para que muestre el marcador de posición cuando no haya contenido seleccionado en el editor. Por ejemplo, el siguiente código podría utilizarse para agregar un marcador de posición del editor a un módulo CTA: ```hubl theme={null} {% if module.label %} {% cta guid="{{ module.guid }}" label="my_cta" %} {% elif is_in_editor %} {% editor_placeholder %} {% endif %} ``` > [!NOTE] > > La primera instrucción `if` identifica si el módulo está presente. Luego, la > instrucción `elif` identifica si el módulo se renderiza en el contexto del > editor utilizando la variable `is_in_editor`. Esta variable devuelve `true` si > el contenido se está renderizando en cualquier editor de contenidos, pero > puedes especificar aún más con las variables del [editor y la vista previa > ](/docs/cms/reference/hubl/variables#in-app-editor-and-preview-variables). Luego, define el contenido del marcador de posición en el archivo `meta.json` del módulo. ```json theme={null} { "global": false, "host_template_types": ["PAGE"], "module_id": 62170380654, "is_available_for_new_content": true, "placeholder": { "show_module_icon": true, "title": "Call to action", "description": "Select a CTA" } } ``` | Parámetro | Tipo | Descripción | | - | - | - | | `show_module_icon` | Booleano | Determina si se debe mostrar el ícono del módulo. | | `title` | Cadena | El título que aparece en el marcador de posición. | | `description` | Cadena | La descripción que aparece en el marcador de posición. | ## Columna flexible Las columnas flexibles son columnas verticales en una plantilla que permiten a los creadores de contenido insertar y eliminar módulos en la página utilizando el [editor de contenido](https://knowledge.hubspot.com/es/website-pages/edit-page-content-in-a-drag-and-drop-area). Al codificar una columna flexible con HubL, puedes elegir otros módulos de HubL para que aparezcan en la columna flexible por opción predeterminada. El código de ejemplo que aparece a continuación muestra la sintaxis básica y una columna flexible de ejemplo con un módulo de texto enriquecido y un formulario como contenido predeterminado. Ten en cuenta que las columnas flexibles solo pueden agregarse a las plantillas de página, pero no a las plantillas de blog o de correo electrónico. Los módulos no pueden contener columnas flexibles, pero pueden contener [campos y grupos repetibles](/docs/cms/reference/fields/module-theme-fields#repeaters), lo que proporciona una funcionalidad similar. ```text input.txt theme={null} {% widget_container "my_flexible_column" label="My flex column"%} {% module "rich_text" path="@hubspot/rich_text" %} {% module "linked_image" path="@hubspot/linked_image" %} {% end_widget_container %} ``` ```text output.txt theme={null}

      Something Powerful

      Tell The Reader More

      The headline and subheader tells us what you're offering, and the form header closes the deal. Over here you can explain why your offer is so great it's worth filling out a form for.

      Remember:

      • Bullets are great
      • For spelling out benefits and
      • Turning visitors into leads.
      placeholder_200x200
      ``` > [!WARNING] > > ### Nota: > > Cuando uses esta etiqueta, la `label` debe seguir el valor `name` de la columna flexible para funcionar en el editor de contenido. Por ejemplo, la siguiente sintaxis no es válida: > > `[% widget_container label="My label" "my_flexible_column" %}` ## Formulario Permite a los usuarios seleccionar un formulario de HubSpot para agregarlo a su página. El siguiente código incluye un ejemplo de uso de la sintaxis estándar de etiquetas HubL y un ejemplo de uso de [la sintaxis de bloques](/docs/cms/reference/modules/using-modules-in-templates#block-syntax). ```text input.txt theme={null} {% form "my_form" form_to_use="{formID}", title="Free Trial" %} {% module_block form "my_form" form_follow_ups_follow_up_type="", form_to_use="9e633e9f-0634-498e-917c-f01e355e83c6", title="Free Trial", notifications_are_overridden=True, response_message="Thanks for submitting the form.", response_type="inline", overrideable=True, gotowebinar_webinar_key="", webinar_id="", webinar_source"", label="Form" %} {% module_attribute "notifications_override_email_addresses" is_json=True %} ["email_address@website.com"] {% end_module_attribute %} {% end_module_block %} ``` ```text output.txt theme={null}

      Free Trial

      ``` | Parámetro | Tipo | Descripción | | - | - | - | | `form_key` | Cadena | Especifica un ID único para el formulario a nivel de página. | | `form_to_use` | Cadena | Especifica qué formulario cargar de forma predeterminada, basándose en el ID del formulario. Este ID está disponible en la URL del editor de formularios de cada formulario. | | `title` | Cadena | Rellena una etiqueta `h3` en el encabezado del formulario. | | `no_title` | Booleano | Si es `True`, se elimina la etiqueta h3 que está encima del título. | | `form_follow_ups_follow_up_type` | Enumeración | Especifica las acciones de seguimiento, como inscribir a un contacto en un workflow o enviar un correo de seguimiento simple. Los valores posibles son `no_action`, `simple` y `automation`. | | `simple_email_for_live_id` | Número | Especifica el ID del correo de seguimiento simple para la página publicada. | | `simple_email_for_buffer_id` | Número | Especifica el ID del correo de seguimiento simple para la versión de guardado automático de una página. | | `follow_up_type_simple` | Booleano | Si es "True", permite un correo de seguimiento simple. Alternativa de `form_follow_ups_follow_up_type`. | | `follow_up_type_automation` | Booleano | Si es "True", inscribe los envíos de formularios en un workflow. Alternativa de `form_follow_ups_follow_up_type`. | | `simple_email_campaign_id` | Número | Especifica el ID del correo de seguimiento simple. Alternativa de `simple_email_for_live_id`. | | `form_follow_ups_workflow_id` | Número | Especifica el ID del workflow en el que se inscriben los envíos de formularios. | | `response_redirect_url` | Cadena | Si se redirecciona a una página externa, este parámetro especifica la URL a la que se debe redireccionar. | | `response_redirect_id` | Número | Si se redirecciona a una página alojada en HubSpot, este parámetro especifica el ID de la página. El ID de la página está disponible en la URL del editor de páginas de cada página. | | `response_response_type` | Enumeración | Determina si se redirecciona a otra página o si se muestra un mensaje de agradecimiento en línea cuando se envía el formulario. El valor de este parámetro debe ser `"redirect"` o `"inline"` (predeterminado). | | `response_message` | Cadena | Establece un mensaje de agradecimiento en línea. Este parámetro es compatible con HTML. | | `notifications_are_overridden` | Booleano | Si es `True`, el formulario enviará notificaciones a las direcciones de correo electrónico seleccionadas en el parámetro `notifications_override_email_addresses`, en lugar de a los valores predeterminados del formulario. Por opción predeterminada es `False`. | | `notifications_override_guid_buffer` | Cadena | ID de la configuración de anulación en la versión de autoguardado de la página. | | `notifications_override_guid` | Cadena | ID de la configuración de anulación en la versión publicada de la página. | | `notifications_override_email_addresses` | JSON | La sintaxis de bloques admite una lista JSON de destinatarios de correo electrónico que serán notificados al enviar los formularios. Estas direcciones de correo electrónico anulan la configuración de notificación por correo electrónico establecida en el formulario. | | `sfdc_campaign` | Cadena | Especifica la campaña de Salesforce en la que se inscribirán los contactos que envíen el formulario. El valor de este parámetro debe ser el ID de la campaña de SFDC y solo está disponible para los portales que tienen la [integración con Salesforce](https://knowledge.hubspot.com/es/salesforce/install-the-hubspot-salesforce-integration). | | `gotowebinar_webinar_key` | Cadena | Especifica el webinario de GoToWebinar en el que se inscribirán los contactos tras enviar el formulario. Solo disponible para las cuentas que utilizan la [integración de GoToWebinar](https://knowledge.hubspot.com/es/integrations/use-the-gotowebinar-integration-with-hubspot). | | `webinar_id` | Cadena | Un campo más genérico que especifica el ID del webinario de Microsoft Teams o GoToWebinar en el que inscribir a los contactos tras enviar el formulario. Solo disponible en cuentas que utilicen las integraciones [GoToWebinar](https://knowledge.hubspot.com/es/integrations/use-the-gotowebinar-integration-with-hubspot) o [Microsoft Teams](https://knowledge.hubspot.com/es/integrations/connect-hubspot-and-microsoft-teams), y cuando `support_all_webinar_types` esté configurado como `true` en la [definición de campos de formulario](/docs/cms/reference/fields/module-theme-fields#form). | | `webinar_source` | Cadena | El ID de la app de integración, ya sea GoToWebinar (`35161`) o Microsoft Teams (`221635`). | ## Pie de página Presenta la información de derechos de autor con el año y el nombre de la empresa especificados en la [configuración de correos de marketing](https://knowledge.hubspot.com/es/marketing-email/edit-email-footer-addresses#edit-your-default-email-footer-information-in-your-settings) de la cuenta. ```text input.txt theme={null} {% page_footer "page_footer" %} ``` ```text output.txt theme={null}
      © 2020 HubSpot
      ``` ## Galería Genera una etiqueta de galería de HubSpot. Esta etiqueta de la galería está basada en [Slick](http://kenwheeler.github.io/slick/). Mientras que puedes crear un módulo de galería con la sintaxis estándar de HubL, si quieres predefinir diapositivas predeterminadas usando HubL, debes usar la sintaxis de bloques. A continuación se muestran ambos métodos. Las imágenes de la galería se cargan de forma diferida mediante JavaScript. ```text input.txt theme={null} {% gallery "crm_gallery" %} <-- Block syntax --> {% widget_block gallery "Gallery" display_mode="standard" sizing="static", transition="slide", caption_position="below", auto_advance=True, overrideable=True, description_text="", show_pagination=True, label="Gallery", loop_slides=True, num_seconds=5 %} {% widget_attribute "slides" is_json=True %} [{ "caption": "CRM Contacts App", "show_caption": true, "link_url": "http://www.hubspot.com/crm", "alt_text": "Screenshot of CRM Contacts", "img_src": "http://go.hubspot.com/hubfs/Contacts-View-1.png?t=1430860504240", "open_in_new_tab": true }, { "caption": "HubSpot CRM Contact Profile", "show_caption": true, "link_url": "http://www.hubspot.com/", "alt_text": "HubSpot CRM Contact Profile", "img_src": "http://cdn2.hubspot.net/hubfs/53/Contact-Profile.png?t=1430860504240", "open_in_new_tab": true }] {% end_widget_attribute %} {% end_widget_block %} ``` ```text output.txt theme={null} ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `slides` | JSON | Una lista JSON con el título predeterminado, la URL del enlace, el texto alt, el src de la imagen y si se abre en una nueva pestaña o no. Consulta la sintaxis de bloques anterior. | | | `loop_slides` | Booleano | Cuando es "True", muestra las diapositivas en un bucle continuo. | `True` | | `num_seconds` | Número | Tiempo en segundos de pausa entre diapositivas. | `5` | | `show_pagination` | Booleano | Proporciona botones debajo del deslizador para navegar entre las diapositivas. | `True` | | `sizing` | Enumeración | Determina si el deslizador cambia de tamaño según la altura de las diapositivas. Los valores posibles son: "static" o "resize". | `"static"` | | `auto_advance` | Booleano | Avanza automáticamente las diapositivas después del tiempo establecido en num\_seconds. | `False` | | `transition` | Enumeración | Define el tipo de transición de las diapositivas. Los valores posibles son: "fade" o "slide". | `"slide"` | | `caption_position` | Enumeración | Modifica la posición de los subtítulos en la parte superior o inferior de la diapositiva. Los valores posibles son "below" o "superimpose". | `"below"` | | `display_mode` | Enumeración | Determina cómo se mostrará la galería de imágenes. Los valores posibles son: "standard", "lightbox", "thumbnail". | `"standard"` | | `lightboxRows` | Número | Si "display\_mode" se define como "lightbox", este parámetro controlará el número de filas mostradas dentro del lightbox. | `3` | ## Encabezado Genera un módulo de encabezado que mostrará el texto como una etiqueta h1 a h6. ```text input.txt theme={null} {% header "header" %} {% header "my_header" header_tag="h1", overrideable=True, value="A clear and bold header", label="Header" %} ``` ```text output.txt theme={null}

      A clear and bold header

      ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `header_tag` | Cadena | Selecciona la etiqueta de encabezado que se va a renderizar. Los valores posibles son: h1, h2, h3, h4, h5, h6. | `h1` | | `value` | Cadena | Representa el texto predeterminado dentro del módulo del encabezado. | `"A clear bold header"` | ## Ícono Agrega una etiqueta de ícono que permite a los usuarios seleccionar un ícono para usarlo. Los conjuntos de íconos compatibles son FontAwesome [5.0.10](https://github.com/FortAwesome/Font-Awesome/releases/tag/5.0.10), [5.14.0](https://github.com/FortAwesome/Font-Awesome/releases/tag/5.14.0) y [6.4.2](https://github.com/FortAwesome/Font-Awesome/releases/tag/6.4.2). Esta etiqueta no puede utilizarse en los módulos habilitados para correo electrónico. ```text input.txt theme={null} {% icon name="Accessible Icon" style="REGULAR" unicode="f368" icon_set="fontawesome-5.14.0" purpose="decorative" title="Accessible Icon" %} ``` ```text output.txt theme={null} ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `name` | Cadena | Nombre del ícono. | | | `style` | Cadena | Estilo del ícono. Valores posibles: `REGULAR` o `SOLID` | `REGULAR` | | `unicode` | Cadena | La representación en caracteres Unicode del ícono. | | | `icon_set` | Cadena | El conjunto de íconos de FontAwesome que se va a utilizar. Los valores posibles son:
      • `fontawesome-5.14.0`
      • `fontawesome-5.0.10`
      • `fontawesome-6.4.2`
      | | | `purpose` | Cadena | El propósito del ícono, utilizado para la [accesibilidad](https://docs.fontawesome.com/v5/web/other-topics/accessibility). Los valores posibles son `decorative` o `semantic`. Si se define como `decorative`, se agregará un atributo adicional de `aria-hidden="true"` al ícono. | `decorative` | | `title` | Cadena | El elemento de título del svg del ícono, junto con un atributo `labelledby` que apunta al título. | | ## Imagen Crea una etiqueta de imagen que permite a los usuarios seleccionar una imagen desde el editor de contenidos. Si quieres que la imagen se vincule a una URL de destino, debes usar linked\_image debajo. ```text input.txt theme={null} {% image "image" %} {% image "executive_image" label="Executive photo", alt="Photo of Brian Halligan", src="//cdn2.hubspot.net/hub/53/file-733888619-jpg/assets/hubspot.com/about/management/brian-home.jpg", width="300" %} ``` ```text output.txt theme={null} Photo of Brian Halligan ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `alt` | Cadena | Define el texto alternativo predeterminado para la imagen. | | | `src` | Cadena | Rellena el atributo src de la etiqueta img. | | | `width` | Número | Define el atributo de anchura de la etiqueta img. | `The width of the image` | | `height` | Número | Fija una altura mínima en un atributo de estilo de la etiqueta img **solo para las plantillas de correo**. | `The height of the image` | | `hspace` | Número | Define el atributo hspace de la etiqueta img. | | | `align` | Cadena | Define el atributo align de la etiqueta img. Los valores posibles son: izquierda (left), derecha (right) y centro (center). | | | `style` | Cadena | Agrega declaraciones de CSS en línea a la etiqueta img. Por ejemplo style="border:1px solid blue; margin:10px" | | | `loading` | Cadena | Controla el atributo de carga del elemento img. [Se utiliza para la carga diferida en el navegador.](/docs/cms/best-practices/testing-staging-performance/lazy-loading) | | ## Src de la imagen Un módulo src de la imagen crea un selector de imágenes en el editor de contenidos, pero en lugar de imprimir una etiqueta img, muestra la URL de la imagen. Esta etiqueta se usa generalmente con el parámetro `no_wrapper=True`, de modo que la imagen src se puede agregar al CSS en línea o a otros marcadores. Una alternativa al uso de esta etiqueta es utilizar el parámetro [`export_to_template_context`](/docs/cms/reference/modules/export-to-template-context). ```text input.txt theme={null} {% image_src "image_src" %} {% image_src "executve_image_src" src="//cdn2.hubspot.net/hub/53/file-733888614-jpg/assets/hubspot.com/about/management/dharmesh-home.jpg", no_wrapper=True %} ``` ```text output.txt theme={null} //cdn2.hubspot.net/hub/53/file-733888614-jpg/assets/hubspot.com/about/management/dharmesh-home.jpg ``` | Parámetro | Tipo | Descripción | | - | - | - | | `src` | Cadena | Especifica el src de la imagen de la URL predeterminada. | ## Selector de idiomas Agrega un ícono de globo con enlaces a las versiones traducidas de una determinada página del CMS. Más información sobre los [contenidos multilingües aquí](https://knowledge.hubspot.com/es/website-and-landing-pages/create-pages-in-multiple-languages). ```text input.txt theme={null} {% language_switcher "language_switcher" overrideable=false, display_mode="localized", label="Language Switcher" %} ``` ```text output.txt theme={null} ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `display_mode` | Enumeración | El idioma del texto en el selector de idiomas. Los valores son:
      • `Pagelang` significa que el nombre de los idiomas se mostrará en el idioma de la página en la que se está el selector.
      • `Localized` significa que el nombre de cada idioma aparecerá en ese idioma.
      • `Hybrid` es una combinación de ambas opciones.
      | `Localized` | ## Imagen enlazada Genera una imagen seleccionable por el usuario dentro de un enlace. Esta etiqueta tiene todos los parámetros de un módulo de imagen con dos parámetros adicionales que especifican la URL de destino del enlace y si el enlace se abre en una nueva ventana. ```text input.txt theme={null} {% linked_image "linked_image" %} {% linked_image "executive_image" label="Executive photo", link="https://twitter.com/bhalligan", \ open_in_new_tab=True, alt="Photo of Brian Halligan", src="//cdn2.hubspot.net/hub/53/file-733888619-jpg/assets/hubspot.com/about/management/brian-home.jpg", width="300" %} ``` ```text output.txt theme={null} Photo of Brian Halligan ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `alt` | Cadena | Define el texto alternativo predeterminado para la imagen. | | | `src` | Cadena | Rellena el atributo src de la etiqueta img. | | | `width` | Número | Define el atributo de anchura de la etiqueta img. | `The width of the image` | | `height` | Número | Fija una altura mínima en un atributo de estilo de la etiqueta img solo para **las plantillas de correo.** | `The height of the image` | | `hspace` | Número | Define el atributo hspace de la etiqueta img. | | | `align` | Cadena | Define el atributo align de la etiqueta img. Los valores posibles son: izquierda (left), derecha (right) y centro (center). | | | `style` | Cadena | Agrega declaraciones de CSS en línea a la etiqueta img. Por ejemplo style="border:1px solid blue; margin:10px" | | | `open_in_new_tab` | Booleano | Selecciona si se abre o no la URL de destino en otra pestaña. | `False` | | `link` | Cadena | Define la URL de destino del enlace que envuelve la etiqueta img. | | | `target` | Cadena | Define el atributo de destino de la etiqueta del enlace. | | | `loading` | Cadena | Controla el atributo de carga del elemento img. [Se utiliza para la carga diferida en el navegador.](/docs/cms/best-practices/testing-staging-performance/lazy-loading) | | ## Logotipo Una etiqueta de logotipo muestra el logotipo de tu empresa desde la [configuración del kit de marca](https://knowledge.hubspot.com/es/branding/edit-your-logo-favicon-and-brand-colors#edit-your-logo) de la cuenta. ```text input.txt theme={null} {% logo "logo" %} {% logo "my_logo" width="200" %} ``` ```text output.txt theme={null} ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `alt` | Cadena | Define el texto alternativo predeterminado para la imagen. | `Value in brand kit settings` | | `src` | Cadena | Rellena el atributo src de la etiqueta img. | `Value in brand kit settings` | | `link` | Cadena | Define la URL de destino del enlace que envuelve la etiqueta img. | | | `width` | Número | Define el atributo de anchura de la etiqueta img. | `The width of the image` | | `height` | Número | Fija una altura mínima en un atributo de estilo de la etiqueta img solo para **las plantillas de correo.** | `The height of the image` | | `hspace` | Número | Define el atributo hspace de la etiqueta `img`. | | | `align` | Cadena | Define el atributo align de la etiqueta `img`. Los valores posibles son `left`, `right` y `center`. | | | `style` | Cadena | Agrega declaraciones de CSS en línea a la etiqueta img. Por ejemplo:`style="border:1px solid blue; margin:10px"` | | | `suppress_company_name` | Booleano | Oculta el nombre de la empresa si no se elige un logotipo de imagen. | `False` | | `use_account_default` | Booleano | Se establece como `true` para utilizar el nombre de la empresa desde la configuración predeterminada de la cuenta. | `False` | | `open_in_new_tab` | Booleano | Selecciona si se abre o no la URL de destino en otra pestaña. | `False` | | `override_inherited_src` | Booleano | Cuando se define como `true`, utiliza el src del widget del logotipo en lugar del src heredado de la configuración o de la plantilla. | `True` | | `heading_level` | Cadena | Cuando se utilizan logotipos basados en texto no enlazados, se envuelve el logotipo basado en texto en una de las siguientes opciones disponibles como etiqueta HTML: `h1`, `h2`, `h3`, `h4`. | `h1` | | `loading` | Cadena | Controla el atributo de carga del elemento img de [la carga diferida en el navegador.](/docs/cms/best-practices/testing-staging-performance/lazy-loading) | | ## Menú Genera un menú avanzado basado en un árbol de menús en **Configuración de contenido > Menús avanzados.** Consulta los [menús y la navegación](/docs/cms/start-building/building-blocks/modules/menus-and-navigation) para obtener más información sobre el uso de los menús en las [plantillas](https://developers.hubspot.es/docs/cms/start-building/building-blocks/templates/overview) y los [módulos](https://developers.hubspot.es/docs/cms/start-building/building-blocks/modules/overview). Si `id` se define como `null`, la etiqueta de menú mostrará el menú predeterminado de la cuenta de HubSpot. ```text input.txt theme={null} {% menu "menu" %} {% menu "my_menu" id=456, site_map_name="Default", overrideable=False, root_type="site_root", flyouts="true", max_levels="2", flow="horizontal", label="Advanced Menu" %} ``` ```text output.txt theme={null} ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `id` | Número | ID del árbol de menús desde los menús avanzados en la configuración de contenido. | | | `site_map_name` | Cadena | Nombre del árbol de menús de los menús avanzados en la configuración del contenido. | `"default"` | | `root_type` | Enumeración | Especifica el tipo de menús avanzados. Las opciones son: "site\_root", "top\_parent", "parent", "page\_name", "page\_id", y "breadcrumb". Estos valores corresponden a estático, dinámico por sección, dinámico por página y breadcrumb. | `"site_root"` | | `flyouts` | Cadena | Cuando es "True", se agrega una clase al árbol de menús que se puede adaptar para permitir que los elementos del menú secundario aparezcan cuando se coloca el cursor encima del menú principal. Si es "False", los elementos del menú secundario aparecerán siempre. | `"true"` | | `max_levels` | Número | Determina el número de niveles de menús anidados que se muestran en el marcado. Este parámetro define cuántas opciones secundarias del árbol de menú se pueden expandir dentro del menú. | `2` | | `flow` | Enumeración | Define la orientación de los elementos del menú. Esto agrega clases al árbol de menú para que puedan aplicarse estilos personalizados. Los valores posibles son "horizontal", "vertical" or "vertical\_flyouts". Los menús horizontales muestran los elementos de lado a lado, y los menús verticales los muestran de arriba hacia abajo. | `"horizontal"` | | `root_key` | Cadena | Se utiliza para encontrar la raíz del menú. Cuando root\_type se define como page\_id o page\_name, este parámetro debe ser el ID de la página o la etiqueta de la página, respectivamente. | `"horizontal"` | | `label` | Cadena | Contenido enriquecido para describir esta entidad | `False` | | `label` | Cadena | Contenido enriquecido para describir esta entidad | `False` | ## Require\_css Una etiqueta HubL que pone en cola un elemento de estilo para ser representado en el ``. Esta etiqueta es similar a la [require\_css función ](/docs/cms/reference/hubl/functions#require-css), excepto que esta etiqueta inserta el estilo en línea en lugar de hacerlo desde una hoja de estilo. Esta etiqueta tampoco se desduplica con otras instancias del CSS en la misma página. Si estás creando un módulo y quieres insertar una hoja de estilos, pero planeas usar ese módulo varias veces en una misma página, es posible que prefieras utilizar la función `require_css`. ```text input.txt theme={null} {{ standard_header_includes }} {% require_css %} {% end_require_css %} {{ standard_footer_includes }} ``` ```text output.txt theme={null} ``` ## Require\_head Una etiqueta HubL que pone en cola todo lo que se coloca dentro de ella en el `standard_header_includes`, que se encuentra en el `` de la plantilla. Para la mayoría de Javascript y CSS, consulta `require_js` y `require_css`. Algunos casos de uso de `require_head` incluyen el suministro de metaetiquetas y etiquetas de enlace especiales (como prefetch y preconnect) de los módulos. ```hubl theme={null} {% require_head %} {% end_require_head %} ``` ## Require\_js Una etiqueta HubL que pone en cola un elemento de script para ser renderizado. Para poner en cola un script para renderizarlo en el ``desde un archivo diferente a través de un elemento ` {% end_require_js %} {{ standard_footer_includes }} ``` ```text output.txt theme={null} ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `position` | Cadena | Establece la posición en la que se renderizará el script en línea. Las opciones incluyen: `"head"` y `"footer"`. | `"footer"` | ## Texto enriquecido Crea un editor de contenidos WYSIWYG. ```text input.txt theme={null} {% rich_text "rich_text" %} {% rich_text "left_column" label="Enter HTML here" html="
      My rich text default content
      " %} Block Syntax Example: {% widget_block rich_text "right_column" overrideable=True, label="Right Column" %} {% widget_attribute "html" %}

      Something Powerful

      Tell The Reader More

      The headline and subheader tells us what you're offering, and the form header closes the deal. Over here you can explain why your offer is so great it's worth filling out a form for.

      Remember:

      • Bullets are great
      • For spelling out benefits and
      • Turning visitors into leads.
      {% end_widget_attribute %} {% end_widget_block %} ``` ```text output.txt theme={null}

      Something Powerful

      Tell The Reader More

      The headline and subheader tells us what you're offering, and the form header closes the deal. Over here you can explain why your offer is so great it's worth filling out a form for.

      Remember:

      • Bullets are great
      • For spelling out benefits and
      • Turning visitors into leads.
      ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `html` | Cadena | Contenido de texto enriquecido predeterminado para el módulo. | `

      Something Powerful

      Tell The Reader More

      The headline and subheader tells us what you're offering, and the form header closes the deal. Over here you can explain why your offer is so great it's worth filling out a form for.

      Remember:

      • Bullets are great
      • For spelling out [benefits](#) and
      • Turning visitors into leads.
      ` | ## Listado de RSS Carga una lista de contenidos desde un canal RSS interno o externo. > [!WARNING] > > ### Nota: > > Este módulo se carga de forma asíncrona en el lado del cliente. Como resultado, si quieres modificar la sección de publicaciones después de que se haya cargado, tendrás que definir una función JS global para manejar esa manipulación. Utiliza la función `hsRssFeedComplete(feeds)`, donde `feeds` es el selector de jQuery de todos los listados de publicaciones que se han completado. Puedes modificar directamente el objeto DOM en esa función. ```text input.txt theme={null} {% rss_listing "rss_listing" %} {% rss_listing "my_rss_listing" rss_url="", publish_date_text="posted at", feed_source={rss_url="", is_external=False, content_group_id="30808594297"}, click_through_text="Read more", show_date=True, include_featured_image=True, overrideable=False, publish_date_format="short", show_detail=True, show_author=True, number_of_items="3", is_external=False, title="", content_group_id="24732847", label="RSS Listing", limit_to_chars="200", attribution_text="by" %} ``` ```text output.txt theme={null}

      How to Write Cron Jobs in HubSpot to take Time Based Action on CRM Data

      First things first: Cron jobs are scripts that get executed based on time. Understanding where this shorthand name comes from may help you remember this: Read more

      Using OpenAI Embeddings API to implement Semantic Search into a HubSpot Workflow

      This article was authored by a member of the HubSpot developer community, Roman Kozak. Read more

      How to Use NPM Packages in Custom Code Workflow Actions

      This article was authored by a member of the HubSpot developer community, Joshua Beatty. Read more

      ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `show_title` | Booleano | Muestra u oculta el título del listado de publicaciones RSS. | `True` | | `show_date` | Booleano | Muestra la fecha de la publicación. | `True` | | `show_author` | Booleano | Muestra el nombre del autor. | `True` | | `show_detail` | Booleano | Muestra el resumen de la publicación hasta el número de caracteres fijado por el parámetro `limit_to_chars`. | `True` | | `title` | Cadena | Rellena el encabezado del listado de publicaciones RSS. | | | `limit_to_chars` | Número | Número máximo de caracteres que se mostrarán en el resumen. | `200` | | `publish_date_format` | Cadena | Formato de la fecha de publicación. Los valores posibles son `"short"`, `"medium"` y `"long"`. También acepta formatos personalizados, como `"MMMM d, yyyy 'at' h:mm a"`. | `"short"` | | `attribution_text` | Cadena | El texto que atribuye un autor a una publicación. | `"by"` | | `click_through_text` | Cadena | El texto que se mostrará como enlace de redirección al final del resumen de una publicación. | `"Read more"` | | `publish_date_text` | Cadena | El texto que indica cuándo se publicó una entrada de blog. | `"posted at"` | | `include_featured_image` | Booleano | Muestra una imagen destacada con el enlace de la publicación para los listados de publicaciones RSS generados por HubSpot. | `False` | | `item_title_tag` | Cadena | Especifica la etiqueta HTML del título de cada publicación. | `span` | | `is_external` | Booleano | El listado de publicaciones RSS es de un blog externo. | `False` | | `number_of_items` | Número | Número máximo de publicaciones que se mostrarán. | `5` | | `publish_date_language` | Cadena | Especifica el idioma de la fecha de publicación. | `en_US` | | `rss_url` | Cadena | La URL donde se encuentra el listado de publicaciones RSS. | | | `content_group_id` | Cadena | ID del blog cuando la fuente del listado de publicaciones es un blog interno. | | | `select_blog` | Cadena | Se puede utilizar para seleccionar un listado de publicaciones del blog interno de HubSpot. | `default` | | `feed_source` | Cadena | Definir la fuente del listado de publicaciones RSS. Cuando es interno, el formato general es `{rss_url="", is_external=False, content_group_id="2502431580"}`. Cuando es externo, el formato general es `{rss_url="http://blog.hubspot.com/marketing/rss.xml", is_external=True}`. | | | `tag_id` | Número | ID de la etiqueta cuando la fuente del listado de publicaciones es un blog interno. | | ## Encabezado de la sección Genera un título html y un subtítulo `

      `. ```text input.txt theme={null} {% section_header "section_header" %} {% section_header "my_section_header" subheader="A more subdued subheader", header="A clear and bold header", label="Section Header" %} ``` ```text output.txt theme={null}

      ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `header` | Cadena | Texto para mostrar en el encabezado. | `"A clear and bold header"` | | `subheader` | Cadena | Texto para mostrar en el subtítulo. | `"A more subdued subheader"` | | `heading_level` | Cadena | Nivel de encabezado HTML semántico. Se admiten los niveles de h1 a h6. | `"h1"` | ## Menú simple Los menús simples permiten crear [menús de navegación](/docs/cms/start-building/building-blocks/modules/menus-and-navigation) básicos que pueden modificarse a nivel de página. A diferencia de los módulos de menú normales, los menús simples no se gestionan desde la pantalla de navegación en la configuración del sitio web, sino desde los editores de plantillas y páginas. Puedes utilizar la [sintaxis de bloques](/docs/cms/reference/modules/using-modules-in-templates#block-syntax) para configurar un árbol de menús predeterminado. ```text input.txt theme={null} {% simple_menu "simple_menu" %} {% simple_menu "my_simple_menu" orientation="horizontal", label="Simple Menu" %} Block Syntax Example: {% widget_block simple_menu "block_simple_menu" overrideable=True, orientation="horizontal", label="Simple Menu" %} {% widget_attribute "menu_tree" is_json=True %}[{"contentType": null, "subCategory": null, "pageLinkName": null, "pageLinkId": null, "isPublished": false, "categoryId": null, "linkParams": null, "linkLabel": "Home", "linkTarget": null, "linkUrl": "http://www.hubspot.com", "children": [], "isDeleted": false}, {"contentType": null, "subCategory": null, "pageLinkName": null, "pageLinkId": null, "isPublished": false, "categoryId": null, "linkParams": null, "linkLabel": "About", "linkTarget": null, "linkUrl": "http://www.hubspot.com/internet-marketing-company", "children": [{"contentType": null, "subCategory": null, "pageLinkName": null, "linkUrl": "http://www.hubspot.com/company/management", "isPublished": false, "children": [], "linkParams": null, "linkLabel": "Our Team", "linkTarget": null, "pageLinkId": null, "categoryId": null, "isDeleted": false}], "isDeleted": false}, {"contentType": null, "subCategory": null, "pageLinkName": null, "pageLinkId": null, "isPublished": false, "categoryId": null, "linkParams": null, "linkLabel": "Pricing", "linkTarget": null, "linkUrl": "http://www.hubspot.com/pricing", "children": [], "isDeleted": false}]{% end_widget_attribute %} {% end_widget_block %} ``` ```text output.txt theme={null}
        ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `orientation` | Enumeración | Define las clases de marcadores de menú para permitir adaptar la orientación de los elementos del menú en la página. Los valores posibles son `"horizontal"` y `"vertical"`. | `"horizontal"` | | `menu_tree` | JSON | Estructura del menú, incluidos los nombres de los enlaces de las páginas y las URL de destino. | `[]` | ## Compartir en redes sociales Las etiquetas de contenido compartido en redes sociales generan íconos de redes sociales que pueden utilizarse para compartir una página determinada. Este módulo se puede utilizar con la [sintaxis de bloques](/docs/cms/reference/modules/using-modules-in-templates#block-syntax) para personalizar las imágenes de los íconos y mucho más. ```text input.txt theme={null} {% social_sharing "social_sharing" %} {% social_sharing "my_social_sharing" use_page_url=True %} Block Syntax Example: {% widget_block social_sharing "my_social_sharing" label="Social Sharing", use_page_url=True, overrideable=True %} {% widget_attribute "pinterest" is_json=True %}{"custom_link_format": "", "pinterest_media": "http://cdn1.hubspot.com/hub/158015/305390_10100548508246879_837195_59275782_6882128_n.jpg", "enabled": true, "network": "pinterest", "img_src": "https://static.hubspot.com/final/img/common/icons/social/pinterest-24x24.png"}{% end_widget_attribute %} {% widget_attribute "twitter" is_json=True %}{"custom_link_format": "", "enabled": true, "network": "twitter", "img_src": "https://static.hubspot.com/final/img/common/icons/social/twitter-24x24.png"}{% end_widget_attribute %} {% widget_attribute "linkedin" is_json=True %}{"custom_link_format": "", "enabled": true, "network": "linkedin", "img_src": "https://static.hubspot.com/final/img/common/icons/social/linkedin-24x24.png"}{% end_widget_attribute %} {% widget_attribute "facebook" is_json=True %}{"custom_link_format": "", "enabled": true, "network": "facebook", "img_src": "https://static.hubspot.com/final/img/common/icons/social/facebook-24x24.png"}{% end_widget_attribute %} {% widget_attribute "email" is_json=True %}{"custom_link_format": "", "enabled": true, "network": "email", "img_src": "https://static.hubspot.com/final/img/common/icons/social/email-24x24.png"}{% end_widget_attribute %} {% end_widget_block %} ``` ```text output.txt theme={null} ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `use_page_url` | Booleano | Si es "True", el módulo comparte la URL de la página de forma predeterminada. | `True` | | `link` | Cadena | Especifica una URL diferente para compartirla, si `use_page_url` es "False". | | | `pinterest` | JSON | Parámetros para el formato del enlace de Pinterest y la fuente de la imagen del ícono. | `See block syntax example, above` | | `twitter` | JSON | Parámetros para el formato del enlace de Twitter y la fuente de la imagen del ícono. | `See block syntax example, above` | | `linked_in` | JSON | Parámetros para el formato del enlace de LinkedIn y la fuente de la imagen del ícono. | `See block syntax example, above` | | `facebook` | JSON | Parámetros para el formato del enlace de Facebook y la fuente de la imagen del ícono. | `See block syntax example, above` | | `email` | JSON | Parámetros para el formato del enlace para compartir el correo y la fuente de la imagen del ícono. | `See block syntax example, above` | ## Separador Una etiqueta espaciadora genera una etiqueta span vacía. Esta etiqueta se puede estilizar para actuar como espaciador. En los diseños de arrastrar y soltar, el módulo de espacio se encuentra dentro de un contenedor con una clase de span1 a span12, que determina cuánto espacio debe ocupar el módulo dentro de la cuadrícula responsiva de doce columnas. ```text input.txt theme={null} {% space "space" %} {% space "spacer" label="Horizontal Spacer" %} ``` ```text output.txt theme={null} ``` ## Etiquetas de la página del sistema Las siguientes etiquetas se pueden utilizar en las [páginas del sistema](https://developers.hubspot.es/docs/cms/start-building/building-blocks/templates/overview#system-pages), como las páginas de restablecimiento de contraseñas o de suscripción por correo electrónico. ### Copia de seguridad de cancelaciones de suscripción por correo electrónico La etiqueta de cancelación de suscripción con copia de seguridad se muestra a los destinatarios de correo electrónico si HubSpot no puede determinar su dirección de correo, cuando el destinatario intenta cancelar la suscripción. Esta etiqueta muestra un formulario para que el contacto ingrese su dirección de correo electrónico y cancele la suscripción de las comunicaciones por correo electrónico. Se debe utilizar en una [plantilla del sistema de respaldo de cancelación de la suscripción.](https://knowledge.hubspot.com/es/design-manager/use-system-templates-to-customize-error-subscription-and-password-prompt-pages) ```text input.txt theme={null} {% email_simple_subscription "email_simple_subscription" %} {% email_simple_subscription "email_simple_subscription" header="Email Unsubscribe", input_help_text="Your email address:", input_placeholder="email@example.com", button_text="Unsubscribe", label="Backup Unsubscribe" %} ``` ```text output.txt theme={null}

        Your email address:

        ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `header` | Cadena | Muestra el texto en una etiqueta h1 encima del formulario de cancelación de suscripción. | `"Email Unsubscribe"` | | `input_help_text` | Cadena | Muestra el texto de ayuda en una etiqueta h3 encima del campo del formulario de cancelación de suscripción a los correos. | `"Your email address:"` | | `input_placeholder` | Cadena | Agrega el texto de marcador de posición en el campo de dirección de correo electrónico. | `"email@example.com"` | | `button_text` | Cadena | Cambia el texto del botón de envío del formulario de cancelación de suscripción. | `"Unsubscribe"` | ### Suscripciones a correos Este módulo se muestra cuando un destinatario de correo electrónico va a editar sus preferencias de suscripción. Debe utilizarse en una [plantilla del sistema de preferencias de suscripción.](https://knowledge.hubspot.com/es/design-manager/use-system-templates-to-customize-error-subscription-and-password-prompt-pages) ```text input.txt theme={null} {% email_subscriptions "email_subscriptions" %} {% email_subscriptions "email_subscriptions" resubscribe_button_text="Yes, resubscribe me!", unsubscribe_single_text="Uncheck the types of emails you do not want to receive:", subheader_text="\n If this is not your email address, please ignore this page since the email associated with this page was most likely forwarded to you.\n", unsubscribe_all_unsubbed_text="You are presently unsubscribed from all of our emails. Would you like to receive our emails again?", button_text="Update email preferences", label="Subscription Preferences", header="Communication Preferences", unsubscribe_all_option="Unsubscribe me from all mailing lists.", unsubscribe_all_text="Or check here to never receive any emails:" %} ``` ```text output.txt theme={null}
        ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `header` | Cadena | Muestra el texto en una etiqueta h1 encima del formulario de preferencias de suscripción. | `"Communication Preferences"` | | `subheader_text` | Cadena | Introduce el texto debajo del encabezado y encima de las preferencias de cancelación de suscripción. | `"

        If this is not your email address, please ignore this page since the email associated with this page was most likely forwarded to you.

        "` | | `unsubscribe_single_text` | Cadena | Muestra el texto en un `

        ` encima de las opciones de suscripción. | `"Uncheck the types of emails you do not want to receive:"` | | `unsubscribe_all_text` | Cadena | Muestra el texto en un `

        ` encima de la entrada de la casilla de verificación para cancelar la suscripción a todos los correos electrónicos. | `"Or check here to never receive any emails:"` | | `unsubscribe_all_unsubbed_text` | Cadena | Introduce el texto dentro de un `

        ` que se muestra si la suscripción de un contacto está actualmente cancelada para todos los correos electrónicos. | `"You are presently unsubscribed from all of our emails. Would you like to receive our emails again?"` | | `unsubscribe_all_option` | Cadena | Define el texto que está junto a la entrada de la casilla de verificación de cancelación de suscripción a todos los correos electrónicos. | `"Unsubscribe me from all mailing lists."` | | `button_text` | Cadena | Define el texto del botón de envío que actualiza las preferencias de suscripción. | `"Update email preferences"` | | `resubscribe_button_text` | Cadena | Define el texto del botón de envío para cuando los contactos se vuelvan a suscribir. | `"Yes, resubscribe me!"` | ### Confirmación de suscripción a correos La actualización de confirmación de suscripción al correo electrónico es un módulo que puede agregarse a la plantilla de agradecimiento para cuando un destinatario actualiza sus preferencias de suscripción o las cancela. Debe utilizarse en una [plantilla del sistema de preferencias de suscripción.](https://knowledge.hubspot.com/es/design-manager/use-system-templates-to-customize-error-subscription-and-password-prompt-pages) ```text input.txt theme={null} {% email_subscriptions_confirmation "email_subscriptions_confirmation" %} {% email_subscriptions_confirmation "email_subscriptions_confirmation" label="Subscriptions Update Confirmation", unsubscribe_all_success="You have successfully unsubscribed from all email communications.", subscription_update_success="You have successfully updated your email preferences.", subheader_text="\n If this is not your email address, please ignore this page since the email associated with this page was most likely forwarded to you.\n" %} ``` ```text output.txt theme={null}

        You have successfully updated your email preferences.
        ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `header` | Cadena | Muestra el texto en una etiqueta h1 encima del formulario de cancelación de suscripción. | `"Communication Preferences"` | | `subheader_text` | Cadena | Muestra el texto encima del mensaje de confirmación. | `"

        If this is not your email address, please ignore this page since the email associated with this page was most likely forwarded to you.

        "` | | `unsubscribe_all_success` | Cadena | Define el texto que se mostrará cuando alguien cancele la suscripción a todas las comunicaciones por correo electrónico. | `"You have successfully unsubscribed from all email communications."` | | `subscription_update_success` | Cadena | Define el texto cuando un destinatario actualiza sus preferencias de suscripción. | `"You have successfully updated your email preferences."` | ### Inicio de sesión de membresías Crea un formulario de inicio de sesión para dar acceso a [contenido privado](https://knowledge.hubspot.com/es/website-pages/require-member-registration-to-access-private-content). ```text input.txt theme={null} {% member_login "my_login" %} {% member_login "my_login" email_label="Email", password_label="Password", remember_me_label="Remember Me", reset_password_text="Forgot your password?", submit_button_text="Login", show_password="Show password" %} ``` ```text output.txt theme={null} ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `email_label` | Cadena | La etiqueta para el campo del correo electrónico. | `"Email"` | | `password_label` | Cadena | La etiqueta para el campo de la contraseña. | `"Password"` | | `remember_me_label` | Cadena | La etiqueta de la casilla de verificación "Recordarme". | `"Remember Me"` | | `reset_password_text` | Cadena | El texto para el hipervínculo de cambio de contraseña. | `"Forgot your password?"` | | `submit_button_text` | Cadena | El texto para el botón de envío. | `"Login"` | | `show_password` | Cadena | El texto del enlace para revelar la contraseña. | `"Show password"` | ### Registro de membresías Crea un formulario de registro para acceder a [contenido privado](https://knowledge.hubspot.com/es/website-pages/require-member-registration-to-access-private-content). ```text input.txt theme={null} {% member_register "my_register" %} {% member_register "my_register" email_label="Email", password_label="Password", password_confirm_label="Confirm Password", submit_button_text="Save Password", show_password="Show password" %} ``` ```text output.txt theme={null}
        Show password
        Show password
        ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `email_label` | Cadena | La etiqueta para el campo del correo electrónico. | `"Email"` | | `password_label` | Cadena | La etiqueta para el campo de la contraseña. | `"Password"` | | `password_confirm_label` | Cadena | La etiqueta para el campo de confirmación de la contraseña. | `"Confirm Password"` | | `submit_button_text` | Cadena | El texto para el botón de envío. | `"Save Password"` | | `show_password` | Cadena | El texto del enlace para revelar la contraseña. | `"Show password"` | ### Solicitud de restablecimiento de contraseña Crea un formulario para enviar un correo electrónico de restablecimiento de contraseña para acceder a páginas protegidas por contraseña. ```text input.txt theme={null} {% password_reset_request "my_password_reset_request" %} {% password_reset_request "my_password_reset_request" email_label="Email", submit_button_text="Send Reset Email" %} ``` ```text output.txt theme={null}
        ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `email_label` | Cadena | La etiqueta para el campo del correo electrónico. | `"Email"` | | `submit_button_text` | Cadena | El texto para el botón de envío. | `"Send Reset Email"` | | `password_reset_message` | Cadena | El mensaje que aparece después de solicitar el correo de cambio de contraseña. | `False` | ### Restablecimiento de contraseña Renderiza un formulario de restablecimiento de contraseña para acceder a páginas protegidas por contraseña. ```text input.txt theme={null} {% password_reset "my_password_reset" password_label="Password", password_confirm_label="Confirm Password", submit_button_text="Save password", show_password="Show password" %} ``` ```text output.txt theme={null}
        ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `password_label` | Cadena | La etiqueta de texto para el campo de la contraseña. | `"Email"` | | `password_confirm_label` | Cadena | La etiqueta de texto para el campo de confirmación de contraseña. | `"Send Reset Email"` | | `submit_button_text` | Cadena | La etiqueta de texto para el botón de envío del formulario. | `False` | | `show_password` | Cadena | La etiqueta de texto del botón para mostrar el valor de la contraseña introducida. | `False` | | `password_requirements` | Cadena | La etiqueta de texto que describe los requisitos de la contraseña. | `False` | ### Solicitud de la contraseña Agrega un solicitud de contraseña a las páginas protegidas con contraseña. ```text input.txt theme={null} {% password_prompt "password_prompt" %} {% password_prompt "my_password_prompt" submit_button_text="Submit", bad_password_message="Sorry, please try again.\n", label="Password Prompt" %} ``` ```text output.txt theme={null}
        ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `submit_button_text` | Cadena | Etiqueta para el botón que está debajo del campo de la contraseña. | `"Submit"` | | `bad_password_message` | Cadena | Se muestra un mensaje si se introduce una contraseña incorrecta. | `"

        Sorry, please try again.

        "` | | `password_placeholder` | Cadena | Define el texto del marcador de posición dentro del campo de la contraseña. | `"Password"` | ## Texto Crea una sola línea de texto. Esta etiqueta puede ser útil para combinarse con el marcador cuando se utiliza junto con el parámetro `no_wrapper=True`. Por ejemplo, si quieres que los usuarios finales puedan definir el destino de un ancla predefinida, podrías rellenar el `href` con un módulo de texto con `no_wrapper=True`. ```text input.txt theme={null} {% text "text" %} {% text "simple_text_field" label="Enter text here", value="This is the default value for this text field" %} ``` ```text output.txt theme={null} This is the default value for this text field ``` | Parámetro | Tipo | Descripción | | - | - | - | | `value` | Cadena | Define el texto predeterminado del campo de texto de una línea. | ## Textarea Un textarea es similar a un módulo de texto ya que permite a los usuarios introducir texto sin formato, pero les da un área más grande para trabajar en el editor de contenidos. Este módulo no es compatible con HTML. Si quieres utilizarlo directamente dentro de una etiqueta de contenedor predefinida, agrega el parámetro `no_wrapper=true`. ```text input.txt theme={null} {% textarea "my_textarea" %} {% textarea "my_textarea" label="Enter plain text block", value="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean a urna quis lacus vehicula rutrum.", no_wrapper=True %} ``` ```text output.txt theme={null} Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean a urna quis lacus vehicula rutrum. ``` | Parámetro | Tipo | Descripción | | - | - | - | | `value` | Cadena | Define el texto predeterminado del textarea. | ## Reproductor de video Renderiza un reproductor de video para un archivo de video desde el administrador de archivos que tiene activa la opción *Permitir incrustar, compartir y rastrear*. **Input** ```hubl theme={null} {% video_player "embed_player" %} {% video_player "embed_player" overrideable=False, type="scriptV4", hide_playlist=True, viral_sharing=False, embed_button=False, width="600", height="375", player_id="6178121750", style="", conversion_asset="{"type":"FORM","id":"9a77c63f-bee6-4ff8-9202-b0af020ea4b2","position":"POST"}" %} ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `hide_playlist` | Booleano | Oculta la lista de reproducción de videos. | `True` | | `playlist_color` | Cadena | Un valor de color HEX para la lista de reproducción. | | | `play_button_color` | Cadena | Un valor de color HEX para los botones de reproducción y pausa. | `#2A2A2A` | | `embed_button` | Booleano | Muestra el botón de inserción en el reproductor | `False` | | `viral_sharing` | Booleano | Mostrar el botón para compartir en las redes sociales en el reproductor. | `False` | | `width` | Número | Anchura del reproductor de video insertado. | `Auto` | | `height` | Número | Altura del reproductor de video insertado. | `Auto` | | `player_id` | Número | El `player_id` del video que se insertará. | | | `style` | Cadena | Estilo adicional del reproductor. | | | `conversion_asset` | JSON | Configuración de eventos para el reproductor. Puede renderizar una CTA o un formulario antes o después de la reproducción del video. Este parámetro toma un objeto JSON con tres parámetros: tipo (FORM o CTA), id (El guid del tipo de objeto), posición (POST o PRE). | `See above example` | | `placeholder_alt_text` | Cadena | El texto alternativo del video. | | # Variables de HubL Source: https://developers.hubspot.es/docs/cms/reference/hubl/variables Las plantillas de HubSpot pueden utilizar un conjunto de variables predefinidas para mostrar elementos útiles en sitios web y correos electrónicos. Esta página es un listado de referencia de esas variables. Las plantillas de HubSpot pueden utilizar un conjunto de variables predefinidas para mostrar elementos útiles en sitios web y correos electrónicos. Esta página es un listado de referencia de esas variables. [Más información sobre cómo crear tus propias variables](/docs/cms/reference/hubl/variables-macros-syntax) en una [plantilla](/docs/cms/start-building/building-blocks/templates/html-hubl-templates) o [módulo de HubL](https://developers.hubspot.es/docs/cms/start-building/building-blocks/modules/overview). Mientras que la mayoría de las variables listadas en esta página son opcionales, hay algunas variables que son obligatorias, para poder crear correos electrónicos y páginas desde tus plantillas. > [!WARNING] > > Las variables listadas a continuación pueden ser utilizadas individualmente envolviéndolas en el delimitador `}}` como se indica en nuestra [página de variables y macros](/docs/cms/reference/hubl/variables-macros-syntax). De manera opcional puedes utilizar estas variables con otras partes del lenguaje de plantillas HubL, como [bucles](/docs/cms/reference/hubl/loops), [filtros](/docs/cms/reference/hubl/filters), [funciones](/docs/cms/reference/hubl/functions), [etiquetas](/docs/cms/reference/hubl/tags/standard-tags) y mucho más. ## Variables disponibles en todas las plantillas Las siguientes variables de HubL pueden utilizarse en plantillas de correo electrónico, página o blog. Para ver información adicional sobre lo que producen estas variables, puedes usar el [filtro pprint](/docs/cms/reference/hubl/filters#pprint), como se muestra a continuación. ```text input.txt theme={null} {% set variable = content %} {{variable|pprint}} ``` ```text output.txt theme={null} (ContentMeta: { "canonicalUrl" : "https://www.website.com/url-slug", "deferDynamicValues" : false, "featuredImageAltText" : "", "featuredImageHeight" : 0, "featuredImageUrl" : "", "featuredImageWidth" : 0, "htmlTitle" : "", "linkRelCanonicalUrl" : "https://www.website.com/url-slug", "metaDescription" : "", "metaKeywords" : "", "name" : "", "unescapedHtmlTitle" : "", "unescapedMetaDescription" : null }) ``` | Variable | Tipo | Descripción | | - | - | - | | `account` | Dicc. | Diccionario que almacena los [valores de propiedad de empresa](/docs/api-reference/crm-properties-v3/guide) de la [empresa principal asociada](https://knowledge.hubspot.com/es/records/associate-records#understand-the-primary-company-association) a un contacto conocido. Puedes acceder a propiedades de empresa específicas (tanto personalizadas como predeterminadas) a través de esta variable añadiendo un punto, seguido del nombre de la propiedad interna. Por ejemplo, `account.name` imprimiría el nombre de la empresa principal asociada al contacto. El uso de esta variable deshabilitará el almacenamiento en caché de la página. Más información sobre el [prerenderizado de las páginas y las alternativas de JavaScript](/docs/cms/best-practices/testing-staging-performance/prerendering). | | `company_domain` | Cadena | Imprime el dominio de la empresa desde **Sitio web** > **Páginas** > **Branding** > **Enlace del logotipo**. | | `contact` | Dicc. | Diccionario que almacena los [valores de las propiedades de contacto](/docs/api-reference/crm-properties-v3/guide) de un contacto conocido. Puedes acceder a propiedades de contacto específicas (tanto personalizadas como predeterminadas) a través de esta variable añadiendo un punto, seguido del nombre de la propiedad interna. Por ejemplo, `contact.firstname` imprimiría el nombre del contacto. El uso de esta variable deshabilitará el almacenamiento en caché de la página. Más información sobre el [prerenderizado de las páginas y las alternativas de JavaScript](/docs/cms/best-practices/testing-staging-performance/prerendering). | | `content` | Dicc. | Esta variable es un diccionario que almacena diversas propiedades relativas a un contenido específico, como un correo electrónico, una página o una publicación. | | `content.absolute_url` | Cadena | Imprime la URL completa de una página, publicación o versión de página web de un correo electrónico. | | `content.archived` | Booleano | Esta variable toma el valor `true`, si la página o el correo electrónico fue marcado como archivado por el usuario. | | `content.author_email` | Cadena | La dirección de correo electrónico del creador del contenido. | | `content.author_name` | Cadena | El nombre y el apellido del creador del contenido. | | `content.author_username` | Cadena | El nombre de usuario de HubSpot del creador del contenido. | | `content.campaign` | Cadena | El GUID de la campaña de marketing a la que está asociada esta página o correo electrónico. Este ID único puede encontrarse en la URL de una campaña específica en la herramienta de campañas. | | `content.campaign_name` | Cadena | El nombre de la campaña de marketing a la que está asociada esta página, esta publicación o este correo electrónico. | | `content.created` | Fecha y hora | Un objeto fecha y hora para cuando el contenido fue creado originalmente, en tiempo UTC. A esta variable se le puede dar formato con el [filtro datetime](/docs/cms/reference/hubl/filters#datetimeformat). | | `content.meta_description` | Cadena | Cuando se extrae la metadescripción de una página, es mejor utilizar la variable `page_meta.meta_description`. | | `content.name` | Cadena | El nombre de una publicación, correo electrónico o página. Para las páginas y los correos electrónicos se imprimirá el nombre del contenido interno, mientras que en el caso de las publicaciones se imprimirá el título del mismo. Para las publicaciones de blog, este es el título de la publicación que se muestra. Para otros tipos de contenido, generalmente es un nombre interno. Esta variable incluye una envoltura para que sea editable a través de la interfaz de usuario, cuando se incluye en las publicaciones de blog. Si deseas imprimir el nombre del contenido sin una envoltura, utiliza `page_meta.name`. | | `content.publish_date` | Fecha y hora | Un objeto fecha y hora que representa cuándo se publicó el contenido, en tiempo UTC. A esta variable se le puede dar formato con el [filtro format\_datetime](/docs/cms/reference/hubl/filters#format-datetime). | | `content.publish_date_localized` | Cadena | Una cadena que representa la fecha y hora cuando el contenido se publicó utilizando la zona horaria definida en la configuración [predeterminada de la cuenta](https://knowledge.hubspot.com/es/account-management/change-your-language-and-region-settings). Esta variable también está sujeta a los [ajustes de idioma y el formato de fecha](https://knowledge.hubspot.com/es/blog/manage-your-blog-template-and-settings#set-your-blog-s-date-formats). | | `content.template_path` | Cadena | La ruta del archivo del administrador de diseño a tu plantilla (por ejemplo `custom/page/web_page_basic/my_template.html`). | | `content.slug` | Cadena | El slug de una página, publicación o versión de página web de un correo electrónico. Este es el valor que sigue al dominio. Por ejemplo, en `https://example.com/about-us`, el slug es `about-us`. Para la URL completa, utiliza `content.absolute_url`. | | `content.updated` | Fecha y hora | Un objeto fecha y hora para cuando el usuario actualizó por última vez el contenido, en tiempo UTC. A esta variable se le puede dar formato con el filtro datetime. No es igual a `content.publish_date` en la publicación inicial. Usa el filtro [`\|between_times`](/docs/cms/reference/hubl/filters#between-times) para comprobar si una publicación se ha actualizado después de su publicación inicial. | | `content_id` | Cadena | Imprime el ID único de una página, publicación o correo electrónico. Este ID se encuentra en la URL del editor. Puedes utilizar esta variable como un alias para `content.id`. | | `favicon_link` | Cadena | Imprime la URL de origen del favicono. Más información sobre la [configuración de faviconos en HubSpot](https://knowledge.hubspot.com/es/branding/edit-your-logo-favicon-and-brand-colors#add-or-edit-your-favicon). | | `hub_id` | Cadena | El ID del portal de tu cuenta de HubSpot. | | `hubspot_analytics_tracking_code` | Cadena | Incluye el código de seguimiento de analíticas. Esta etiqueta no es necesaria, porque `standard_footer_includes` ya renderiza el código de seguimiento. | | `local_dt` | Fecha y hora | Un objeto fecha y hora de la hora actual en la zona horaria definida en la configuración del informe. El uso de esta variable deshabilitará la caché de la página para devolver la hora actual. Más información sobre el [prerenderizado de las páginas y las alternativas de JavaScript](/docs/cms/best-practices/testing-staging-performance/prerendering). | | `local_time_zone` | Cadena | La zona horaria, tal y como está en la configuración de los informes de HubSpot. | | `page_meta.canonical_url` | Cadena | La URL oficial en la que se debe acceder a esta página. Normalmente no incluye ningún parámetro de cadena de consulta. Puedes usarlo para la etiqueta `rel="canonical"`. HubSpot canoniza automáticamente las URL. | | `page_meta.html_title` | Cadena | El título de la página. Esta variable debe utilizarse en la etiqueta `` de las plantillas HTML. | | `page_meta.meta_description` | Cadena | La metadescripción de una página. Esta variable debe utilizarse en la descripción de la etiqueta `<meta>` de las plantillas HTML. | | `page_meta.name` | Cadena | Un alias para `content.name`. | | `portal_id` | Cadena | Un alias para la variable `hub_id`. | | `request_contact` | Dicc. | Un diccionario que contiene datos sobre el contacto solicitado. No está disponible en las plantillas de correo electrónico. El uso de esta variable deshabilitará el almacenamiento en caché de la página. Más información sobre el [prerenderizado de las páginas y las alternativas de JavaScript](/docs/cms/best-practices/testing-staging-performance/prerendering). | | `site_settings` | Dicc. | Un diccionario que contiene varios ajustes de página, blog y correo electrónico, incluyendo [colores y fuentes](#color-and-font-settings) y [detalles del pie de página del correo electrónico](#email-variables). | | `year` | Cadena | Imprime el año actual. | ## Variables del correo electrónico A continuación se muestran las variables HubL que se pueden utilizar en las plantillas de correo electrónico. Algunas variables, como las [variables de configuración de color y fuente](#color-and-font-settings), se pueden utilizar en otros tipos de contenido si deseas hacer referencia a la configuración de color y fuente de tu correo electrónico en otro lugar. ### Variables necesarias para la plantilla de correo electrónico Para cumplir con la normativa [CAN-SPAM](https://knowledge.hubspot.com/es/marketing-email/edit-email-footer-addresses), todos los correos electrónicos enviados a través de HubSpot requieren cierta información de la empresa y de consentimiento de comunicaciones. Esta información se configura mediante las siguientes variables, que deben incluirse. Los valores de estos tokens se extraen de la [configuración de email marketing](https://knowledge.hubspot.com/es/marketing-email/edit-email-footer-addresses#edit-your-default-email-footer-information-in-your-settings) de la cuenta. Hay variables adicionales de correo electrónico que son opcionales y que se enumeran [más abajo en esta página](#email-content). | Variable | Tipo | Descripción | | - | - | - | | `site_settings.company_city` | Cadena | Imprime la ciudad de la empresa. | | `site_settings.company_name` | Cadena | Imprime el nombre de la empresa. | | `site_settings.company_state` | Cadena | Imprime el estado de la empresa. | | `site_settings.company_street_address_1` | Cadena | Imprime la dirección de la empresa. | | `unsubscribe_link` | Cadena | Imprime la URL de la página que permite a los destinatarios administrar las preferencias de suscripción o cancelar la suscripción de las comunicaciones por correo electrónico. Esta variable debe utilizarse en el atributo `href` de una etiqueta de anclaje `<a>`. | ### Configuración de colores y fuentes Hay varios controles básicos de color y fuente en la [configuración de correo electrónico de marketing](https://knowledge.hubspot.com/es/marketing-email/manage-your-marketing-email-account-settings) que se pueden imprimir en correos electrónicos. Cuando se indique, puedes utilizar algunas de estas variables en las plantillas de página y blog agregando `site_settings.` antes de la variable. | Variable | Tipo | Descripción | | - | - | - | | `background_color` | Cadena | Configuración del color de fondo como valor hexadecimal. Para imprimir este valor en plantillas de página o blog, utiliza: `site_settings.background_color`. | | `body_border_color` | Cadena | Configurar el color del borde del cuerpo como valor hexadecimal. Esta opción está disponible cuando se selecciona **Establecer manualmente el color del borde del correo electrónico** en el menú desplegable *Opciones de color del borde*. Para imprimir este valor en plantillas de página o blog, utiliza: `site_settings.body_border_color`. | | `body_border_color_choice` | Cadena | El valor de esta variable se controla mediante el menú desplegable *Opciones de color del borde* en la configuración. Los valores son: `BORDER_AUTOMATIC`, `BORDER_MANUAL`, `BORDER_NONE`. Para imprimir este valor en plantillas de página o blog, utiliza: `site_settings.body_border_color_choice`. | | `body_color` | Cadena | Configurar el color del borde del cuerpo como valor hexadecimal. Para imprimir este valor en plantillas de página o blog, utiliza: `site_settings.body_color`. | | `primary_accent_color` | Cadena | Configuración del color primario como valor hexadecimal. Para imprimir este valor en plantillas de página o blog, utiliza: `site_settings.primary_accent_color`. | | `primary_font` | Enumeración | Configuración de fuente principal como cadena. Para imprimir este valor en plantillas de página o blog, utiliza: `site_settings.primary_font`. | | `primary_font_color` | Cadena | Configuración del color primario de la fuente como valor hexadecimal. Para imprimir este valor en plantillas de página o blog, utiliza: `site_settings.primary_font_color`. | | `primary_font_size` | Cadena | Ajuste primario del tamaño de la fuente como valor `px`. Para las plantillas de blog, utiliza `site_settings.primary_font_size`. | | `primary_font_size_num` | Número | Número de tamaño de fuente principal, excluyendo `px`. | | `secondary_accent_color` | Cadena | Configuración del color secundario como valor hexadecimal. Para imprimir este valor en plantillas de página o blog, utiliza: `site_settings.secondary_accent_color`. | | `secondary_font` | Enumeración | Configuración de fuente secundaria como cadena. Para imprimir este valor en plantillas de página o blog, utiliza: `site_settings.secondary_font`. | | `secondary_font_color` | Cadena | Configuración del color de fuente secundario como valor hexadecimal. Para imprimir este valor en plantillas de página o blog, utiliza: `site_settings.secondary_font_color`. | | `secondary_font_size_num` | Cadena | Número de tamaño de fuente secundaria, excluyendo `px`. | ### Contenido del correo | Variable | Tipo | Descripción | | - | - | - | | `content.create_page` | Booleano | Será `True`, si existe una versión de página web del correo electrónico. | | `content.email_body` | Texto enriquecido | El cuerpo principal del correo electrónico. Esta variable renderiza un módulo de texto enriquecido. | | `content.emailbody_plaintext` | Cadena | La anulación opcional del cuerpo del correo electrónico en texto sin formato. | | `content.from_name` | Cadena | El nombre del remitente del correo electrónico. | | `content.reply_to` | Cadena | Dirección de respuesta del correo electrónico. | | `content.subject` | Cadena | El asunto del correo electrónico. | | `email_body_padding` | cadena | La configuración del relleno del cuerpo del [correo electrónico](https://knowledge.hubspot.com/es/marketing-email/manage-your-marketing-email-account-settings#size). | | `email_body_width` | Cadena | El [valor de configuración del ancho del cuerpo del correo electrónico](https://knowledge.hubspot.com/es/marketing-email/manage-your-marketing-email-account-settings#size). | | `site_settings.company_street_address_2` | Cadena | Imprime la línea de dirección 2 de la [configuración CAN-SPAM del pie de página de la cuenta](https://knowledge.hubspot.com/es/marketing-email/edit-email-footer-addresses). | | `site_settings.office_location_name` | Cadena | Imprime el nombre de la ubicación de la oficina de la [configuración CAN-SPAM del pie de página](https://knowledge.hubspot.com/es/marketing-email/edit-email-footer-addresses). | | `subscription_confirmation_url` | Cadena | Imprime la URL de la página de confirmación de las preferencias de suscripción. Esta URL se genera dinámicamente en el envío. | | `subscription_name` | Cadena | Imprime el nombre del tipo de correo electrónico especificado para ese correo. | | `unsubscribe_anchor` | Cadena | Genera una etiqueta de anclaje con las palabras "cancelar suscripción" vinculada a la página de cancelación de suscripción. | | `unsubscribe_link_all` | Cadena | Presenta un enlace para cancelación de la suscripción de todas las comunicaciones por correo electrónico, en lugar de un enlace para gestionar las preferencias de suscripción. | | `unsubscribe_section` | Cadena | Presenta una sección de cancelación de la suscripción que incluye un enlace de cancelación de la suscripción, así como un texto de ayuda. | | `view_as_page_section` | Cadena | Genera un enlace con texto de ayuda que lleva a una versión de página web de un correo electrónico. | | `view_as_page_url` | Cadena | Genera un enlace que lleva a una versión de página web de un correo electrónico. | ### Variables de correo electrónico de contenido privado La siguiente lista de variables solo está disponible dentro de las plantillas de correo electrónico que se utilizan para las [plantillas de correo electrónico de contenido privado](https://knowledge.hubspot.com/es/website-pages/require-member-registration-to-access-private-content#customize-your-membership-registration-page-and-email-templates). | Variable | Tipo | Descripción | | - | - | - | | `membership_company_name` | Cadena | El nombre de la empresa, tal como se establece en la [configuración de contenido privado](https://knowledge.hubspot.com/es/website-pages/manage-private-content-settings#edit-general-settings-for-private-content) de la cuenta. | | `membership_domain` | Cadena | El dominio del sitio web de contenido privado. | | `membership_logo_src` | Cadena | La URL del logotipo a mostrar, tal como se establece en la [configuración del kit de marca de la cuenta](https://knowledge.hubspot.com/es/branding/edit-your-logo-favicon-and-brand-colors). | | `membership_logo_alt` | Cadena | El atributo del logotipo `alt`, tal como se establece en la [configuración del kit de marca de la cuenta](https://knowledge.hubspot.com/es/branding/edit-your-logo-favicon-and-brand-colors). | | `membership_registration_link` | URL | Enlace a la página de registro del sitio web de contenido privado. | | `membership_password_saved_link` | URL | Enlace a la página de contraseña guardada. El enlace redirigirá al visitante a una página restringida aleatoria a la que tengan acceso. | | `membership_password_reset_link` | URL | Enlace a la página de restablecimiento de la contraseña del sitio web de contenido privado. | | `membership_passwordless_auth_link` | URL | Enlace a la página de inicio de sesión de miembros sin contraseña. | | `membership_verify_registration_link` | URL | Enlace a la página de verificación de registro. | | `membership_website_admin` | Cadena | El nombre del administrador del sitio web, tal como se establece en la [configuración de contenido privado de la cuenta](https://knowledge.hubspot.com/es/website-pages/manage-private-content-settings#edit-general-settings-for-private-content). | ## Variables de la página del sitio web Las siguientes variables están disponibles para las páginas del sitio, landing pages, páginas del sistema y blogs. ### Variables requeridas de la plantilla de la página Para publicar un archivo codificado como una página editable o una plantilla de blog, se deben incluir las siguientes variables. Para publicar un archivo HTML sin estas variables, para utilizarlo dentro de otra plantilla, incluye `isAvailableForNewContent: false` en la [plantilla de anotaciones](/docs/cms/start-building/building-blocks/templates/html-hubl-templates#template-annotations). | Variable | Tipo | Descripción | | - | - | - | | `standard_footer_includes` | Cadena | Renderiza el [código de seguimiento de HubSpot](https://developers.hubspot.es/docs/cms/start-building/building-blocks/templates/overview#hubspot-tracking-code) y cualquier otro código incluido en tu HTML de pie de página en la [**Configuración de contenido**](https://app.hubspot.com/l/settings/website/pages/all-domains/page-templates) o en las opciones de una página en particular. Esta etiqueta debe insertarse directamente antes de la etiqueta de cierre del cuerpo. | | `standard_header_includes` | Cadena | Agrega [jQuery, layout.css](https://developers.hubspot.es/docs/cms/start-building/building-blocks/templates/overview#included-cms-files) a cualquier hoja de estilo adjunta, una meta etiqueta viewport, el código de seguimiento de Google Analytics, otra meta información de la página y el código agregado a la etiqueta de encabezado a nivel de dominio, plantilla y página. Esta variable debe agregarse a los `<head>` de las plantillas HTML. | ### Variables de contenido y contacto | Variable | Tipo | Descripción | | - | - | - | | `builtin_body_classes` | Cadena | Imprime dinámicamente las clases que diferencian el marcado del contenido creado con esa plantilla (es decir, el tipo de contenido y el nombre del contenido). Esto facilita el diseño de diferentes tipos de contenido o de páginas concretas. Esta variable debe utilizarse en el atributo class de la etiqueta body en las plantillas codificadas. | | `request_contact.is_logged_in` | Cadena | Si el contacto solicitante ha iniciado sesión o no en el [contenido privado](https://knowledge.hubspot.com/es/website-pages/require-member-registration-to-access-private-content) de un sitio web. El valor de esta variable devolverá `true` si el contacto solicitante está conectado y `false` si el contacto solicitante se ha desconectado. Se puede cerrar la sesión de un contacto dirigiéndolos a `https://<www.yourdomain.com>/_hcms/mem/logout` mediante uno de tus [dominios conectados](https://knowledge.hubspot.com/es/domains-and-urls/connect-a-domain-to-hubspot). El uso de esta variable deshabilitará el almacenamiento en caché de la página. Más información sobre el [prerenderizado de las páginas y las alternativas de JavaScript](/docs/cms/best-practices/testing-staging-performance/prerendering). | | `request_contact.list_memberships` | Cadena | Esta variable devuelve un diccionario de múltiples ID que representa las listas a las que pertenece el contacto. El uso de esta variable deshabilitará el almacenamiento en caché de la página. Más información sobre el [prerenderizado de las páginas y las alternativas de JavaScript](/docs/cms/best-practices/testing-staging-performance/prerendering) | | `content.language` | Dicc. | Un diccionario de información sobre la configuración del idioma de una página. <ul><li>`content.language.languageTag` devuelve el identificador del idioma de una página (por ejemplo, `"en"` o `"es"`).</li><li>`content.language.textDirection.value` devuelve la dirección del texto del idioma de la página (por ejemplo, `"rtl"` o `"ltr"`).</li></ul> | ## Variables de solicitud HTTP Las siguientes variables imprimen información sobre la solicitud de la página HTTP. Algunas de estas variables previenen el almacenamiento en caché de la página debido a la necesidad de rellenar dinámicamente los datos al cargar la página. Más información sobre el [prerenderizado de las páginas y las alternativas de JavaScript](/docs/cms/best-practices/testing-staging-performance/prerendering). | Variable | Tipo | Descripción | | - | - | - | | `request.cookies` | Dicc. | Un diccionario de nombres de cookies asignados a valores de cookies. El uso de esta variable deshabilitará el almacenamiento en caché de la página. | | `request.domain` | Cadena | El dominio utilizado para acceder a esta página. | | `request.full_url` | Cadena | La URL utilizada para acceder a esta página. | | `request.path` | Cadena | El componente de la ruta de la URL. | | `request.path_and_query` | Cadena | La ruta y el componente de consulta de la URL. | | `request.query` | Cadena | El componente de la cadena de consulta de la URL `request.query_dict` divide automáticamente las cadenas de consulta en valores pares clave y se recomienda usar sobre la consulta sin procesar para la mayoría de los casos de uso. | | `request.query_dict` | Dicc. | La cadena de consulta convertida en un diccionario de nombres->valores. | | `request.referrer` | Cadena | El referente HTTP, la URL de la página que enlaza con la página actual. El uso de esta variable deshabilitará el almacenamiento en caché de la página. | | `request.remote_ip` | Cadena | La dirección IP del visitante. El uso de esta variable deshabilitará el almacenamiento en caché de la página. | | `request.scheme` | Cadena | El protocolo de la solicitud (puede ser `http` o `https`). | | `request.search_engine` | Cadena | El motor de búsqueda utilizado para encontrar la página, si corresponde. (ejemplo, `google`, `aol`, `live`, `yahoo`, `images.google`). | | `request.search_keyword` | Cadena | La palabra clave utilizada para encontrar esta página, si corresponde. | | `request.headers` | Cadena | Un diccionario de encabezados de solicitud disponibles. El uso de esta variable deshabilitará el almacenamiento en caché de la página con el fin de interpretar los encabezados individualizados para cada solicitud. | ## Variables del blog Las siguientes variables están disponibles para las plantillas de blog. Algunas variables solo están disponibles para los listados de publicaciones, mientras que otras solo pueden estar disponibles para las publicaciones de blog. | Variable | Tipo | Descripción | | - | - | - | | `blog_author` | Cadena | Esta variable contiene la información del autor del blog para las páginas de índice del autor del blog. Se puede utilizar para crear una lógica condicional para [renderizar la ficha de autores de los blogs](/docs/cms/start-building/building-blocks/templates/blog#if-blog-author-statement). También contiene las siguientes propiedades:<ul><li>`blog_author.avatar`</li><li>`blog_author.bio`</li><li>`blog_author.display_name`</li><li>`blog_author.email`</li><li>`blog_author.facebook`</li><li>`blog_author.google_plus`</li><li>`blog_author.has_social_profiles`</li><li>`blog_author.linkedin`</li><li>`blog_author.twitter`</li><li>`blog_author.website`</li></ul> | | `content.blog_post_author` | Cadena | Esta variable contiene la información individual del autor de publicaciones de blog para una publicación determinada. Puede contener las siguientes propiedades:<ul><li>`content.blog_post_author.avatar`</li><li>`content.blog_post_author.bio`</li><li>`content.blog_post_author.display_name`</li><li>`content.blog_post_author.email`</li><li>`content.blog_post_author.facebook`</li><li>`content.blog_post_author.google_plus`</li><li>`content.blog_post_author.has_social_profiles`</li><li>`content.blog_post_author.linkedin`</li><li>`content.blog_post_author.slug`</li><li>`content.blog_post_author.twitter`</li><li>`content.blog_post_author.website`</li></ul> | | `blog` | Cadena | Un alias para `group`. Por ejemplo, puedes utilizar `blog.absolute_url` o `group.absolute_url`. | | `content.comment_count` | Entero | El número de comentarios de la publicación actual del blog. | | `content.comment_list` | Cadena | Una lista de los comentarios de la publicación actual del blog. | | `current_page_num` | Entero | El índice entero de la página actual de las publicaciones del blog en la vista. | | `content.featured_image` | Cadena | La URL de origen de la imagen destacada, seleccionada cuando se publicó el blog. | | `content.featured_image_alt_text` | Cadena | El texto alternativo de la imagen destacada. | | `last_page_num` | Entero | El índice entero de la última página de la publicación del blog en la vista. | | `next_page_num` | Entero | El índice entero de la siguiente página de las publicaciones del blog en la vista. | | `content.next_post_featured_image` | Cadena | La URL de la imagen destacada de las siguientes publicaciones del blog, si existe. | | `content.next_post_featured_image_alt_text` | Cadena | Texto alternativo para la imagen destacada de la siguiente publicación, si el texto alternativo existe. | | `content.next_post_name` | Cadena | El nombre de la siguiente publicación del blog, si existe. | | `content.next_post_slug` | Cadena | El slug de la URL de la siguiente publicación del blog, si existe. | | `content.post_body` | Cadena | El cuerpo de la publicación del blog. | | `content.post_list_content` | Cadena | El contenido del cuerpo de la publicación del blog, modificado para la página de índice. El resultado final se ve afectado por la [configuración del resumen del blog](https://knowledge.hubspot.com/es/blog/manage-your-blog-template-and-settings#select-your-blog-templates). Si las imágenes destacadas están habilitadas en la configuración, esta variable eliminará cualquier imagen que esté por encima del [separador de "leer más"](http://knowledge.hubspot.com/es/blog/create-and-publish-blog-posts) automáticamente. | | `content.post_list_summary_featured_image` | Cadena | La imagen destacada de los resúmenes de publicaciones para usar en la plantilla de índice del blog, según lo establecido en la [configuración del blog](https://knowledge.hubspot.com/es/blog/manage-your-blog-template-and-settings#select-your-blog-templates). | | `content.post_summary` | Cadena | El resumen de la publicación del blog. Este contenido está determinado por el [separador "Leer más"](http://knowledge.hubspot.com/es/blog/create-and-publish-blog-posts) en el editor del blog. | | `content.previous_post_featured_image` | Cadena | La URL de la imagen destacada de la publicación anterior del blog, si existe. | | `content.previous_post_featured_image_alt_text` | Cadena | Texto alternativo para la imagen destacada de la publicación anterior, si el texto alternativo existe. | | `content.previous_post_name` | Cadena | El nombre de la publicación anterior del blog, si existe. | | `content.previous_post_slug` | Cadena | El slug de la URL de la publicación anterior del blog, si existe. | | `content.publish_date_localized` | Cadena | Una cadena que representa la fecha y hora en que se publicó el blog, el formato está de acuerdo con la [configuración del idioma y el formato de la fecha](https://knowledge.hubspot.com/es/blog/manage-your-blog-template-and-settings#set-your-blog-s-date-formats). | | `simple_list_page` | Booleano | Un valor booleano para indicar si la página solicitada es la página de "todas las publicaciones" y contiene enlaces a todas las publicaciones del blog. | | `content.topic_list` | Diccionario | Se puede utilizar para mostrar las marcas de un listado de temas recorriéndolo en bucle. `{% for topic in content.topic_list %}` Los elementos que contienen las propiedades: `name` y `slug`. | | `contents` | Cadena | El contenido es una secuencia de las publicaciones de tu blog que se itera a través de un bucle, disponible en las [páginas de índice del blog](/docs/cms/start-building/building-blocks/templates/blog#if-is-listing-view-statement). | | `contents.total_count` | Entero | Número total de publicaciones en un listado (regular, temas, autores, etc.). | | `contents.total_page_count` | Entero | Número total de páginas de publicaciones según el número de publicaciones por página. | | `contents_topics` | Cadena | Obtén una lista de todos los temas del blog en la secuencia de contenidos de publicaciones. | | `group` | Dicc. | El diccionario que contiene las variables que pertenecen a un blog entero. | | `group.absolute_url` | Cadena | La URL base de un blog. | | `group.allow_comments` | Booleano | Se evalúa como `true`, si se permiten los comentarios. | | `group.description` | Cadena | La meta descripción del blog, tal y como está configurada en los [ajustes del blog](https://knowledge.hubspot.com/es/blog/manage-your-blog-template-and-settings#select-your-blog-templates). Se utiliza para la metadescripción en ciertas páginas de índice. | | `group.header` | Cadena | El encabezado del blog. | | `group.html_title` | Cadena | El título de este blog tal y como debería aparecer en la etiqueta `<title>`. | | `group.id` | Cadena | El ID único de un blog. Este ID se encuentra en la URL del panel de control de blog para un blog en particular. | | `group.language` | Dicc. | Un diccionario que contiene información sobre el idioma de un blog. `group.language.languageTag` puede utilizarse en condicionales para mostrar contenidos diferentes en las distintas variaciones de idioma de un blog en varios idiomas. | | `group.public_title` | Cadena | El título de este blog como debe aparecer en la parte superior de las páginas renderizadas. | | `group.show_summary_in_listing` | Booleano | Si se muestran los resúmenes de las entradas en la página de índice del blog, según lo establecido en la [configuración del blog](https://knowledge.hubspot.com/es/blog/use-a-featured-image-on-a-page-or-blog-post#display-featured-images-on-a-blog-listing-page). | | `group.slug` | Cadena | El camino hacia este blog. | | `group.use_featured_image_in_summary` | Booleano | Si se muestran las imágenes destacadas en los resúmenes de las entradas, según lo establecido en la [configuración del blog](https://knowledge.hubspot.com/es/blog/manage-your-blog-template-and-settings#select-your-blog-templates). | | `archive_list_page` | Booleano | Devuelve `true` si la página es una página de archivo del blog. Por ejemplo: `https://www.example.com/blog/archive/2020/02` devolvería `true`. | ## Páginas dinámicas con objetos del CRM Las siguientes variables se utilizan para [crear páginas dinámicas con objetos del CRM](/docs/cms/start-building/features/data-driven-content/hubdb/overview#crm-object-dynamic-pages). Estas variables solo están disponibles para las páginas dinámicas de los objetos del CRM. | Variable | Tipo | Descripción | | - | - | - | | `dynamic_page_crm_object` | Dicc. | El objeto del CRM de la página dinámica que coincide con la ruta de solicitud de la página. Si la solicitud es a la página de índice, este valor será `null`. | | `dynamic_page_crm_object_type_fqn` | Cadena | El nombre completo calificado (FQN) del objeto del CRM. El FQN es un ID único asignado al objeto, que incluye el ID de tu cuenta de HubSpot y el nombre del objeto. El FQN se puede usar en la [función `crm_objects` ](/docs/cms/reference/hubl/functions#crm-objects). | ## Variables de HubDB Las siguientes variables se utilizan para crear páginas dinámicas con [HubDB](/docs/cms/start-building/features/data-driven-content/crm-objects#hubdb-dynamic-pages). Estas variables solo están disponibles para las [páginas dinámicas de HubDB](/docs/cms/start-building/features/data-driven-content/hubdb/overview#hubdb-dynamic-pages). | Variable | Tipo | Descripción | | - | - | - | | `dynamic_page_hubdb_table_id` | Largo | El ID de la tabla seleccionada en la pestaña *Configuración avanzada* del editor de páginas. | | `dynamic_page_hubdb_row` | Dicc. | La fila de HubDB de la página dinámica que coincide con la ruta de solicitud de la página. Si la solicitud es a la página de índice, este valor será `null`. | | `row.hs_id` | Largo | El ID interno de una fila de HubDB. | | `row.hs_name` | Cadena | El nombre de la fila de HubDB. | | `row.hs_path` | Cadena | La ruta de la fila de HubDB. Se utiliza para resolver una solicitud a una fila de la tabla especificada por `dynamic_page_hubdb_table_id`. | | `row.hs_child_table_id` | Largo | El ID de la tabla secundaria de la fila de HubDB. Puede utilizarse para crear plantillas anidadas. | | `row.hs_parent_row` | Dicc. | La fila principal de la fila de HubDB. Solo se puede utilizar cuando se usan tablas secundarias para plantillas anidadas. | | `dynamic_page_route_level` | Entero | La profundidad actual de una página en una plantilla dinámica de varios niveles. El valor comienza en `0` y se incrementa con cada capa adicional de la tabla. | ## Variables del nodo del menú Las siguientes variables están disponibles para ser utilizadas en el objeto devuelto por la [Función de menú de HubL](/docs/cms/reference/hubl/functions#menu). | Variable | Tipo | Descripción | | - | - | - | | `node.label` | Cadena | La etiqueta del menú de la página. | | `node.url` | Cadena | URL de la página. | | `node.pageId` | Número | ID de la página si está dentro de HubSpot. | | `node.contentGroupId` | Número | ID del blog de la página si se trata de una publicación del blog de HubSpot. | | `node.parentNode` | Objeto | El nodo principal del nodo actual. El nodo principal tendrá el nodo actual en la propiedad `children`. | | `node.children` | Lista | La lista de nodos secundarios del nodo actual. | | `node.activeBranch` | Booleano | Se evalúa como `true` si el nodo pertenece a la rama principal en la que se encuentra la página actual. | | `node.activeNode` | Booleano | Se evalúa como `true` si el nodo es la página actual. | | `node.level` | Número | El número de niveles de profundidad del nodo actual con respecto a los nodos de nivel superior. | | `node.pageTitle` | Cadena | Nombre de la página de contenido si está dentro de HubSpot. | | `node.slug` | Cadena | Slug de la ruta de la página. | | `node.linkTarget` | Cadena | Objetivo del enlace de la página. | ## Editor en la aplicación y variables de vista previa Puedes usar las siguientes variables para comprobar si el contenido se está renderizando en el editor de contenido o en el previsualizador. Por ejemplo, es posible que desees utilizarlo para evitar la ejecución de código en el editor mientras sigues ejecutando el código en páginas publicadas. ```hubl theme={null} {% if is_in_page_editor %} Display something different within the page editor. {% endif %} ``` | Variable | Tipo | Descripción | | - | - | - | | `is_in_hs_app` | Cadena | Devuelve `true` si el contenido se está renderizando dentro de la aplicación de HubSpot. | | `is_in_editor` | Cadena | Devuelve `true` si el contenido se está renderizando dentro de cualquier editor de contenido. | | `is_in_global_content_editor` | Cadena | Devuelve `true` si el contenido se está renderizando dentro del editor de contenido global. | | `is_in_theme_editor` | Número | Devuelve `true` si el contenido se está renderizando dentro del editor de temas. | | `is_in_page_editor` | Cadena | Devuelve `true` si el contenido se está renderizando en el editor de página. | | `is_in_blog_post_editor` | Cadena | Devuelve `true` si el contenido se está renderizando dentro del editor de publicación del blog. | | `is_in_email_editor` | Cadena | Devuelve `true` si el contenido se está renderizando dentro del editor de correo electrónico. | | `is_in_previewer` | Número | Devuelve `true` si el contenido se está renderizando dentro de cualquier contexto de vista previa. | | `is_in_theme_previewer` | Objeto | Devuelve `true` si el contenido se está procesando dentro del previsualizador de temas. | | `is_in_template_previewer` | Cadena | Devuelve `true` si el contenido se está renderizando dentro del previsualizador de plantillas. | | `is_in_page_previewer` | Cadena | Devuelve `true` si el contenido se está renderizando dentro del previsualizador de páginas. | | `is_in_blog_post_previewer` | Cadena | Devuelve `true` si el contenido se está renderizando dentro del previsualizador de publicaciones del blog. | | `is_in_email_previewer` | Cadena | Devuelve `true` si el contenido se está renderizando dentro del previsualizador de correo electrónico. | | `is_in_module_previewer` | Cadena | Devuelve `true` si el contenido se está renderizando en el previsualizador de módulos. | # Variables de HubL y sintaxis de macros Source: https://developers.hubspot.es/docs/cms/reference/hubl/variables-macros-syntax Aprende a utilizar las variables de HubL y las macros para construir páginas dinámicas en el CMS de HubSpots y correos electrónicos. HubL utiliza variables para almacenar y enviar valores a la plantilla. Las variables se pueden utilizar en la lógica de la plantilla o iterar con los bucles for. Además de las variables, las macros son otra herramienta útil para imprimir secciones de código repetitivas pero dinámicas a lo largo de tus plantillas. Las variables son expresiones delimitadas por `}}`. La sintaxis básica de las variables es la siguiente: ```hubl theme={null} // variables {{ variable }} {{ dict.attribute }} ``` ## Variables Las variables son una sola palabra en una expresión o un atributo de un diccionario. HubL utiliza estructuras de datos basadas en Python llamadas diccionarios o **dicts** para almacenar diversos conjuntos de variables. Por ejemplo, HubSpot utiliza un diccionario "contenido" para albergar muchos atributos que pertenecen al contenido creado con esa plantilla. Por ejemplo, el `content.absolute_url` imprime la URL del contenido específico. HubSpot tiene muchas variables predefinidas que se pueden utilizar en toda tu página, blog y plantillas de correo electrónico. Tenemos una [lista de referencia de las variables](/docs/cms/reference/hubl/variables), también puedes ver la [información del desarrollador](https://developers.hubspot.com/es/docs/cms/developer-reference/debugging-and-errors#developer-info) al navegar por cualquier página de tu cuenta para ver las variables disponibles dentro de esa página. Además de imprimir los valores de las variables y los atributos del diccionario en una plantilla, también puedes definir tus propias variables. Puedes almacenar cadenas, booleanos, enteros, secuencias o crear diccionarios dentro de una sola variable. Las variables se definen dentro de los delimitadores de las sentencias utilizando la palabra "set". Una vez almacenadas, las variables pueden imprimirse indicando el nombre de la variable como una expresión. A continuación puedes ver varios tipos de información almacenada en variables y luego imprimir. Las variables deben ser palabras sueltas o utilizar guiones bajos para los espacios (por ejemplo, mi\_variable). **HubL no admite nombres de variables con guiones.** ```text hubl.txt theme={null} {% set string_var = "This is a string value stored in a variable" %} {{ string_var}} {% set bool_var = True %} {{ bool_var}} {% set int_var = 53 %} {{ int_var}} {% set seq_var = ["Item 1", "Item 2", "Item 3"] %} {{ seq_var}} {% set var_one = "String 1" %} {% set var_two = "String 2" %} {% set sequence = [var_one, var_two] %} {{ sequence }} {% set dict_var = {"name": "Item Name", "price": "$20", "size":"XL"} %} {{ dict_var.price }} ``` ```text salidas.txt theme={null} This is a string value stored in a variable True 53 [Item1, Item2, Item3] [String 1, String 2] $20 ``` Cada ejemplo anterior almacena un tipo de variable diferente, y el último ejemplo almacena dos variables diferentes en una secuencia. Además de imprimir valores, las variables pueden utilizarse en [sentencias if](/docs/cms/reference/hubl/if-statements), como parámetros de[filtro](/docs/cms/reference/hubl/filters) , como parámetros de[función](/docs/cms/reference/hubl/functions) así como iterar con [bucles for](/docs/cms/reference/hubl/loops) (solo variables de secuencia). Un uso común es utilizar variables para definir valores CSS comunes en su hoja de estilos. Por ejemplo, si tienes un color que utilizas una y otra vez en todo tu archivo CSS. De esta manera, si necesitas cambiar ese color, puedes cambiar el valor de la variable, y todas las referencias a esa variable se actualizarán, la próxima vez que publiques el archivo. ```css example.css theme={null} <!-- defines variable and assigns HEX color --> {% set primaryColor = "#F7761F" %} a { color: {{ primaryColor }}; {# prints variable HEX value #} } ``` ```text salidas.txt theme={null} a { color: #f7761f; } ``` ## Macros Las macros HubL te permiten imprimir varias sentencias con un valor dinámico. Por ejemplo, si hay un bloque de código que escribes una y otra vez, una macro puede ser una buena solución, porque imprimirá el bloque de código mientras intercambia ciertos argumentos que le pasa. La macro se define, se nombra y se le dan argumentos dentro de una sentencia HubL. A continuación, se llama a la macro en una sentencia que pasa sus valores dinámicos, que imprime el bloque de código final con los argumentos dinámicos. La sintaxis básica de una macro es la siguiente: ```hubl theme={null} {% macro name_of_macro(argument_name, argument_name2) %} {{ argument_name }} {{ argument_name2 }} {% endmacro %} {{ name_of_macro("value to pass to argument 1", "value to pass to argument 2") }} ``` Si tu macro devuelve espacios en blanco en forma de nuevas líneas, puedes eliminar a mano los espacios en blanco en las plantillas. Si agregas un signo menos (`-`) al principio o al final de un bloque, un comentario o una expresión variable, se eliminarán los espacios en blanco que haya antes o después de ese bloque. ```hubl theme={null} {% macro name_of_macro(argument_name, argument_name2) -%} {{ argument_name }} {{ argument_name2 }} {%- endmacro %} ``` A continuación se muestra una aplicación práctica de una macro para imprimir una propiedad CSS3 con los distintos prefijos de proveedor, con un valor dinámico. Esto te permite imprimir 5 líneas de código con una sola etiqueta de macro. ```css example.css theme={null} {% macro trans(value) %} -webkit-transition: {{value}}; -moz-transition: {{value}}; -o-transition: {{value}}; -ms-transition: {{value}}; transition: {{value}}; {% endmacro %} a { {{ trans("all .2s ease-in-out") }} } ``` ```text salidas.txt theme={null} a { -webkit-transition: all 0.2s ease-in-out; -moz-transition: all 0.2s ease-in-out; -o-transition: all 0.2s ease-in-out; -ms-transition: all 0.2s ease-in-out; transition: all 0.2s ease-in-out; } ``` > [!WARNING] > > Las macros introducen la posibilidad de tener código recursivo. Para evitar problemas de fiabilidad y rendimiento, solo puedes anidar macros a 20 niveles de profundidad. Si sobrepasas este límite obtendrás el error: `se ha alcanzado el límite máximo de recursión de 20 para la macro <your macro name>` ## Llamada En algunos casos, es posible que desees pasar información dinámica adicional al bloque de macros. Por ejemplo, puedes tener un gran trozo de código que quieras devolver a la macro, además de los argumentos. Esto se puede hacer utilizando el bloque de llamada y caller(). Un bloque de llamada funciona esencialmente como una macro, pero no tiene su propio nombre. La expresión caller() especifica dónde se mostrará el contenido del bloque de llamada. En el ejemplo siguiente, se agrega una `<p>` en una macro además de los dos argumentos. ```html example.html theme={null} {% macro render_dialog(title, class) %} <div class="{{ class }}"> <h2>{{ title }}</h2> <div class="contents"> {{ caller() }} </div> </div> {% endmacro %} {% call render_dialog("Hello World", "greeting") %} <p>This is a paragraph tag that I want to render in my.</p> {% endcall %} ``` ```text salidas.txt theme={null} <div class="greeting"> <h2>Hello World</h2> <div class="contents"> <p>This is a simple dialog rendered by using a macro and a call block.</p> </div> </div> ``` ## Importación Otra característica útil de las macros es que pueden utilizarse en varias plantillas importando un archivo de plantilla en otro. Para ello, deberás utilizar la etiqueta **import**. La etiqueta de importación te permitirá especificar una ruta de archivo de Administrador de diseño a la plantilla que contiene tus macros y dar a las macros un nombre en la plantilla en la que las estás incluyendo. A continuación, puedes pasar valores a estas macros sin necesidad de redefinirlas. Por ejemplo, digamos que tienes un archivo de plantilla .html que contiene las siguientes 2 macros. Se define una macro para configurar una etiqueta de encabezado y otra para generar una etiqueta de pie de página. Este archivo se guarda en el Administrador de diseño con el nombre `my_macros.html`. ```hubl theme={null} <!-- my_macros.html file --> {% macro header(tag, title_text) %} <header> <{{ tag }}>{{ title_text }} </{{tag}}> </header> {% endmacro %} {% macro footer(tag, footer_text) %} <footer> <{{ tag }}>{{ footer_text }} </{{tag}}> </footer> {% endmacro %} ``` En la plantilla que utilizará estas macros, se utiliza una etiqueta de importación que especifica la ruta del archivo `my_macros.html`. También nombra el grupo de macros (en este ejemplo `header_footer`). Las macros pueden ejecutarse agregando el nombre de la macro al nombre dado a la plantilla importada. Consulta el ejemplo siguiente. ```html example.html theme={null} {% import "custom/page/web_page_basic/my_macros.html" as header_footer %} {{ header_footer.header("h1", "My page title") }} <p>Some content</p> {{ header_footer.footer("h3:", "Company footer info") }} ``` ```text salidas.txt theme={null} <header><h1>My page title</h1></header> <p>Some content</p> <footer><h3>Company footer info</h3></footer> ``` ## From Si solo deseas importar macros específicas, en lugar de todas las macros contenidas en un archivo .html separado, puedes utilizar la etiqueta **from**. Con la etiqueta from, especifica solo las macros que deseas importar. Por lo general, usar **import** proporcionará más flexibilidad, pero esta alternativa también es compatible. El siguiente ejemplo accede al mismo archivo `my_macros.html` de la sección anterior de este artículo. Pero esta vez en lugar de importar todas las macros, sólo accede a la macro de pie de página. ```html example.html theme={null} {% from "custom/page/web_page_basic/my_macros.html" import footer %} {{ footer("h2", "My footer info") }} ``` ```text salidas.txt theme={null} <footer><h2>My footer info</h2></footer> ``` ## Variables dentro de los bucles > [!WARNING] > > Cualquier variable definida dentro de los bucles está limitada al ámbito de ese bucle y no puede ser llamada desde fuera del mismo. Puedes llamar a las variables definidas fuera de un bucle, desde dentro de un bucle, pero no a la inversa. También se pueden utilizar funciones para mutar objetos para configurar valores en dict o realizar operaciones de lista. En el siguiente ejemplo se utiliza la lista de operación [`.update`](/docs/cms/reference/hubl/functions#update): ```text entrada.txt theme={null} {% set obj = {val : 0} %} {% for i in range(0, 10) %} {% do obj.update({val: obj.val + i }) %} {% endfor %} {{ obj.val }} ``` ```text salidas.txt theme={null} 45 ``` # Configurar un módulo Source: https://developers.hubspot.es/docs/cms/reference/modules/configuration Más información sobre cómo configurar un módulo personalizado. Al crear un módulo, hay una serie de opciones disponibles que influyen en el lugar en el que el módulo es visible, en cómo se identifica y en cómo se edita. Cuando se [desarrollan localmente](/docs/developer-tooling/local-development/hubspot-cli/install-the-cli), los módulos se almacenan como carpetas con un sufijo `.module`. Estas carpetas contienen los archivos que componen la configuración del módulo, y el código utilizado para renderizarlo. La configuración de un módulo se mantiene en el archivo [meta.json](#meta-json), mientras que los campos se configuran por separado en un archivo [fields.json](https://developers.hubspot.es/docs/cms/start-building/building-blocks/modules/overview#fields-json). La mayor parte de la configuración también puede modificarse mediante el editor de módulos del [Administrador de diseño](/docs/cms/start-building/introduction/developer-environment/design-manager). ![Estructura de las carpetas de los módulos mostrada localmente](https://cdn2.hubspot.net/hubfs/53/module%20structure.png) En un nivel alto, configuras las opciones del módulo localmente dentro del archivo `meta.json`, que puede incluir las siguientes propiedades: | Parameter | Type | Description | Default | | - | - | - | - | | `icon` | String | URL de una imagen para usar como icono de un módulo. | | | `label` | String | Etiqueta utilizada cuando los módulos se muestran en los editores de contenido | | | `module_id` | Number | Id único para el módulo que es independiente de la ruta. | | | `is_available_for_new_content` | Boolean | El valor del interruptor en la esquina superior derecha del editor de módulos en HubSpot. Determina si el módulo puede ser utilizado en el contenido. | `true` | | `global` | Boolean | Indica si el módulo es global o no | `false` | | `host_template_types` | Matriz | Un `array` de [tipos de contenido](https://developers.hubspot.es/docs/cms/start-building/building-blocks/templates/overview) en los que se puede utilizar el módulo. Uno o más de `[ "PAGE", "BLOG_POST", "BLOG_LISTING", "EMAIL" ]`. | | | `css_assets` | Matriz | Un `array` de archivos CSS de los que depende el módulo. Admite rutas relativas.por ejemplo, `"css_assets": [{"path": "../path/to/file.css" }]` | `[]` | | `css_render_options` | Objetos | Establece si el módulo CSS se renderiza de forma asíncrona con `async`: `true`, `false` | `{"async": false}` | | `js_assets` | Matriz | Un `array` de archivos JavaScript de los que depende el módulo. Admite rutas relativas.por ejemplo, `"js_assets": [{ "path": "../path/to/file.js" }]` | `[]` | | `js_render_options` | Objetos | Modifica la etiqueta JavaScript del módulo agregado a la página renderizada. Las opciones incluyen:<ul><li>`position`: `head`, `footer`</li><li>`async`: `true`, `false`</li><li>`defer`: `true`, `false`</li><li>`type`: `string`</li></ul> | `{"position":"footer"}` | | `inline_help_text` | String | Texto de ayuda que se mostrará en la parte superior del módulo en un cuadro de información azul (límite de 300 caracteres).Proporciona la información necesaria para utilizar el módulo. Si tienes información de texto de ayuda específica del campo para transmitir, consulta la [documentación del campo de texto de ayuda](/docs/cms/reference/fields/module-theme-fields#properties-used-by-all-fields). | `null` | | `master_language` | String | Con [traducciones activadas](https://knowledge.hubspot.com/design-manager/create-translations-of-your-modules#:~:text=To%20create%20translations%20of%20a,the%20right%2C%20click%20Add%20translations.), el código del idioma en el que se escribieron originalmente los campos del módulo.por ejemplo, `en` | | | `placeholder` | Objetos | Establece el [contenido del marcador de posición](/docs/cms/reference/hubl/tags/standard-tags#editor-placeholders) para el módulo. Incluye las siguientes propiedades:<ul><li>`show_module_icon`: si se muestra el icono del módulo. `true`, `false`.</li><li>`title`: el título que aparece en el módulo en el editor. String.</li><li>`description`: la descripción que aparece en el módulo en el editor. String.</li></ul> | | | `categories` | Matriz | Una matriz que contiene hasta tres [categorías de módulos](#add-categories).Por ejemplo: `"categories":["FORMS_AND_BUTTONS"]` | | | `content_tags` | Matriz | Una matriz de [objetos de etiqueta de módulo](#adding-categories-and-tags) que contiene el nombre de la etiqueta y la `fuente` de `"USUARIO"`.Por ejemplo: `"content_tags": [{` `"name": "BOTONES",` `"source" : "USER"``}]` | | A continuación, obtén más información sobre las opciones de configuración de módulos individuales. ## Adición de un icono Los módulos pueden incluir un icono que aparece en el [Administrador de diseño](/docs/cms/start-building/introduction/developer-environment/design-manager) y en los editores de páginas y correos electrónicos para proporcionar un contexto visual a los creadores de contenido. Se recomienda tener diferentes iconos para los diferentes tipos de módulos en tu tema. Los iconos son [necesarios para los proveedores del mercado](/docs/cms/marketplace/template-guidelines). Hay dos maneras de agregar un icono, a través del [administrador de diseño](#add-an-icon-using-the-design-manager) o de la [CLI del CMS](#add-an-icon-using-the-cli). Los iconos de los módulos deben ser un archivo `.svg` y tener un tamaño no superior a 10kb. Para obtener los mejores resultados, tu icono debe ser sencillo y utilizar un solo color. Los iconos que usen más de un color se convertirán automáticamente para ti. El icono del módulo predeterminado que se muestra es el de una llave inglesa y un pincel. Para agregar un icono mediante el administrador de diseño: 1. In your HubSpot account, navigate to **Marketing** > **Files and Templates** > **Design Tools**. 2. Use the left sidebar to locate the **module** you want to edit, then click the **module name**. 3. In the right sidebar of the module editor, click the **icon** next to the module title. 4. Upload/select your icon. After publishing your changes, the icon will appear within the page editors and design manager. ![edit-module-icon-crop](https://www.hubspot.com/hubfs/Knowledge_Base_2023/edit-module-icon-crop.png) Para agregar un icono al desarrollar localmente, abre el archivo `meta.json` del módulo y agrega o edita el valor del parámetro `icon` para que sea un SVG desde el administrador de archivos. ```json theme={null} // meta.json { "global": false, "host_template_types": ["PAGE"], "icon": "http://example.com/hubfs/code.svg", "label": "Code block", "smart_type": "NOT_SMART", "is_available_for_new_content": true, "inline_help_text": "This module is for code snippets." } ``` ## Cambio de la etiqueta La etiqueta que se utiliza cuando se muestran los módulos en el editor puede ajustarse por separado del nombre del módulo. Esto es útil cuando se desarrolla localmente, ya que puedes tener un nombre que tenga sentido para ti y a la vez tener uno diferente que vean los creadores de contenido. Localmente, cambia el parámetro `label` para establecer la etiqueta. En el administrador de diseño hay un campo en el editor de módulos debajo del nombre del módulo. ![edit-module-label](https://www.hubspot.com/hubfs/Knowledge_Base_2023/edit-module-label.png) ## Hacer global un módulo Para los módulos normales, el contenido de cada instancia de un módulo en una página, correo electrónico o plantilla es independiente. Para algunos casos de uso, es útil poder hacer que todas las instancias de un módulo compartan el mismo contenido. Cuando se desarrolla localmente, se puede hacer que un módulo sea global estableciendo `global` como `true`. También puedes [convertir módulos en una plantilla de arrastrar y soltar a global](https://knowledge.hubspot.com/design-manager/use-global-content-across-multiple-templates#create-new-global-content-in-the-design-manager:~:text=To%20convert%20an%20existing%20local%20module%20or%20group) utilizando el administrador de diseño. ## Controlar dónde se puede utilizar un módulo Cuando se desarrolla localmente, se puede controlar en qué tipos de contenido se puede utilizar un módulo a través de la propiedad `hostTemplateTypes`. Más información sobre los [tipos de plantillas disponibles](https://developers.hubspot.es/docs/cms/start-building/building-blocks/templates/overview#template-types). Los módulos también se pueden ocultar para que no se puedan agregar directamente a las páginas mediante la configuración de `is_available_for_new_content` a `false`. Por ejemplo, esto puede ser útil para los módulos creados para los menús de navegación y la búsqueda. Puedes actualizar esto en el administrador de diseño haciendo clic en la opción **Tipo de plantilla** en la barra lateral derecha. ![edit-module-template-type](https://www.hubspot.com/hubfs/Knowledge_Base_2023/edit-module-template-type.png) ## Adición de dependencias de CSS y JavaScript Además de utilizar `module.css` y `module.js` para agregar CSS y JavaScript que se agregarán a todas las páginas que incluyan una instancia de módulo, las dependencias que se comparten entre módulos pueden adjuntarse utilizando `css_assets` y `js_assets`. Las rutas pueden ser absolutas o relativas al archivo `meta.json`. ```json theme={null} // meta.json { "css_assets": [{ "path": "../path/to/file.css" }], "js_assets": [{ "path": "../path/to/file.js" }] } ``` > [!WARNING] > > **Advertencia:** cuando se utilizan rutas relativas para referenciar dependencias, al ejecutar `hs fetch --overwrite` para actualizar el módulo para el desarrollo local se sobrescribirán las rutas relativas con rutas absolutas. Con el administrador de diseño, puedes vincular archivos CSS y JavaScript a un módulo utilizando la sección *Archivos vinculados* en la barra lateral derecha del editor de módulos. ![edit-module-linked-files](https://www.hubspot.com/hubfs/Knowledge_Base_2023/edit-module-linked-files.png) ## Agregar categorías y etiquetas Puedes asignar categorías y etiquetas a los módulos para organizarlos dentro de las herramientas de HubSpot: * [Categorías](#categories): asigna categorías a módulos para organizarlos en grupos dentro de la interfaz de usuario del editor de contenido. Esto les permite a los creadores de contenido encontrar módulos más fácilmente mientras crean contenido en HubSpot. Ten en cuenta lo siguiente sobre las categorías: * Un módulo puede tener hasta tres categorías, que están predefinidas y no se pueden personalizar. * Actualmente, las categorías no aparecen en la interfaz de usuario del editor de contenido. Sin embargo, puedes asignar categorías para cuando la categorización esté disponible en los editores. * Los módulos sin categorizar estarán disponibles en una categoría *Todos*. * [Etiquetas](#tags): asigna etiquetas para organizar módulos dentro del administrador de diseño. Esto te permite encontrar módulos más fácilmente mientras creas plantillas. En el administrador de diseño, puedes asignar categorías y etiquetas utilizando la sección *Filtrar etiquetas* de la barra lateral derecha en el editor de módulos. Obtén más información sobre las categorías y etiquetas disponibles a continuación. ![edit-module-filter-tags](https://www.hubspot.com/hubfs/Knowledge_Base_2023/edit-module-filter-tags.png) A nivel local, puedes agregar categorías y etiquetas al archivo `meta.json` de un módulo de la siguiente manera: ```json theme={null} // meta.json { "label": "Custom module", "categories": ["image_and_video", "commerce"], "content_tags": [ { "name": "BUTTONS", "source": "USER" }, { "name": "CTA", "source": "USER" } ], "is_available_for_new_content": true } ``` ### Categorías La matriz de `categorías` de un módulo puede contener hasta tres de las siguientes categorías (no distingue entre mayúsculas y minúsculas): | Categoría | Descripción | | - | - | | `blog` | Módulos específicos del blog, como una publicación reciente. | | `body_content` | Módulos que están formateados para mostrar gráficamente el contenido, como una galería de imágenes. | | `commerce` | Módulos específicos de comercio, como tarjetas de precios. | | `design` | Módulos que afectan la estructura y el diseño del contenido, como los acordeones. | | `functionality` | Módulos que incluyen respuestas dinámicas o comportamiento en la página, como menús. | | `forms_and_buttons` | Módulos que les permiten a los visitantes del sitio introducir y enviar datos. | | `media` | Módulos que contienen elementos como imágenes, iconos, video y banners. | | `social` | Módulos específicos para redes sociales, como compartir en redes sociales. | | `text` | Módulos que contienen solo texto. | ### Etiquetas La matriz `content_tags` de un módulo puede contener cualquiera de los siguientes objetos de etiqueta de módulo (distingue entre mayúsculas y minúsculas): **Tipos de contenido:** * `ACCORDION` * `ANIMATION` * `BLOG_POST` * `BUTTONS` * `CODE` * `CTA` * `FEED` * `FORM` * `ICON` * `IMAGE` * `LISTS` * `LOGO` * `MENU` * `RICH_TEXT` * `SLIDER` * `TEXT` * `VIDEO` **Funciones:** * `BANNER` * `BLOG` * `BRANDING` * `CALCULATOR` * `CONVERSION` * `EMAIL` * `GALLERY` * `HEADERS` * `INTERACTION` * `LAYOUT` * `MAP` * `MULTIMEDIA` * `NAVIGATION` * `PROGRESS_BAR` * `SEARCH` * `SETTINGS` * `SOCIAL` * `TRANSLATION` # Control de versiones de módulos predeterminados Source: https://developers.hubspot.es/docs/cms/reference/modules/default-module-versioning # Módulos web predeterminados Source: https://developers.hubspot.es/docs/cms/reference/modules/default-modules Obtén más información sobre los módulos predeterminados que HubSpot proporciona para crear plantillas para páginas web, publicaciones de blog y plantillas de índice de blog. Estos módulos son distintos de los módulos de correo predeterminados, que son para plantillas de correo electrónico. Abajo encontrarás los módulos predeterminados que HubSpot proporciona para crear plantillas para páginas web, publicaciones de blog y páginas de índice de blog. También encontrarás módulos predeterminados que puedes usar para crear plantillas de cotización. Al desarrollar localmente, puedes [obtener](https://developers.hubspot.com/docs/developer-tooling/local-development/hubspot-cli/reference#fetch-files) un módulo predeterminado específico utilizando la ruta del módulo (por ejemplo, `hs fetch @hubspot/linked_image.module`). Para ver el código de un módulo predeterminado, puedes ver y clonar el módulo dentro de la carpeta `@hubspot` del administrador de diseño. En el código, algunos módulos predeterminados utilizan el ID de cuenta 7052064, en lugar del que pertenece a la cuenta actual. ![design-manager-default-modules](https://www.hubspot.es/hubfs/Knowledge_Base_2021/Developer/design-manager-default-modules.png) > [!WARNING] > > ### Nota: > > Los módulos web predeterminados son distintos de los [módulos de correo predeterminados](/docs/cms/start-building/building-blocks/modules/default-email-modules), que son para las plantillas de correo electrónico. Si las plantillas de correo incluyen cualquiera de los siguientes módulos web predeterminados, deberías [reemplazarlos con el módulo específico de correo correspondiente](https://developers.hubspot.es/docs/guides/cms/content/templates/default-email-modules): > > * `cta` > * `header` > * `linked_image` > * `logo` > * `post_filter` > * `post_listing` > * `section_header` > * `social_sharing` > * `text` ## Comentarios del blog Disponible en publicaciones de blog e índices de blog. ```hubl theme={null} {% module "blog_comments" path="@hubspot/blog_comments" %} ``` ## Suscripción a los correos electrónicos del blog Disponible en páginas, publicaciones de blog e índices de blog. ```hubl theme={null} {% module "blog_subscribe" path="@hubspot/blog_subscribe" %} ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `select_blog` | Blog | El blog que se usará en el módulo. | | | `title` | Cadena | Título del módulo (envuelto en una etiqueta h3) | `"Subscribe Here!"` | | `response_message` | Texto enriquecido | El mensaje que aparece al enviar el formulario. | `Thanks for subscribing!` | ## Publicaciones de blog Agrega este módulo a las páginas de índice del blog para mostrar vistas preliminares de las publicaciones, incluyendo el título, la imagen destacada, el autor, la fecha de publicación y más, con un botón en el que se puede hacer clic para acceder a cada publicación. Este módulo predeterminado se creó utilizando React, y puedes [ver su código fuente en GitHub](https://github.com/HubSpot/cms-react/tree/main/default-react-modules/src/components/modules/BlogPosts-V0). > [!WARNING] > > ### Nota: > > * No se puede acceder a este módulo desde el administrador de diseño. Se puede hacer referencia al módulo con HubL en plantillas codificadas y agregarlo en el [editor de la página de índice del blog](https://knowledge.hubspot.com/es/blog/edit-a-blog-listing-page). > * Este módulo reemplaza al módulo anterior `blog_listing`, que ha quedado obsoleto. ```hubl theme={null} {% module "blog_posts" path="@hubspot/blog_posts" layout="grid", columns=4, displayForEachListItem=[ "image", "title", "authorName", "tags", "publishDate", "description", "button" ] %} ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `layout` | Opción | La disposición del contenido para cada vista previa de publicación de blog.<ul><li>`grid` (predeterminado): alinea las publicaciones en una cuadrícula básica.</li><li>`singleColumn`: alinea las publicaciones en una sola columna con imágenes destacadas en su propia fila encima del resto del contenido de la publicación.</li><li>`sideBySide`: alinea las publicaciones en una columna con imágenes destacadas alineadas horizontalmente con el contenido de la publicación.</li></ul> | `grid` | | `columns` | Número | Cuando se utiliza la disposición `grid`, el número de publicaciones por fila. Puede ser `2`, `3` o `4`. | `3` | | `alternateImage` | Booleano | Al usar la disposición `sideBySide`, se define como `true` para alinear la imagen destacada en los lados derecho e izquierdo de la vista previa de la publicación, alternando. | `false` | | `fullImage` | Booleano | Al usar los diseños `grid` o `singleColumn`, definir este campo como `true` para que la imagen destacada sea el fondo de la vista previa de la publicación. | `false` | | `displayForEachListItem` | Matriz | El contenido que se incluirá en cada vista previa de la publicación del blog. Las opciones incluyen:<ul><li>`image`: la imagen destacada de la publicación.</li><li>`title`: el título de la publicación.</li><li>`authorImage`: la imagen del autor de la publicación.</li><li>`authorName`: el nombre del autor de la publicación.</li><li>`tags`: las etiquetas del blog de la publicación.</li><li>`publishDate`: la fecha de publicación del artículo.</li><li>`description`: la metadescripción de la publicación.</li><li>`button`: el botón "Más información" que se enlaza con la publicación del blog.</li></ul> | `[ 'image', 'title', 'authorImage', 'authorName', 'tags', 'publishDate', 'description', 'button' ]` | | `buttonText` | Cadena | El texto que aparece en el botón "Más información", si está incluido. | `Read more` | ## Filtro de publicación de blog Disponible en páginas, índices de blog y publicaciones de blog. ```hubl theme={null} {% module "post_filter" path="@hubspot/post_filter" %} ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `select_blog` | Blog | Seleccionar un blog para mostrarlo. Como valor predeterminado, se mostrará el blog actual cuando se use en una plantilla de blog, o el blog principal cuando se utilice en otros lugares. | | | `filter_type` | Opción | Tipos de enlaces de filtrado que se mostrarán. Las opciones incluyen:<ul><li>`tag`</li><li>`month`</li><li>`author`</li></ul> | `tag` | | `order_by` | Opción | Ordena los valores de los enlaces del filtro. Las opciones incluyen:<ul><li>`post_count`</li><li>`name`</li></ul> | `post_count` | | `list_title` | Texto | Un encabezado H3. | `"Posts by Tag"` | | `max_links` | Número | Número de enlaces de filtro que se mostrarán. Dejar en blanco para mostrar todos. | `5` | | `expand_link_text` | Texto | Texto para mostrar si hay disponible más que el `max_links` valor para mostrar. | `"See all"` | ## Índice de publicaciones de blog Disponible en páginas, índices de blog y publicaciones de blog. > [!WARNING] > > ### Nota: > > Una nueva versión de este módulo fue lanzada a finales de marzo de 2024. Más información sobre el [nuevo módulo de índice de publicaciones predeterminado](/docs/cms/reference/modules/default-module-versioning#post-listing). ```hubl theme={null} {% module "post_listing" path="@hubspot/post_listing" %} ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `select_blog` | Blog | Seleccionar un blog para mostrarlo. Como valor predeterminado, se mostrará el blog actual cuando se use en una plantilla de blog, o el blog principal cuando se utilice en otros lugares. | | | `listing_type` | Opción | El tipo de índice para las publicaciones. Las opciones incluyen:<ul><li>`recent`: más reciente.</li><li>`popular_all_time`: más popular de todos los tiempos.</li><li>`popular_past_year`: más popular el año pasado.</li><li>`popular_past_six_months`: más popular en los últimos seis meses.</li><li>`popular_past_month`: más popular el mes pasado.</li></ul> | `recent` | | `list_title` | Texto | Un encabezado H3. | `"Recent Posts"` | | `max_links` | Número | Número máximo de publicaciones que se mostrarán. | `5` | ## Botón Disponible en páginas, publicaciones de blog e índices de blog. ```hubl theme={null} {% module "button" path="@hubspot/button" %} ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `link` | Enlace | La URL a la que redirecciona el botón. | `{ "url": { "type": "EXTERNAL", "href": "www.hubspot.com", "content_id": null }, "open_in_new_tab": false, "no_follow": false }` | | `button_text` | Texto | Texto que se mostrará en el botón. | `"Add a button link here"` | | `style` | Objeto | <ul><li>`override_default_style` (booleano) </li><li>`button_font` (fuente) </li><li>`button_color` (color) </li><li>`text_hover_color` (color) </li><li>`button_hover_color` (color)</li></ul> | `{ "override_default_style": false, "button_font": { "color": "#FFFFFF", "size_unit": "px" }, "button_color": { "color": "#000000", "opacity": 100 }, "text_hover_color": { "color": "#000000", "opacity": 100 }, "button_hover_color": { "color": "#CCCCCC", "opacity": 100 } }` | ## Llamada a la acción Disponible en páginas, índices de blog y publicaciones de blog. ```hubl theme={null} {% module "cta" path="@hubspot/cta" %} ``` | Parámetro | Tipo | Descripción | | - | - | - | | `guid` | Cadena | Identificador único global de la CTA. | ## Eliminar datos A partir del 26 de mayo de 2025, este módulo ha quedado obsoleto en favor de la [función de la página de solicitud de privacidad de datos](https://knowledge.hubspot.com/es/privacy-and-consent/manage-data-privacy-requests). La información de referencia de este módulo se ha trasladado a la [documentación de los módulos obsoletos](/docs/cms/versions-deprecations/deprecated/modules#delete-data). ## Divisor Disponible en páginas. Hay una [nueva versión de este módulo](/docs/cms/reference/modules/default-module-versioning#divider) disponible en las cuentas creadas después del 25 de agosto de 2022. [Más información sobre este cambio](https://developers.hubspot.com/changelog/divider-module-v1). ```hubl theme={null} {% module "divider" path="@hubspot/divider" %} ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `height` | Número | Altura en píxeles (px) de la línea divisoria. | `1` | | `width` | Número | Porcentaje (%) de anchura de la línea divisoria. | `50` | | `color` | Color | Color (hexadecimal) y opacidad (número) de la línea divisoria. | `{ "color": "#000000", "opacity": 100 }` | | `line_type` | Opción | Tipo de línea. Las opciones incluyen:<ul><li>`solid`</li><li>`dotted`</li><li>`dashed`</li></ul> | `solid` | | `alignment` | Opción | Alineación horizontal de la línea divisoria. Las opciones incluyen:<ul><li>`left`</li><li>`center`</li><li>`right`</li></ul> | `center` | | `show_padding` | Booleano | Mostrar u ocultar los márgenes superior e inferior en el divisor. | `false` | | `padding` | Número | Valor en píxeles (px) del margen superior e inferior de la línea divisoria. Opción disponible cuando `show_padding` es igual a `true`. | `5` | ## Descargar datos A partir del 26 de mayo de 2025, este módulo ha quedado obsoleto en favor de la [función de la página de solicitud de privacidad de datos](https://knowledge.hubspot.com/es/privacy-and-consent/manage-data-privacy-requests). La información de referencia de este módulo se ha trasladado a la [documentación de los módulos obsoletos](/docs/cms/versions-deprecations/deprecated/modules#download-data). ## Formulario Disponible en páginas, publicaciones de blog e índices de blog. ```hubl theme={null} {% module "form" path="@hubspot/form" form={ "form_id": "9e633e9f-0634-498e-917c-f01e355e83c6", "response_type": "redirect", "message": "Thanks for submitting the form.", "redirect_id": null, "redirect_url": "http://www.google.com" } %} ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `title` | Texto | Encabezado H3 | | | `form` | Objeto | Objeto formulario que incluye:<ul><li>`form_id`: el ID del formulario que se usará</li><li>`response_type`: lo que el visitante verá después de enviar el formulario:<ul><li>`inline`</li><li>`redirect`</li></ul></li><li>`message`: mensaje en línea si `response_type` se define como `inline`</li><li>`redirect_id`: ID de la página a la que se redireccionará si `response_type` se define como `redirect`.</li><li>`redirect_url`: URL a la que se redireccionará si `response_type` se define como `redirect`</li></ul> | | | `{ "form_id": "", "response_type": "redirect", "message": "Thanks for submitting the form.", "redirect_id": null, "redirect_url": "http://www.google.com" }` | | | | | `notifications_are_overridden` | Booleano | Correo al que enviar la notificación en lugar de los valores predeterminados del formulario. | `false` | | `notifications_override_email_addresses` | Correo | Lista de comandos separados por comas para enviarlos cuando `notifications_are_overridden` es igual a `true`. | | | `follow_up_type_simple` | Booleano | Habilita el envío de un correo de seguimiento. | `false` | | `simple_email_for_live_id` | Correo de seguimiento | ID del correo de seguimiento. Disponible cuando `follow_up_type_simple` es igual a `true`. | | | `sfdc_campaign` | Campaña de Salesforce | Cuando la integración con Salesforce está activa, el ID de la campaña. | | ## Encabezado Disponible en páginas, índices de blog y publicaciones de blog. ```hubl theme={null} {% module "header" path="@hubspot/header" %} ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `value` | Texto | Texto del encabezado. | `"A clear and bold header"` | | `header_tag` | Opción | Elige un nivel de encabezado. La opción incluye `h1` a través de `h6`. | `h1` | ## Espaciador horizontal Disponible en páginas, índice de blog, publicaciones de blog y correos ```hubl theme={null} {% module "horizontal_spacer" path="@hubspot/horizontal_spacer" %} ``` ## Ícono Disponible en páginas, índices de blog y publicaciones de blog. Los íconos se pueden extraer de los conjuntos de íconos de Font Awesome 5.0.10 y 5.14.0. ```hubl theme={null} {% module "icon" path="@hubspot/icon" %} ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `name` | Cadena | El nombre del ícono. | `"hubspot"` | | `purpose` | Opción | Una opción de accesibilidad que clasifica el propósito del ícono para los lectores de pantalla. Los valores disponibles son:<ul><li>`decorative:` ignorados por el lector de pantalla.</li><li>`semantic:` leídos por el lector de pantalla.</li></ul> | `"decorative"` | | `title` | Cadena | Una opción de accesibilidad que asigna un título al ícono. | | | `style` | Cadena | El tipo de ícono. Puede ser una de las siguientes: `solid`, `regular`, `light`, `thin` o `duotone`. | `"solid"` | | `unicode` | Cadena | El valor unicode del ícono. | `f3b2` | ## Imagen Disponible en páginas, índices de blog y publicaciones de blog. ```hubl theme={null} {% module "linked_image" path="@hubspot/linked_image" %} ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `img` | Imagen | Objeto imagen que contiene:<ul><li>`src`: URL de la imagen</li><li>`alt`: texto alternativo para la imagen</li><li>`loading`: las opciones de carga diferida incluyen:<ul><li>`disabled`</li><li>`lazy`</li></ul></li><li>`width`: valor en píxeles</li><li>`height`: valor en píxeles</li></ul> | `{ "src": "https://static.hubspot.com/final/img/content/email-template-images/placeholder_200x200.png", "alt": "placeholder_200x200", "loading": "disabled", "width": 200, "height": 200 }` | | `link` | Texto | Enlace opcional para la imagen. | | | `target` | Booleano | Abre el enlace en una nueva pestaña. | `false` | ## Cuadrícula de imágenes Disponible en páginas, índices de blog y publicaciones de blog. ```hubl theme={null} {% module "image_grid" path="@hubspot/image_grid", label="image_grid.module" %} ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `slides` | Objeto | Objeto que contiene información para cada diapositiva. El objeto contiene:<ul><li>`img`: URL de la imagen.</li><li>`link_url`: URL donde se debe enlazar la diapositiva.</li><li>`hover_messages`: texto que se superpone a la imagen al pasar el cursor por encima.</li></ul> | `[ { "show_caption": false, "open_in_new_tab": false } ]` | | `display_mode` | Opción | Modo de visualización de la galería de imágenes. Las opciones incluyen:<ul><li>`standard`: control deslizante estándar.</li><li>`thumbnail`: navegador de miniaturas.</li><li>`lightbox`: galería lightbox.</li></ul> | `standard` | | `lightboxRows` | Número | Número de filas en la galería lightbox cuando `display_mode` es igual a `lightbox`. | `3` | | `loop_slides` | Booleano | Permite recorrer las diapositivas en bucle con siguiente y anterior cuando `display_mode` es igual a `standard` o `thumbnail`. | `true` | | `auto_advance` | Booleano | Avanza automáticamente a la siguiente diapositiva cuando `display_mode` es igual a `standard` o `thumbnail`. | `true` | | `num_seconds` | Número | Cantidad de tiempo (segundos) entre el avance a la siguiente diapositiva cuando `display_mode` es igual a `standard` o `thumbnail`. | `5` | | `show_pagination` | Booleano | Mostrar botones de navegación cuando `display_mode` es igual a `standard` o `thumbnail`. | `true` | | `sizing` | Opción | Fija la altura de las diapositivas cuando `display_mode` es igual a `standard` o `thumbnail`. Las opciones incluyen:<ul><li>`static`: altura fija.</li><li>`resize`: altura variable.</li></ul> | `static` | | `transition` | Opción | Estilos de transición de diapositiva cuando `display_mode` es igual a `standard` o `thumbnail`. Las opciones incluyen:<ul><li>`slide`: transición de deslizamiento.</li><li>`fade`: transición de desvanecimiento.</li></ul> | `slide` | | `caption_position` | Opción | Posición de los subtítulos de la diapositiva cuando `display_mode` es igual a `standard` o `thumbnail`. Las opciones incluyen:<ul><li>`below`: mantener los subtítulos siempre debajo de la imagen.</li><li>`superimpose`: superponer los subtítulos encima de las imágenes.</li></ul> | `below` | ## Galería de imágenes Disponible en páginas, publicaciones de blog e índices de blog. ```hubl theme={null} {% module "gallery" path="@hubspot/gallery" %} ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `slides` | Objeto | Objeto que contiene información para cada diapositiva. El objeto contiene:<ul><li>`img`: URL de la imagen.</li><li>`show_caption`: valor booleano para mostrar los subtítulos de la diapositiva.</li><li>`caption`: texto enriquecido para la leyenda.</li><li>`link_url`: URL donde la diapositiva debe enlazarse.</li><li>`open_in_new_tab`: valor booleano para indicar si el enlace debe abrirse en una nueva pestaña.</li></ul> | `[ { "show_caption": false, "open_in_new_tab": false } ]` | | `display_mode` | Opción | Modo de visualización de la galería de imágenes. Las opciones incluyen:<ul><li>`standard`: control deslizante estándar.</li><li>`thumbnail`: navegador de miniaturas.</li><li>`lightbox`: galería lightbox.</li></ul> | `standard` | | `lightboxRows` | Número | Número de filas en la galería lightbox cuando `display_mode` es igual a `lightbox`. | `3` | | `loop_slides` | Booleano | Permite recorrer las diapositivas en bucle con siguiente y anterior cuando `display_mode` es igual a `standard` o `thumbnail`. | `true` | | `auto_advance` | Booleano | Avanza automáticamente a la siguiente diapositiva cuando `display_mode` es igual a `standard` o `thumbnail`. | `true` | | `num_seconds` | Número | Cantidad de tiempo (segundos) entre el avance a la siguiente diapositiva cuando `display_mode` es igual a `standard` o `thumbnail`. | `5` | | `show_pagination` | Booleano | Mostrar botones de navegación cuando `display_mode` es igual a `standard` o `thumbnail`. | `true` | | `sizing` | Opción | Fija la altura de las diapositivas cuando `display_mode` es igual a `standard` o `thumbnail`. Las opciones incluyen:<ul><li>`static`: altura fija.</li><li>`resize`: altura variable.</li></ul> | `static` | | `transition` | Opción | Estilos de transición de diapositiva cuando `display_mode` es igual a `standard` o `thumbnail`. Las opciones incluyen:<ul><li>`slide`: transición de deslizamiento.</li><li>`fade`: transición de desvanecimiento.</li></ul> | `slide` | | `caption_position` | Opción | Posición de los subtítulos de la diapositiva cuando `display_mode` es igual a `standard` o `thumbnail`. Las opciones incluyen:<ul><li>`below`: mantener los subtítulos siempre debajo de la imagen.</li><li>`superimpose`: superponer los subtítulos encima de las imágenes.</li></ul> | `below` | ## Galería de imágenes deslizable Disponible en páginas, publicaciones de blog e índices de blog. ```hubl theme={null} {% module "unique_name" path="@hubspot/image_slider_gallery", slides=[ { "img": { "src": "", "alt": "Default image alt text" }, "caption": "<strong>1</strong> An optional caption for the image that will be added to the gallery. Enter any descriptive text for this image that you would like visitors to be able to read.", "link_url": "" }, { "img": { "src": "", "alt": "Default image alt text" }, "caption": "<strong>2</strong> An optional caption for the image that will be added to the gallery. Enter any descriptive text for this image that you would like visitors to be able to read.", "link_url": "" } ] slideshow_settings={ "slides": { "per_page": 1, "sizing": "natural", "aspect_ratio": "16/9", "show_captions": true, "caption_position": "below" }, "movement": { "transition": "slide", "loop_slides": false, "auto_advance": false, "auto_advance_speed_seconds": 5 }, "navigation": { "show_main_arrows": true, "show_thumbnails": false, "show_dots": false } } %} ``` | Parámetro | Tipo | Descripción | | - | - | - | | `slides` | Grupo de campos | Un grupo de campos que contiene los siguientes campos:<ul><li>`img`: URL de la imagen.</li><li>`caption`: texto enriquecido para el pie de imagen.</li><li>`link_url`: URL con la que se enlaza la diapositiva.</li></ul> | | `slideshow_settings` | Grupo de campos | El grupo de campos de configuración del control deslizante de la imagen. Incluye los siguientes grupos de campos:<ul><li>`slides`: ajustes de diapositivas, que incluyen:<ul><li>`per_page`: número de diapositivas por página.</li><li>`sizing`: tamaño de la imagen.</li><li>`aspect_ratio`: relación de aspecto de la imagen.</li><li>`show_captions`: un valor booleano</li></ul></li><li>`movement`: configuración del comportamiento del deslizamiento de imágenes.</li><li>`navigation`: configuración de navegación por imágenes.</li></ul> | | `default_text` | Grupo de campos | Los elementos de texto predeterminados del módulo, que incluyen:<ul><li>`default_caption`: subtítulo de la imagen.</li><li>`default_image_alt_text`: texto de la imagen.</li><li>`slider_aria_label`: la etiqueta ARIA predeterminada del módulo.</li><li>`arial_label_thumbnails`: la miniatura ARIA predeterminada del módulo.</li><li>`slider_nav_aria_label`: la etiqueta ARIA predeterminada de la barra de navegación del módulo.</li><li>`prev`: texto de la diapositiva anterior.</li><li>`next`: texto de la diapositiva siguiente.</li><li>`first`: ir al texto de la primera diapositiva.</li><li>`slideX`: ir al texto de la diapositiva X.</li><li>`pageX`: ir al texto de la página X.</li><li>`play`: iniciar texto de reproducción automática.</li><li>`pause`: pausar texto de reproducción automática.</li><li>`carousel`: texto del carrusel.</li><li>`select`: texto para seleccionar una diapositiva para mostrarla.</li><li>`slide`: texto de la diapositiva.</li><li>`slidelabel`: etiqueta de la diapositiva.</li></ul> | ## Selector de idiomas Disponible en páginas. ```hubl theme={null} {% module "language_switcher" path="@hubspot/language_switcher" %} ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `display_mode` | Opción | El idioma del texto del selector de idiomas. Las opciones incluyen:<ul><li>`pagelang`: el nombre de los idiomas aparecerá en el idioma de la página en la que está el conmutador.</li><li>`localized`: el nombre de cada idioma aparecerá en ese idioma.</li><li>`hybrid`: una combinación de ambas opciones.</li></ul> | `localized` | ## Logotipo Disponible en páginas, índices de blog y publicaciones de blog. ```hubl theme={null} {% module "logo" path="@hubspot/logo" %} ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `img` | Imagen | Objeto imagen que contiene:<ul><li>`override_inherited_src`: anula el logotipo predeterminado desde la configuración</li><li>`src`: URL de la imagen</li><li>`alt`: texto alternativo para el logotipo</li></ul> | `{ "override_inherited_src": false, "src": null, "alt": null }` | | `link` | Texto | Enlace opcional para el logotipo. Si no se especifica ninguna URL, el logotipo se vinculará a la *URL del logotipo* en la [configuración de la marca](https://knowledge.hubspot.com/es/branding/edit-your-logo-favicon-and-brand-colors#edit-your-logo). | | | `open_in_new_tab` | Booleano | Abre el enlace en una nueva pestaña. | `false` | | `suppress_company_name` | Booleano | Ocultar el nombre de la empresa cuando no se selecciona una imagen. | `true` | | `heading_level` | Opción | Elegir un nivel de encabezado cuando no hay ninguna imagen seleccionada y `suppress_company_name` es igual a `false` Las opciones incluyen desde `h1` hasta `h6`. | `h1` | ## Cuadrícula del logotipo Una cuadrícula personalizable de contenedores para mostrar los logotipos de manera uniforme. Disponible en páginas, índices de blog y publicaciones de blog. ```hubl theme={null} {% module "logo grid" path="@hubspot/logo_grid" group_logos=[ { "logo": { "loading": "lazy", "alt": "company_logo", "src": "https://www.example.com/Logos/color/logo.png" } }, { "logo": { "loading": "lazy", "alt": "company2_logo", "src": "https://www.example.com/Logos/color/logo2.png" } }, { "logo": { "alt": "lorem-logo", "height": 40, "loading": "lazy", "max_height": 40, "max_width": 175, "src": "https://www.example.com/Logos/color/logo3.png", "width": 175 } } ], styles={ "group_logo": { "group_background": { "aspect_ratio": "1/1", "background_color": { "color": "#8E7CC3", "opacity": 100 } }, "group_spacing": { "padding": { "padding": { "bottom": { "units": "px", "value": 75 }, "left": { "units": "px", "value": 75 }, "right": { "units": "px", "value": 75 }, "top": { "units": "px", "value": 75 } } } }, "max_logo_height": 85 }, "group_logo_grid": { "column_count": 3, "grid_gap": 54 } } %} ``` | Parámetro | Tipo | Descripción | | - | - | - | | `group_logos` | Matriz | Una matriz que contiene un objeto para cada logotipo en la cuadrícula. | | `logo` | Objeto | En `group_logos`, un objeto para cada logotipo en la cuadrícula. Cada logotipo puede incluir los siguientes parámetros:<ul><li>`src`: la ruta del archivo del logotipo.</li><li>`loading`: el comportamiento de la [carga diferida](/docs/cms/best-practices/testing-staging-performance/lazy-loading) del logotipo.</li><li>`alt`: el texto alternativo del logotipo.</li><li>`height`: la altura del logotipo.</li><li>`width`: la anchura del logotipo.</li><li>`max_height`: la altura máxima del logotipo.</li><li>`max_width`: la anchura máxima del logotipo.</li></ul> | | `styles` | Matriz | Una matriz que contiene los campos de estilo que afectan a la disposición de la cuadrícula, a los contenedores de logotipos y a las imágenes de logotipos. Esta matriz contiene los siguientes grupos de estilos:<ul><li>`group_logo`: estilos que afectan a los contenedores e imágenes de logotipos. Contiene lo siguiente:<ul><li>`group_background`: estilos que definen la relación de aspecto y el color de fondo de los contenedores de cuadrícula. Las relaciones de aspecto incluyen: `1/1`, `4/3`, `16/9`.</li><li>`group_spacing`: estilos que definen el relleno interior del contenedor del logotipo. Para logotipos más anchos, un valor de relleno más alto puede disminuir la anchura del logotipo.</li><li>`max_logo_height`: la altura máxima de cada logotipo.</li></ul></li><li>`group_logo_grid`: estilo que define la disposición de la cuadrícula, incluidos:<ul><li>`column_count`: el número de columnas de la cuadrícula.</li><li>`grid_gap`: el espaciado entre los elementos de la cuadrícula.</li></ul></li></ul> | ## Reuniones Disponible en páginas, publicaciones de blog e índices de blog. ```hubl theme={null} {% module "meetings" path="@hubspot/meetings" %} ``` | Parámetro | Tipo | Descripción | | - | - | - | | `meeting` | Reunión | Seleccionar un enlace de reunión. | ## Inicios de sesión de redes sociales para membresías Proporciona opciones de inicio de sesión de Google y Facebook para las [páginas de membresía](/docs/cms/start-building/features/memberships/overview). El usuario debe iniciar sesión con una cuenta vinculada a la dirección de correo electrónico del registro de contacto en el CRM. Puedes elegir qué opciones de inicio de sesión con redes sociales deseas habilitar. Disponible en páginas de inicio de sesión de membresías. ```hubl theme={null} {% module "social" path="@hubspot/membership_social_logins", clientid="" appid="" facebook_enabled=true google_enabled=true %} ``` > [!NOTE] > > Facebook requiere que se tenga una [cuenta de desarrollador de Facebook](https://developers.facebook.com/docs/development/register) y una [aplicación de Facebook](https://developers.facebook.com/docs/development/create-an-app) con una configuración básica. Una vez que hayas hecho eso, el ID de la aplicación es lo que pasas al módulo. > > Google requiere que exista una cuenta de Google y que se [creen credenciales de autorización](https://developers.google.com/identity/sign-in/web/sign-in#create_authorization_credentials). Cuando lo tengas, el ID de cliente de tu aplicación será lo que pases al módulo. | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `facebook_appid` | Cadena | El ID de tu aplicación de Facebook. | | | `facebook_enabled` | Booleano | Activar el botón de inicio de sesión de Facebook `facebook_appid` es obligatorio. | `False` | | `google_clientid` | Cadena | Tu ID de cliente de Google. | | | `google_enabled` | Booleano | Activar el botón de inicio de sesión de Google. `google_clientid` es obligatorio. | `False` | ## Menú Disponible en páginas, publicaciones de blog e índices de blog. Si quieres crear tu propio menú personalizado, Prueba la [función menu().](/docs/cms/reference/hubl/functions#menu) ```hubl theme={null} {% module "menu" path="@hubspot/menu" %} ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `id` | Menú | ID del menú. | | | `root_type` | Opción | Tipo de menú avanzado. Las opciones incluyen:<ul><li>`site_root`: mostrar siempre las páginas de nivel superior en el menú.</li><li>`top_parent`: mostrar las páginas del menú que están relacionadas con la sección que se está viendo.</li><li>`parent`: mostrar las páginas del menú que están relacionadas con la página que se está viendo.</li><li>`breadcrumb`: menú de ruta al estilo de navegación (usa flujo horizontal).</li></ul> | `site_root` | | `max_levels` | Opción | Determina el número de árboles de menú secundarios que se pueden expandir en el menú. Las opciones incluyen del `1` al `10` | `2` | | `flow` | Opción | Orientación del menú. Las opciones incluyen:<ul><li>`horizontal`</li><li>`vertical`</li></ul> | `horizontal` | | `flyouts` | Booleano | Función de habilitación con el cursor encima en los elementos del menú secundario. | `true` | ## Pie de página Disponible en páginas, índices de blog y publicaciones de blog. ```hubl theme={null} {% module "page_footer" path="@hubspot/page_footer" %} ``` ## Solicitud de contraseña Disponible en páginas, publicaciones de blog e índices de blog. ```hubl theme={null} {% module "password_prompt" path="@hubspot/password_prompt" %} ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `submit_button_text` | Texto | Texto que aparece en el botón de envío. | `"Submit"` | | `password_placeholder` | Texto | : Texto del marcador de posición para el campo de contraseña. | `"Password"` | | `bad_password_message` | Texto enriquecido | Mensaje para mostrar cuando se introduce una contraseña incorrecta. | `"Sorry, please try again. "` | ## Pagos Disponible en páginas, publicaciones de blog e índices de blog. ```hubl theme={null} {% module "payments" path="@hubspot/payments" %} ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `payment` | Cadena | Para configurar el módulo para que utilice un enlace de pago específico, debes incluir el ID del enlace de pago. Puedes [encontrar el ID](/docs/cms/reference/fields/module-theme-fields#link) en la URL mientras editas el enlace de pago. | | | `checkout_location` | Cadena | Define si el formulario de pago se abre en una nueva pestaña o en una ventana emergente. Los valores disponibles son:<ul><li>`new_tab`: abre el formulario de pago en una nueva pestaña.</li><li>`overlay`: abre el formulario de pago en una ventana emergente deslizante.</li></ul> | `"new_tab"` | | `button_text` | Cadena | Definir el texto del botón de pago. | `"Checkout"` | | `button_target` | Opción | Si el botón utiliza un enlace de pago de HubSpot o un enlace externo. Las opciones incluyen:<ul><li>`payment_link`</li><li>`custom_link`</li></ul> | `"payment_link"` | | `button_link` | Enlace | Cuando `button_target` se define como `custom_link`, define el destino del enlace externo. Los tipos de enlaces compatibles incluyen:<ul><li>`EXTERNAL`</li><li>`CONTENT`</li></ul> | `EXTERNAL` | ## Producto Muestra un producto de la [biblioteca de productos](https://knowledge.hubspot.com/es/products/create-and-manage-products) de la cuenta. Disponible en páginas, publicaciones de blog e índices de blog. ```hubl theme={null} {% module path="@hubspot/product", product={ "id" : 2124070179 }, group_button={ "button_text" : "Buy", "override_product_button" : true, "button_override" : { "no_follow" : false, "open_in_new_tab" : false, "sponsored" : false, "url" : { "href" : "https://www.test.com", "type" : "EXTERNAL" } }, group_description={ "description_override" : "Monthly gym membership with access to shared locker facilities.", "override_product_description" : true }, group_name={ "heading_level" : "h3", "name_override" : "Gym membership", "override_product_name" : true }, group_image={ "image_override" : { "alt" : "360_F_317724775_qHtWjnT8YbRdFNIuq5PWsSYypRhOmalS", "height" : 360, "loading" : "lazy", "src" : "https://2272014.fs1.hubspotusercontent-na1.net/hubfs/2272014/360_F_317724775_qHtWjnT8YbRdFNIuq5PWsSYypRhOmalS.jpg", "width" : 640 }, "override_product_image" : true } %} ``` | Parámetro | Tipo | Descripción | | - | - | - | | `product` | Producto | El producto que se mostrará, especificado por ID de producto. | | `group_button` | Grupo de campos | De forma predeterminada, el módulo incluye un botón que dirige a los usuarios a la URL fijada para el producto. Para personalizar el destino del botón, incluye este grupo de campos opcionales junto con los siguientes campos:<ul><li>`button_text`: una cadena que define el texto del botón.</li><li>`override_product_button`: se define como `true` para anular la configuración predeterminada del enlace del botón. Luego, incluye el objeto `button_override`. Más información sobre `button_override` abajo.</li></ul> | | `button_override` | Objeto | En el grupo de objetos `group_button` define el comportamiento de la URL del botón cuando `override_product_button` se define como `true`. Incluye los siguientes campos:<ul><li>`no_follow`: campo booleano para el comportamiento [no\_follow](https://ahrefs.com/blog/nofollow-links/) del enlace.</li><li>`open_link_in_new_tab`: campo booleano para el comportamiento del enlace abierto.</li><li>`url`: un objeto que especifica el destino del botón.</li></ul>En el campo `url`, puedes definir el tipo de destino a través del campo `type`, que admite los siguientes tipos de contenidos:<ul><li>`EXTERNAL`: una URL estándar. Incluir la URL en un campo `href`.</li><li>`CONTENT`: una página de HubSpot. Incluir el ID de la página en un campo `content_id`.</li><li>`PAYMENT`: un enlace de pago. Incluir el enlace de pago en un campo `href`.</li><li>`EMAIL_ADDRESS`: una dirección de correo electrónico. Incluir la dirección en un campo `href`.</li></ul> | | `group_name` | Grupo de campos | De forma predeterminada, el módulo mostrará el nombre del producto en la parte superior del módulo como un h3. Para personalizar el nombre, incluye este grupo de campos opcionales junto con los siguientes campos:<ul><li>`heading_level`: el tamaño del encabezado. Puede ser del `h1` al `h6`.</li><li>`override_product_name`: se define como `true` para especificar texto en lugar del nombre del producto.</li><li>`name_override`: la cadena que quieres mostrar en la parte superior del módulo.</li></ul> | | `group_description` | Grupo de campos | De forma predeterminada, el módulo mostrará la descripción del conjunto del producto. Para personalizar la descripción, incluye este grupo de campos opcionales junto con los siguientes campos:<ul><li>`override_product_description`: definir como `true` para personalizar la descripción del producto.</li><li>`description_override`: una cadena que contiene la nueva descripción.</li></ul> | | `group_image` | Grupo de campos | De forma predeterminada, el módulo mostrará la imagen seleccionada para el producto. Para personalizar esta imagen, incluye este grupo de campos opcionales con los siguientes campos:<ul><li>`override_product_image`: definir como `true` para especificar una nueva imagen. </li><li>`image_override`: un objeto que especifica la nueva imagen, incluyendo las siguientes propiedades:<ul><li>`alt`</li><li>`height`</li><li>`loading`</li><li>`src`</li><li>`width`</li></ul></li></ul> | ## Descarga de cotizaciones Disponible en las plantillas de cotización. ```hubl theme={null} {% module "download" path="@hubspot/quote_download" %} ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `button_text` | Cadena | El texto que se muestra en el botón de descarga. | `Download` | | `download_error` | Cadena | Mensaje de error que se muestra si falla la descarga. | `There was a problem downloading the quote. Please try again.` | ## Pago de cotizaciones Disponible en las plantillas de cotización. ```hubl theme={null} {% module "payment" path="@hubspot/quote_payment" %} ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `heading_text` | Cadena | El encabezado que aparece encima de la sección de pago de una plantilla de cotización. | `Payment` | | `heading_tag` | Opción | El tipo de encabezado utilizado para mostrar `heading_text`. Los valores incluyen: `h1`, `h2`, `h3`, `h4`, `h5`, `h6`. | `h3` | | `checkout` | Cadena | El texto del botón de pago. | `Pay now` | | `needs_signature` | Cadena | Texto del botón cuando se requiere una firma. | `Payment can't be made because the quote isn't fully signed.` | | `checkout_error` | Texto enriquecido | Mensaje que se muestra cuando hay un error durante el pago. | `There was a problem setting up checkout. Please contact the person who sent you this quote.` | | `payment_status_error` | Texto enriquecido | Mensaje que se muestra cuando hay un error al intentar realizar un pago. | `There was a problem loading the payment status for this quote. Please try refreshing the page.` | | `paid` | Cadena | Un indicador de estado de pago hecho correctamente. | `Paid` | | `payment_processing` | Cadena | Un indicador de estado del procesamiento de un pago. | `Payment processing` | ## Firma de cotizaciones Disponible en las plantillas de cotización. ```hubl theme={null} {% module "signature" path="@hubspot/quote_signature" %} ``` Cuando una cotización requiere una firma electrónica, los siguientes campos están disponibles dentro de un objeto `esignature`: | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `pretext` | Texto enriquecido | Texto explicativo de la firma electrónica. | `Before you sign this quote, an email must be sent to you to verify your identity. Find your profile below to request a verification email.` | | `verify_button` | Cadena | Texto que aparece en el botón de verificación. | `Verify to sign` | | `failure` | Cadena | Texto de alerta que aparece cuando no se puede obtener la información de la firma. | `There was a problem retrieving the signature information. Please reload the page.` | | `verification_sent` | Cadena | Un indicador de estado que aparece cuando la solicitud de verificación se envió correctamente al firmante de la cotización. | `Verification sent` | | `signed` | Cadena | Texto que se muestra cuando la cotización fue firmada correctamente. | `Signed` | Cuando una cotización requiere una firma impresa, los siguientes campos están disponibles dentro de un objeto `print_signature`: | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `header` | Texto enriquecido | Texto que se muestra en la parte superior de la sección de la firma. | `Signature` | | `signature` | Cadena | Texto que se muestra junto al campo de firma. | `Signature` | | `date` | Cadena | Texto que se muestra junto al campo de fecha. | `Date` | | `printed_name` | Cadena | Texto que se muestra junto al campo del nombre impreso. | `Printed name` | | `countersignature` | Objeto | Un objeto que contiene el contenido para la sección de contrafirma Este objeto puede contener los siguientes campos:<ul><li>`header`: texto que se muestra en la parte superior de la sección de refrendo.</li><li>`countersignature`: texto que se muestra junto al campo de refrendo.</li><li>`date`: texto que se muestra junto al campo de fecha.</li><li>`printed_name`: texto que se muestra junto al campo del nombre impreso.</li></ul> | `Signed` | ## Elementos de pedido Disponible en las plantillas de cotización. Este módulo también incluye el texto predeterminado utilizado en las cotizaciones personalizadas. ```hubl theme={null} {% module "module_165350106057652" path="@hubspot/line_items", label="line_items.module" %} ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `title` | Texto | El título de la columna del elemento de pedido. | `Column description` | | `use_additional_product_property` | Booleano | Mostrar casilla de verificación para permitir a los usuarios seleccionar columnas de elementos de pedido adicionales de las propiedades del producto. | `False` | | `additional_product_properties` | Opción | Una propiedad de producto. Las opciones incluyen: <ul><li>`price`: precio de elemento de pedido. </li><li>`item_description`: descripción de elemento de pedido. </li><li>`quantity`: número de elementos de pedido. </li><li>`amount`: precio total de elementos de pedido. </li><li>`hs_recurring_billing_start_date`: fecha de inicio de facturación para elementos de pedido recurrentes. </li><li>`discount`: la cantidad del descuento que se aplica al elemento de pedido. </li></ul> | | | `crm_product_property` | Propiedad de objeto del CRM | Seleccionar cualquier propiedad de producto para que aparezca como un encabezado de columna de elemento de pedido. | | ## Texto enriquecido Disponible en todos los tipos de plantillas. ```hubl theme={null} {% module "rich_text" path="@hubspot/rich_text" %} ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `html` | Texto enriquecido | Bloque HTML. | ` ## Something Powerful \n ### Tell The Reader More \n The headline and subheader tells us what you're [offering](https://developers.hubspot.es/docs\"#\"), and the form header closes the deal. Over here you can explain why your offer is so great it's worth filling out a form for. \n Remember: \n<ul>\n<li>Bullets are great</li>\n<li>For spelling out [benefits](https://developers.hubspot.es/docs\"#\") and</li>\n<li>Turning visitors into leads.</li>\n</ul>` | ## Listado de RSS Disponible en páginas, índices de blog y publicaciones de blog. ```hubl theme={null} {% module "rss_listing" path="@hubspot/rss_listing" %} ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `title` | Texto | Un encabezado H3. | `"Test"` | | `rss_feed_type` | Opción | Tipo de fuente RSS. Las opciones incluyen:<ul><li>`blog` - Blog alojado en HubSpot.</li><li>`external` - Una fuente RSS externa.</li></ul> | `blog` | | `rss_url` | Texto | URL de RSS que se usará cuando `rss_feed_type` es igual a `external`. | | | `content_group_id` | Blog | ID del blog que se usará cuando `rss_feed_type` es igual a `blog`. | | | `topic_id` | Etiqueta | (opcional) ID de la etiqueta con la que filtrar cuando `rss_feed_type` es igual a `blog`. | | | `number_of_items` | Número | Número máximo de publicaciones que se mostrarán. | `5` | | `include_featured_image` | Booleano | Incluir la imagen destacada. | `false` | | `show_author` | Booleano | Mostrar el nombre del autor. | `true` | | `attribution_text` | Texto | Texto que atribuye un autor a una publicación. Se muestra cuando `show_author` es igual a `true`. | `"by"` | | `show_detail` | Booleano | Mostrar el texto de resumen de la publicación. | `true` | | `limit_to_chars` | Número | Limita la extensión del texto de resumen cuando `show_detail` es igual a `true`. | `200` | | `click_through_text` | Texto | El texto que se mostrará para el enlace de redireccionamiento al final del resumen de una publicación cuando `show_detail` es igual a `true`. | `"Read more"` | | `show_date` | Booleano | Mostrar fecha de publicación. | `true` | | `publish_date_format` | Opción | Formato de la fecha de publicación cuando `show_date` es igual a `true`. Las opciones incluyen:<ul><li>`short` (ejemplo: 11/06/06 12:00)</li><li>`medium` (ejemplo: 6 de junio de 2006 12:00:00)</li><li>`long` (ejemplo: 6 de junio de 2017 12:00:00 EDT)</li><li>`MMMM d, yyyy 'at' h:mm a` (ejemplo: 6 de junio de 2006 a las 12:00)</li><li>`h:mm a 'on' MMMM d, yyyy` (ejemplo: 12:00 del 6 de junio de 2006)</li></ul> | `short` | | `publish_date_text` | Texto | El texto que indica cuándo se publicó una entrada cuando `show_date` es igual a `true`. | `"posted at"` | ## Input de búsqueda en el sitio Disponible en páginas, publicaciones de blog e índices de blog. ```hubl theme={null} {% module "search_input" path="./local-search_input" placeholder="Search" include_search_button=true results={ "use_custom_search_results_template": "true", "path_id": "77977569400" } %} ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `field_label` | Texto | Texto de etiqueta de entrada de búsqueda | | | `placeholder` | Texto | Texto del marcador de posición para el campo de entrada. | `"Search"` | | `include_search_button` | Booleano | Incluir un botón de búsqueda. | `false` | | `content_types` | Objeto | Qué tipos de contenido incluir en los resultados de búsqueda. El objeto contiene las siguientes claves con valores booleanos:<ul><li>`website_pages`</li><li>`landing_pages`</li><li>`blog_posts`</li><li>`knowledge_articles`</li></ul> | `{ "website_pages": true, "landing_pages": false, "blog_posts": true, "knowledge_articles": false }` | | `results` | Objeto | Un objeto que habilita los controles para usar una página de resultados de búsqueda personalizada. Incluye las siguientes propiedades: <ul><li>`use_custom_search_results_template` **(booleano):** cuando se define como `true`, los usuarios pueden seleccionar una página de resultados de búsqueda personalizada. El valor predeterminado es `false`.</li><li>`path_id` **(cadena):** el ID de la página que se utilizará para los resultados de búsqueda. La página referenciada debe contener el módulo de resultados de búsqueda.</li></ul> | | ## Resultados de la búsqueda Disponible en páginas, publicaciones de blog e índices de blog. ```hubl theme={null} {% module "search_results" path="@hubspot/search_results" %} ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `display_featured_images` | Booleano | Mostrar imágenes destacadas para los elementos. | `false` | ## Encabezado de la sección Disponible en páginas, índices de blog y publicaciones de blog. ```hubl theme={null} {% module "section_header" path="@hubspot/section_header" %} ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `header` | Texto | Contenido del encabezado de la sección. | `"A clear and bold header"` | | `heading_level` | Opción | Nivel de encabezado para `header`. Las opciones incluyen desde `h1` hasta `h6`. | `h1` | | `subheader` | Texto | Texto del párrafo del subencabezado para la sección. | `"A more subdued subheader"` | ## Menú simple Disponible en páginas, índices de blog y publicaciones de blog. ```hubl theme={null} {% module "simple_menu" path="@hubspot/simple_menu" %} ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `menu_tree` | Menú simple | Objeto de menú simple. | `[]` | | `orientation` | Opción | Orientación del menú. Las opciones incluyen:<ul><li>`horizontal`</li><li>`vertical`</li></ul> | `horizontal` | ## Seguimiento en redes sociales Agrega enlaces a tus perfiles de redes sociales, reordenando mediante la función de arrastrar y soltar en el editor de contenido. Inserta automáticamente íconos basados en la URL de la red social, pero estos pueden anularse. Disponible en páginas, índices de blog y publicaciones de blog. ```hubl theme={null} {% module "social_follow" path="@hubspot/social_follow" %} ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `link` | Texto | El enlace de destino para la página de redes sociales agregada en el editor. | | | `open_in_new_window` | Booleano | Cuando se define como `false`, el enlace se abrirá en la misma pestaña del navegador. | `true` | | `is_podcast` | Booleano | Se define como `true` para que aparezca un ícono de pódcast en lugar de un ícono predeterminado o personalizado. | `false` | | `customize_alt_text` | Booleano | De forma predeterminada, el texto alternativo se genera automáticamente. Si se define como `true`, puedes anular el texto alternativo predeterminado con un valor personalizado usando el campo `aria_label`. | `false` | | `aria-label` | Cadena | Cuando `customize_alt_text` es `true`, este campo define el texto alternativo del ícono (por ejemplo, `Follow us on Facebook`). Los lectores de pantalla lo usan para describirles el ícono a usuarios con discapacidad visual. | `False` | | `customize_icon` | Booleano | De forma predeterminada, los íconos se rellenan automáticamente según la URL del enlace. Cuando se define como `true`, puedes usar el campo `custom_icon` para seleccionar uno de los otros íconos proporcionados (Font Awesome 6.4.2). | `false` | | `custom_icon` | Ícono | Cuando `customize_icon` es `true` y `is_podcast` es `false`, utiliza este campo para especificar un ícono personalizado del conjunto proporcionado. Los íconos disponibles son de Font Awesome 6.4.2. | | ## Compartir en redes sociales Disponible en páginas, índices de blog y publicaciones de blog. ```hubl theme={null} {% module "social_sharing" path="@hubspot/social_sharing" %} ``` Nota: La variable `social_link_url` en la columna predeterminada que aparece abajo es el mismo valor que el parámetro `link`. | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `link` | Texto | Este es el enlace de destino que se acortará para compartirlo más fácilmente en las redes sociales. | | | `facebook` | Objeto | Objeto que contiene:<ul><li>`enabled`: valor booleano para activar el elemento de redes sociales</li><li>`custom_link_format`: URL personalizada para la URL del usuario que comparte en las redes sociales</li></ul> | `{ "enabled": false, "custom_link_format": "http://www.facebook.com/share.php?u={{ social_link_url }}" }` | | `twitter` | Objeto | Objeto que contiene:<ul><li>`enabled`: valor booleano para activar el elemento de redes sociales</li><li>`custom_link_format`: URL personalizada para la URL del usuario que comparte en las redes sociales</li></ul> | `{ "enabled": false, "custom_link_format": "https://twitter.com/intent/tweet?original_referer=\{\{ social_link_url }}&url={{ social_link_url }}&source=tweetbutton&text={{ social_page_title\|urlencode }}" }` | | `linkedin` | Objeto | Objeto que contiene:<ul><li>`enabled`: valor booleano para activar el elemento de redes sociales</li><li>`custom_link_format`: URL personalizada para la URL del usuario que comparte en las redes sociales</li></ul> | `{ "enabled": false, "custom_link_format": "http://www.linkedin.com/shareArticle?mini=true&url={{ social_link_url }}" }` | | `pinterest` | Objeto | Objeto que contiene:<ul><li>`enabled`: valor booleano para activar el elemento de redes sociales.</li><li>`custom_link_format`: URL personalizada para la URL del usuario que comparte en las redes sociales.</li><li>`pinterest_media`: objeto Imagen que incluye:<ul><li>`src`: URL de imagen.</li><li>`alt`: texto alternativo de la imagen.</li></ul></li></ul> | `{ "enabled": false, "custom_link_format": "http://pinterest.com/pin/create/button/?url={{ social_link_url }}&media={{ pinterest_media }}", "pinterest_media": { "src": "", "alt": null } }` | | `email` | Objeto | Objeto que contiene:<ul><li>`enabled`: valor booleano para activar el elemento de redes sociales</li><li>`custom_link_format`: URL personalizada para la URL del usuario que comparte en las redes sociales</li></ul> | `{ "enabled": false, "custom_link_format": "mailto:?subject=Check out {{ social_link_url }} &body=Check out {{ social_link_url }}" }` | ## Tarjeta con pestañas Disponible en páginas, índices de blog y publicaciones de blog. ```hubl theme={null} {% module path="@hubspot/tabbed_card", tabs=[ { "content" : "<p>This is the descriptive text contained in tab 1.</p>", "tab_label" : "Tab 1 label" }, { "content" : "<p>This is the descriptive text contained in tab 2.</p>", "tab_label" : "Tab 2 label" } ], fixed_height=false %} ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `tabs` | Grupo de campos | Un grupo de campos que contiene la etiqueta de la pestaña y el contenido del texto de cada pestaña. Contiene los siguientes campos:<ul><li>`tab_label`: la etiqueta de la pestaña.</li><li>`content`: el contenido del texto enriquecido de la pestaña.</li></ul> | `"Some additional information in one line"` | | `fixed_height` | Booleano | De forma predeterminada, las pestañas tendrán una altura fija para que la altura del contenedor permanezca igual al cambiar entre pestañas. Puedes definirlo como `false` si quieres que la altura del contenedor de tarjetas con pestañas se base en el contenido de la pestaña activa. | `False` | ## Una línea de texto Disponible en páginas, índices de blog y publicaciones de blog. ```hubl theme={null} {% module "text" path="@hubspot/text" %} ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `value` | Texto | Agrega el texto a este parámetro. | `"Some additional information in one line"` | ## Video Disponible en páginas, índices de blog y publicaciones de blog. ```hubl theme={null} {% module "video" path="@hubspot/video" %} ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `video_type` | Opción | Tipo de video. Las opciones incluyen:<ul><li>`embed`: insertar código de una fuente externa.</li><li>`hubspot_video`: video alojado en HubSpot.</li></ul> | `embed` | | `hubspot_video` | Reproductor de video | Video alojado en HubSpot. Se utiliza cuando `video_type` es igual a `hubspot_video`. | | | `embed_field` | Inserción | Incluye los tipos de inserción:<ul><li>`oembed`<ul><li>`video`: URL de video.</li></ul></li><li>`html`: código de inserción de video.</li></ul> | | | `oembed_thumbnail` | Imagen | Anula la imagen en miniatura insertada cuando `video_type` es igual a `embed` y `embed_field` es igual a `oembed`. | | | `style_options` | Objeto | Objeto que contiene `oembed_thumbnail_play_button_color` - Campo de color. | `{"oembed_thumbnail_play_button_color":"#ffffff"}` | | `placeholder_fields` | Objeto | Objeto que contiene:<ul><li>`placeholder_title`: campo de texto.</li><li>`placeholder_description`: campo de texto.</li></ul> | `{"placeholder_title":"No video selected", "placeholder_description":"Select a video type in the sidebar."}` | ## Inserción de video (landing page) Disponible en páginas. ```hubl theme={null} {% module "video_embed_lp" path="@hubspot/video_embed_lp" %} ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `url` | Texto | URL de video. Las URL de Vimeo y YouTube son compatibles. | `"https://www.youtube.com/watch?v=X1Rr5BFO5rg"` | | `is_full_width` | Booleano | Reproducir el video en ancho completo (`true`) o fijar manualmente la anchura y la altura (`false`). | `true` | | `max_width` | Número | Anchura máxima (px) | `800` | | `max_height` | Número | Altura máxima (px) | `450` | ## Enlace de WhatsApp Disponible en páginas, publicaciones de blog y páginas de índice de blog. Requiere un [canal de WhatsApp conectado](https://knowledge.hubspot.com/es/inbox/connect-whatsapp-to-the-conversations-inbox). ```hubl theme={null} {% module "whatsapp_link" path="@hubspot/whatsapp_link", label="whatsapp_link" %} ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `whatsapp_number` | URL | Seleccionar uno de los [canales de WhatsApp conectados a la cuenta](https://knowledge.hubspot.com/es/inbox/connect-whatsapp-to-the-conversations-inbox). | | | `optin_text` | Opción | El [texto para darse de alta y de baja](https://knowledge.hubspot.com/es/inbox/collect-consent-for-whatsapp-conversations#subscribe-a-contact-using-opt-in-keywords-in-a-whatsapp-thread). | | | `whatsapp_display` | Opción | Seleccionar si el botón muestra texto, un ícono de WhatsApp o ambos. Las opciones incluyen:<ul><li>`text_and_icon`</li><li>`text`</li><li>`icon`</li></ul> | `text_and_icon` | | `icon_position` | Opción | La posición del ícono en el botón. Las opciones incluyen `left` y `right`. | `left` | | `button_text` | Cadena | El texto del botón. | `Chat on WhatsApp` | | `whatsapp_icon_title` | Cadena | El texto del ícono para los lectores de pantalla. | `WhatsApp Icon` | # export_to_template_context Source: https://developers.hubspot.es/docs/cms/reference/modules/export-to-template-context Export_to_template_context es un parámetro que hace que los parámetros de un módulo estén disponibles para el entorno de la plantilla sin tener que renderizar el módulo. Este parámetro se puede utilizar en todas las etiquetas del módulo HubL. La etiqueta widget_data se utiliza para recuperar estos parámetros, almacenarlos en variables, y/o incorporarlos a la lógica de tu plantilla. `export_to_template_context` es un parámetro que hace que los parámetros de una etiqueta HubL estén disponibles para el entorno de la plantilla sin tener que renderizar la etiqueta HubL. Este parámetro se puede utilizar con todas las [etiquetas HubL](/docs/cms/reference/hubl/tags/standard-tags). El diccionario `widget_data` se utiliza para recuperar estos parámetros, almacenarlos en [variables](/docs/cms/reference/hubl/variables-macros-syntax), y/o incorporarlos a la lógica de tu plantilla. Al hacer que los parámetros de una etiqueta HubL estén disponibles en el contexto de la plantilla, sin renderizar realmente la etiqueta HubL, puedes permitir que los usuarios tomen decisiones en el editor de contenido que afecten a cómo se renderiza la plantilla. Por ejemplo, digamos que quieres renderizar un determinado bloque de código solo cuando el usuario da un valor a un campo. Esto es posible con este parámetro. Primero, debes agregar `export_to_template_context=True` a la etiqueta HubL. Luego, debes utilizar un `widget_data.module.parameter_you_want_to_retreive`. ```hubl theme={null} {% module "job_title" path="@hubspot/text", label="Enter a Job Title", value="Chief Morale Officer", export_to_template_context=True %} {# Makes the parameters available to be stored and used in template logic #} {{ widget_data.job_title.body.value }} {# Prints the value of the HubL tag but can also be used in template logic #} ``` A continuación, se presentan algunas aplicaciones de este concepto. ## Uso en módulos personalizados `export_to_template_context=True` se está admite en los módulos personalizados, ya que no tiene ningún propósito real para ellos. No es necesario utilizar `export_to_template_context` para obtener el valor de un módulo dentro de una plantilla, [ya puedes acceder a él](#retrieving-parameters-from-modules-already-rendered-on-the-template). Si necesitas ocultar visualmente la salida del módulo, puedes construir el módulo para que no muestre nada, o incluir un campo booleano que active o desactive si el módulo muestra algo. ## Imágenes de fondo seleccionables por el usuario En este ejemplo, se crea una etiqueta HubL imagen pero se exporta al contexto de la plantilla en lugar de renderizarse. El parámetro `src` se recupera con la etiqueta `widget_data` y se representa como la fuente de una imagen de fondo en una etiqueta de estilo. ```hubl theme={null} {% module "background_image" path="@hubspot/image" label='Select a background image', src='http://cdn2.hubspot.net/hub/428357/file-2117441560-jpg/img/dev-bg-compressed.jpg', export_to_template_context=True %} <!--Sample markup --> <div class="bg-image-section" style="background:url('{{ widget_data.background_image.src }}'); background-size:cover; min-height: 500px;"> <h1>Supercharge your app with HubSpot</h1> <h3>Build powerful integrations for a global community of users</h3> </div> ``` Aunque esto es posible hacerlo en plantillas codificadas, generalmente es mejor construir un módulo personalizado para darles a los usuarios la mejor experiencia en el editor de páginas. Este tipo de etiquetas de HubL aparecen como campos individuales, mientras que puedes tener varios campos relacionados. Al utilizar un módulo personalizado, todos sus campos se muestran agrupados en el editor de páginas. ## Campo de elección para renderizar el marcado predefinido El siguiente ejemplo utiliza el parámetro `export_to_template_context` junto con un [módulo de elección](/docs/cms/reference/hubl/tags/standard-tags#choice) para cambiar un mensaje de banner en una página de carreras. El usuario selecciona un departamento a través de la interfaz de usuario y el título cambia sin que el usuario tenga que editar el contenido. ```hubl theme={null} {% module "department" path="@hubspot/choice", label="Choose department", value="Marketing", choices="Marketing, Sales, Dev, Services" export_to_template_context=True %} {% if widget_data.department.value == "Marketing" %} <h3>Want to join our amazing Marketing team?!</h3> <h4>We have exciting career opportunities on the {{ widget_data.department.value }} team.</h4> {% elif widget_data.department.value == "Sales" %} <h3>Are you a Sales superstar?</h3> <h4>We have exciting career opportunities on the {{ widget_data.department.value }} team.</h4> {% elif widget_data.department.value == "Dev" %} <h3>Do you love to ship code?</h3> <h4>We have exciting career opportunities on the {{ widget_data.department.value }} team.</h4> {% else %} <h3>Want to work with our awesome customers?</h3> <h4>We have exciting career opportunities on the {{ widget_data.department.value }} team.</h4> {% endif %} ``` Esta misma funcionalidad se puede reproducir utilizando un campo de elección dentro de un módulo personalizado. La interfaz de usuario del módulo personalizado hace que las opciones de elección con un valor y una etiqueta sean bastante fáciles. ## Recuperación de parámetros de módulos ya renderizados en la plantilla Si se deseas recuperar un parámetro de un módulo o etiqueta que ya se está renderizando en una página, puedes acceder al módulo dentro de un diccionario llamado `widgets`. El parámetro `export_to_template_context` no es necesario. La sintaxis es la siguiente: ```hubl theme={null} // HubL {{ content.widgets.name_of_module.body.parameter }} {{ content.widgets.my_text.body.value }} ``` > [!WARNING] > > ### Nota: > > El método anterior no admite la recuperación de valores de campos en módulos globales, ya que `content.widgets` no accederá a los módulos globales. Debido a que los diferentes campos almacenan datos en diferentes formatos, a menudo es útil hacer uso de [developer Info](/docs/cms/start-building/introduction/developer-environment/troubleshooting/troubleshooting#developer-info) para ver cómo se accede a los datos específicos que se quieren mostrar. ## Impresión de información del módulo HubL en el listado del blog Aunque las plantillas de blog se utilizan generalmente para los blogs, también se pueden reutilizar para crear otros tipos de listados. Para ello, puedes utilizar las técnicas descritas anteriormente. Por ejemplo, es posible que desees crear un diseño de listado de la prensa que ha recibido su empresa, pero en lugar de enlazar a los posts, quieres que el listado enlace a otra página. Puedes ver este concepto en acción en [academy.hubspot.com/projects](https://academy.hubspot.com/projects). La página de listado de proyectos es una plantilla de listado de blog, pero cada post enlaza con una página regular de HubSpot. El creador de contenidos especifica el enlace de destino en el editor. Dentro del encabezado del código del post de blog individual, se definiría un campo de texto. Si no quieres que el texto se renderice en el post, debes usar `export_to_template_context`. ```hubl theme={null} {% module "custom_blog_link" path="@hubspot/text", label="Link to external press item", export_to_template_context=True %} ``` Este campo de texto es editable en cada post del blog. A continuación, tendríamos que definir un enlace en nuestro listado. Pero como el widget\_data solo existe en el contexto del post, tenemos que utilizar una sintaxis diferente para obtener los datos del widget y rellenar el enlace. En este caso, utilizaríamos `content.widgets.custom_blog_link.body.value`. Aunque los `widget_data` no están disponibles para el listado del blog, el valor de ese campo sigue almacenado en el contexto de los widgets del contenido individual. A continuación se muestra un bucle básico de listado de blogs que muestra este enlace personalizado con cada post. Si utilizas esta técnica, deberás asegurarte de agregar el subdirectorio creado automáticamente para cada post del blog a tu archivo robots.txt para evitar que esos posts vacíos sean rastreados por Google y otros rastreadores. ```hubl theme={null} {% for content in contents %} <a href="https://developers.hubspot.es/docs{{ content.widgets.custom_blog_link.body.value }}"> Click here to see this press feature! </a> {% endfor %} ``` # Codificar módulos personalizados Source: https://developers.hubspot.es/docs/cms/reference/modules/files Los módulos personalizados son componentes reutilizables que puedes utilizar en tu sitio web. Constrúyelos siguiendo las mejores prácticas de velocidad, experiencia de usuario y accesibilidad. Cuando se construye un módulo para páginas, blogs y [cotizaciones](/docs/cms/start-building/building-blocks/templates/quotes), el módulo contendrá tres archivos relacionados con el front-end que controlan el contenido, el estilo y la funcionalidad del módulo: * module.html * module.css * module.js > [!NOTE] > > Los módulos de correo electrónico no son compatibles con module.css y module.js. Debido a que los clientes de correo electrónico no admiten JavaScript y la compatibilidad con archivos CSS vinculados es limitada. Estos archivos siempre se renderizarán en la página cuando una instancia del módulo esté en la página. Cuando una página incluye varias instancias del mismo módulo, HubSpot sólo cargará `module.css` y `module.js` de ese módulo una vez. Por opción predeterminada, `module.css` y `module.js` no se cargan de forma asíncrona, pero puedes cambiar esto incluyendo [css\_render\_options y js\_render\_options](/docs/cms/reference/modules/configuration) en el meta.json del módulo. Los módulos se pueden construir dentro del administrador de diseño o localmente usando [la CLI de HubSpot](https://developers.hubspot.com/docs/developer-tooling/local-development/hubspot-cli/reference). En el administrador de diseño, los archivos de los módulos se muestran en un editor de varios paneles. ![cms-dev-custom-module1](https://www.hubspot.com/hubfs/Knowledge_Base_2021/Developer/cms-dev-custom-module1.png) Cuando se visualiza un módulo de forma local, los archivos están contenidos en las carpetas module-name.module. ![cms-dev-custom-module0](https://www.hubspot.com/hubfs/Knowledge_Base_2021/Developer/cms-dev-custom-module0.png) Si utilizas el administrador de diseño o la CLI para crear y administrar módulos depende de las preferencias de tu equipo. Consulta la [creación de un workflow eficiente para desarrolladores](/docs/cms/start-building/introduction/developer-environment/creating-an-efficient-development-workflow) para recomendaciones. ## HTML + HubL (module.html) El archivo module.html está destinado a HTML y HubL. En general, el lugar en el que se coloca un módulo en el editor de páginas o en el archivo de plantilla determina el lugar en el que se muestra el contenido del archivo module.html. Este archivo actúa como un [HubL include](/docs/cms/reference/hubl/overview#including-files-in-files) en la página donde se coloca el módulo. El archivo module.html [puede acceder a los valores de los campos del módulo a través de HubL](https://developers.hubspot.es/docs/cms/start-building/building-blocks/modules/overview#using-module-field-data-to-render-html). ## CSS (module.css) Utiliza el archivo `module.css` para agregar CSS a un módulo. En general, `module.css` soporta un subconjunto muy limitado de HubL. Sin embargo, puedes utilizar [`module_asset_url("my-image.png")`](https://developers.hubspot.com/es/docs/cms/hubl/functions#module-asset-url) para las imágenes agregadas como materiales vinculados al módulo. Esto permite vincular materiales como imágenes, empaquetados con el propio módulo. Por ejemplo: ```css theme={null} .testimonial-module__wrapper { background: url("{{ module_asset_url("bg-pattern.png") }}"); background-repeat: repeat; min-height: 200px; width: 100%; display: block; } ``` A continuación, aprende a configurar el CSS de un módulo para que cambie dinámicamente basado en los campos del módulo. ### Estilo basado en los valores de los campos del módulo Hay algunas maneras de influir en el estilo de tu módulo basado en los campos del módulo. Elige la manera que mejor se adapte a tu caso de uso específico. * [Clases CSS](#css-classes) * [Bloque Require\_css](#require-css-block) * [Estilos en línea](#inline-styles) #### Clases CSS Para establecer un estilo predefinido para el módulo con la opción de que los editores seleccionen entre esas opciones, puedes agregar un campo de módulo para establecer clases en tu archivo `module.htm`l que se correspondan con las clases CSS de tu archivo `module.css`. Por ejemplo, puedes tener un módulo de imagen y texto. Quieres que los creadores de contenidos puedan colocar la imagen a la derecha o a la izquierda del texto en función de un campo de elección. Para ello, puedes configurar tus archivos `module.html` y `module.css` de la siguiente manera: ```hubl theme={null} <!-- module.html --> <section class="img-text__wrapper img-text--{{ module.positioning }}" aria-label="{{ module.heading }}"> {# module.position is a choice field with two values "img-left" or "img-right". This dictates the order they appear on desktop. Controlled by CSS #} <div class="img-text__img"> <img src="{{ module.image.src }}" alt="{{ module.image.alt }}"> </div> <div class="img-text__text"> <h2> {% inline_text field="heading" value="{{ module.heading }}" %} </h2> {% inline_rich_text field="text" value="{{ module.text }}" %} </div> </section> ``` ```css theme={null} /* module.css */ /* CSS that makes the image show adjacent to the text, and positioned based on the positioning field.*/ /* The media query ensures that on mobile the image will always appear above the text for visual consistency. */ @media (min-width: 768px) { .img-text__wrapper { display: flex; align-items: row; } .img-text__img, .img-text__text { flex: 1; padding: 10px; } .img-text--img-right { flex-direction: row-reverse; } } ``` ### bloque require\_css Cuando necesitas dar a los creadores de contenido un control directo sobre propiedades específicas y cuando las clases no son ideales, las etiquetas de estilo con bloques `require_css` son la mejor opción. Para dar a los creadores de contenido un control directo sobre propiedades específicas sin usar clases, puedes agregar estilos al archivo `module.html` dentro de las etiquetas `require_css`. Por ejemplo: ```hubl theme={null} <div class="img__wrapper"> {% if module.image.src %} {% set sizeAttrs = 'width="{{ module.image.width }}" height="{{ module.image.height }}"' %} {% if module.image.size_type == 'auto' %} {% set sizeAttrs = 'style="max-width: 100%; height: auto;"' %} {% elif module.image.size_type == 'auto_custom_max' %} {% set sizeAttrs = 'width="100%" height="auto" style="max-width: {{ module.image.max_width }}px; max-height: {{ module.image.max_height }}px"' %} {% endif %} <img src="{{ module.image.src }}" alt="{{ module.image.alt }}" {{ sizeAttrs }}> {% endif %} </div> {% require_css %} <style> img { border-width:{{ module.border_width }}px; border-color:rgba({{ module.border_color.color|convert_rgb}},{{ module.border_color.opacity/100 }}); border-style: solid; } </style> {% end_require_css %} ``` Debido a que `module.html` puede renderizar HubL, puedes utilizar los valores de los campos del módulo como variables CSS. Cuando un creador de contenido actualiza el campo en el editor de la página, el CSS se actualizará para coincidir. Este bloque mueve las etiquetas `<style>` dentro de `<head>` de tu página dentro de la sentencia `standard_header_includes`. También puedes establecer que el CSS se aplique sólo a la instancia del módulo envolviendo el CSS con etiquetas `scope_css`. Por ejemplo, podrías actualizar el código del módulo anterior de la siguiente manera: ```hubl theme={null} <div class="img__wrapper"> {% if module.image.src %} {% set sizeAttrs = 'width="{{ module.image.width }}" height="{{ module.image.height }}"' %} {% if module.image.size_type == 'auto' %} {% set sizeAttrs = 'style="max-width: 100%; height: auto;"' %} {% elif module.image.size_type == 'auto_custom_max' %} {% set sizeAttrs = 'width="100%" height="auto" style="max-width: {{ module.image.max_width }}px; max-height: {{ module.image.max_height }}px"' %} {% endif %} <img src="{{ module.image.src }}" alt="{{ module.image.alt }}" {{ sizeAttrs }}> {% endif %} </div> {% require_css %} <style> {% scope_css %} img { border-width:{{ module.border_width }}px; border-color:rgba({{ module.border_color.color|convert_rgb}},{{ module.border_color.opacity/100 }}); border-style: solid; } {% end_scope_css %} </style> {% end_require_css %} ``` ### Agregar estilo en línea Cuando se necesita dar a los creadores de contenidos un control granular sobre sólo unas pocas propiedades y cuando las clases no son ideales, puedes agregar directamente los valores a un atributo de estilo en el HTML. ```hubl theme={null} {# Module.html #} <div style="background: rgba({{ module.bg_color.color|convert_rgb }},{{ module.bg_color.opacity/100 }});"> {% inline_rich_text field="richtext" value="{{ module.richtext }}" %} </div> ``` Si tienes muchas propiedades y el código se vuelve difícil de leer, considera cambiar al método de bloque `require_css`. ### Importar archivos CSS específicos `require_css` es una función de HubL que puedes agregar a module.html y que indica a HubSpot que un módulo o plantilla en particular requiere un archivo CSS concreto para mostrarse. Se agrega una etiqueta de enlace que apunta al archivo css a la página `<head>` dentro de `standard_header_includes`. La función `require_css` sólo cargará ese archivo CSS una vez, independientemente de las veces que ese mismo archivo sea requerido por los módulos y plantillas de una página concreta. Esto lo hace ideal para situaciones en las que los estilos pueden ser compartidos a través de múltiples módulos, pero donde agregar el CSS directamente a las hojas de estilo principales utilizadas en cada página de tu sitio puede no tener sentido. `require_css` y los archivos CSS enlazados cumplen el mismo propósito, pero `require_css` puede utilizarse de forma condicional en función de los valores de los campos. Así se evita cargar un código innecesario. ```hubl theme={null} <!-- module.html --> {{ require_css(get_asset_url("/modules/shared_layout_styles.css")) }} ``` ## JavaScript (module.js) Utiliza el archivo `module.js` para agregar JavaScript a un módulo. Al igual que el archivo `module.css`, el archivo `module.js` no soporta HubL. ### Scripts basados en los valores de los campos Hay algunas maneras de construir módulos, donde el JavaScript actúa de manera diferente basándose en los valores de los campos. Entender qué método utilizar y cuándo puede significar beneficios de rendimiento en cada página en la que se utilice el módulo. Por ejemplo, tienes un módulo de imágenes personalizado, quieres dar a los creadores de contenido la posibilidad de hacer que la imagen se abra en un lightbox. Los creadores de contenido sólo quieren eso para imágenes específicas, y no para todas las instancias del módulo. ### Atributos de los datos Los atributos de datos son atributos personalizados estándar de HTML 5 que los desarrolladores agregan a los elementos. Al igual que todos los elementos admiten `class="yourClassName"`, todos los elementos admiten `data-your-attribute="yourValue"`. ```hubl theme={null} <!-- module.html--> <div class="img-module img-module__wrapper" data-lightbox="{{ module.is_lightbox_enabled }}" data-caption="above"> <!-- module.is_lightbox_enabled is a boolean field, module.caption_position is a choice field. --> {% if module.image.src %} {% set sizeAttrs = 'width="{{ module.image.width }}" height="{{ module.image.height }}"' %} {% if module.image.size_type == 'auto' %} {% set sizeAttrs = 'style="max-width: 100%; height: auto;"' %} {% elif module.image.size_type == 'auto_custom_max' %} {% set sizeAttrs = 'width="100%" height="auto" style="max-width: {{ module.image.max_width }}px; max-height: {{ module.image.max_height }}px"' %} {% endif %} <img src="{{ module.image.src }}" alt="{{ module.image.alt }}" {{ sizeAttrs }}> {% endif %} </div> ``` Puedes usar atributos de datos para pasar los valores de los campos de tus instancias de módulos para que sean manejados por tu archivo module.js. Para utilizar los valores de tu archivo module.js, tendrás que recorrer todas las instancias de tu módulo. Agregar un nombre de clase específico del módulo al elemento envolvente más externo de tu módulo te dará un objetivo a utilizar, para que puedas hacer un bucle a través de cada una de tus instancias del módulo. ```js theme={null} // module.js let imgModules = document.getElementsByClassName("img-module"); Array.from(imgModules).forEach(function (element) { // loop through each of the instances of the module // set data attributes to variables to make it easy to work with let isLightboxEnabled = element.dataset.lightbox; let captionStyle = element.dataset.caption; if (isLightboxEnabled) { element.addEventListener("click", function () { showLightbox(captionStyle); // Execute your code for the action you want to take, you can pass your data attributes into functions from libraries. }); } }); ``` Los atributos de datos te permitirán recuperar los valores de los campos para cada instancia del módulo en tu module.js. ### bloque require\_js En situaciones avanzadas, tal vez cuando se utiliza una biblioteca de plantillas de JavaScript o un framework reactivo como Vue.js o React.js, puedes preferir la salida de sólo los datos, mientras que el framework maneja la representación. En este caso, utiliza una etiqueta de script rodeada por un bloque [`require_js`](https://developers.hubspot.com/es/docs/cms/hubl/functions#require-js) para proporcionar variables a las que puedas acceder desde el script de la plantilla. ```hubl theme={null} {% require_js %} <script> let myArray = [ {%- for item in module.repeating_text_field -%}"{{ item }}",{%- endfor -%} ]; </script> {% end_require_js %} ``` Esta técnica puede ser útil para suministrar a las aplicaciones avanzadas un conjunto inicial de datos a partir del cual se puede renderizar. Esto elimina una llamada inicial de JavaScript para recuperar los datos. ### require\_js [`require_js`](https://developers.hubspot.com/es/docs/cms/hubl/functions#require-js) es una función de HubL que indica a HubSpot que un módulo o plantilla en particular requiere un archivo JavaScript concreto para cargarse correctamente. La función toma dos parámetros: la ruta del archivo y la ubicación a la que se debe agregar el archivo ("encabezado" o "pie de página"). En un módulo `require_js` sólo se puede agregar al module.html. El archivo JavaScript al que se hace referencia en la sentencia `require_js` sólo se cargará una vez por página, independientemente del número de veces que lo requieran los módulos y plantillas dentro de la página. Esto reduce el número de peticiones HTTP y evita la duplicación de código. Algunas situaciones en las que esto resulta útil: * Si tienes varios módulos o plantillas que requieren el mismo JavaScript, puedes usar `require_js` para compartir ese script entre módulos. * Si trabajas con un bundler de JavaScript como webpack, puede ser más fácil enviar tus archivos js a una ubicación específica. Usando `require_js`, puedes asociar el JavaScript con tu módulo. `require_js` y los archivos javascript enlazados sirven para el mismo propósito, pero `require_js` puede hacerse condicionalmente en base a los valores de los campos. Esto evita que se cargue un código innecesario. También tienes la opción adicional de cargar JavaScript en el encabezado, si lo necesitas. > [!TIP] > > Debido aque JavaScript bloquea la visualización, la ubicación predeterminada en la [`require_js`](https://developers.hubspot.com/es/docs/cms/hubl/functions#require-js) coloca JavaScript es el "pie de página". [Más información sobre la optimización del rendimiento.](/docs/cms/best-practices/testing-staging-performance/speed) ## Información relacionada * [Optimizar la velocidad de tu sitio CMS Hub](/docs/cms/best-practices/testing-staging-performance/speed) * [Módulos](https://developers.hubspot.es/docs/cms/start-building/building-blocks/modules/overview) * [Campo de módulo](https://developers.hubspot.es/docs/cms/reference/fields/overview) # Evaluaciones de estado de compilación Source: https://developers.hubspot.es/docs/cms/reference/react/build-health-checks # Biblioteca de @hubspot/cms-components Source: https://developers.hubspot.es/docs/cms/reference/react/cms-components-library # Islas Source: https://developers.hubspot.es/docs/cms/reference/react/islands # Parciales de JS Source: https://developers.hubspot.es/docs/cms/reference/react/js-partials # Desarrollo local Source: https://developers.hubspot.es/docs/cms/reference/react/local-development # Estilo de CMS React Source: https://developers.hubspot.es/docs/cms/reference/react/styling # Pruebas de CMS React Source: https://developers.hubspot.es/docs/cms/reference/react/testing # Referencia de las funciones sin servidor (administrador de diseño) Source: https://developers.hubspot.es/docs/cms/reference/serverless-functions/serverless-functions Información de referencia para las funciones sin servidor creadas con el administrador de diseño, incluidos serverless.json, archivos de función, endpoints, comandos CLI y gestión de paquetes. > **Productos compatibles** > [!WARNING] > > ### Nota: > > Esta página contiene información de referencia para las funciones sin servidor creadas con el administrador de diseño. Históricamente, esta es la forma original de crear funciones sin servidor para tus páginas CMS y todavía es admitido. Sin embargo, en el futuro se recomienda [crear y desplegar funciones sin servidor con los proyectos para desarrolladores de HubSpot](/docs/cms/start-building/features/serverless-functions/getting-started-with-serverless-functions). Las funciones sin servidor basadas en proyectos pueden incluir dependencias de terceros y tener un acceso más directo a la autenticación mediante tokens de acceso a aplicaciones privadas. En este artículo, aprende sobre los archivos que se encuentran dentro de una [carpeta `.functions` sin servidor](/docs/cms/start-building/features/serverless-functions/overview#serverless-function-folders) y los comandos CLI que puedes utilizar con las funciones sin servidor. Para obtener un resumen general de las funciones sin servidor, consulta la [descripción general de las funciones sin servidor](/docs/cms/start-building/features/serverless-functions/overview). Para obtener más información sobre la creación de funciones sin servidor con proyectos para [módulos renderizados y parciales de JavaScript](https://github.hubspot.com/cms-js-building-block-examples/), consulta la [documentación de proyectos de desarrollador](https://developers.hubspot.es/docs/cms/reference/serverless-functions/serverless-functions-in-projects). ## Serverless.json En la carpeta `.functions`, el archivo `serverless.json` almacena la configuración de la función sin servidor. Este es un archivo obligatorio y asigna tus funciones a sus [endpoints](#endpoints). ```json theme={null} { "runtime": "nodejs20.x", "version": "1.0", "environment": { "globalConfigKey": "some-value" }, "secrets": ["secretName"], "endpoints": { "events": { "file": "function1.js", "method": "GET" }, "events/update": { "method": "POST", "file": "action2.js", "environment": { "CONFIG_KEY": "some-other-value" }, "secrets": ["googleKeyName", "otherkeyname"] } } } ``` | clave | Tipo | Descripción | | - | - | - | | `runtime` | Cadena | El entorno de tiempo de ejecución. Compatible con [Node.js](https://nodejs.org/en/about/) v20 (`nodejs20.x`). | | `version` | Cadena | versión del esquema de funciones sin servidor de HubSpot. (Versión actual 1.0) | | `environment` | Objeto | Variables de configuración pasadas a la función ejecutante como [variables de entorno](https://nodejs.org/docs/latest-v10.x/api/process.html#process_process_env) en tiempo de ejecución. Puedes usar esto para agregar una lógica para usar una versión de prueba de una API en lugar de la real basada en una variable de entorno. | | `secrets` | Matriz | Una matriz que contiene los nombres de los [secretos](#secrets) que tu función sin servidor utilizará para la autenticación. No almacenes secretos directamente en este archivo, solo haz referencia a los nombres de los secretos. | | `endpoints` | Objeto | Los endpoints definen las rutas que se exponen y tu asignación a archivos JavaScript específicos, dentro de tu carpeta de funciones. Obtén más información sobre los [endpoints](#endpoints). | > [!NOTE] > > HubSpot dejará [de dar soporte a Node 18](https://developers.hubspot.com/changelog/deprecation-of-node-v18-in-all-serverless-functions-and-cli) después del 1 de octubre de 2025. Después de esa fecha, las funciones sin servidor con un tiempo de ejecución inferior a la v20 no podrán desplegarse. > [!WARNING] > > ### Nota: > > No asignes el mismo nombre a tus secretos y variables de entorno. Si lo haces, se producirán conflictos al devolver tus valores en la función. ### Endpoints Cada endpoint puede tener sus propias [variables de entorno](https://nodejs.org/docs/latest-v10.x/api/process.html#process_process_env) y secretos. Las variables especificadas fuera de los endpoints deben utilizarse para los ajustes de configuración que se aplican a todas las funciones y endpoints. ```json theme={null} "events/update": { "method": "POST", "file": "action2.js", "environment": { "configKey": "some-other-value" }, "secrets": ["googleAPIKeyName","otherKeyName"] } ``` | clave | Tipo | Descripción | | - | - | - | | `method` | Cadena o matriz de cadenas | [Método o métodos HTTP](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Methods) que admite el endpoint. El valor predeterminado es [GET](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Methods/GET). | | `file` | Cadena | Ruta al archivo de la función JavaScript con la implementación para el endpoint. | El endpoint puede invocarse llamando a una URL en uno de los dominios conectados a la cuenta de HubSpot, incluidos los subdominios predeterminados `.hs-sites.com`, con la siguiente estructura de URL: `https://{domainName}/_hcms/api/{endpoint-name/path}?portalid={hubId}`. | Parámetro | Descripción | | - | - | | `domainName` | Un dominio conectado a la cuenta de HubSpot. | | `/_hcms/api/` | La ruta reservada para las funciones sin servidor. Todos los endpoints existen dentro de esta ruta. | | `endpoint-name/path` | El nombre del endpoint o la ruta que especificaste en el archivo `serverless.json`. | | `portalid` | Un parámetro de consulta opcional que contiene el ID de tu cuenta de HubSpot. Proporcionar esto en la solicitud te permitirá probar tus funciones dentro de las vistas previas de módulos y plantillas. | Por ejemplo, si `website.com` y `subdomain.brand.com` están conectados a la cuenta, podrías llamar a la función utilizando `https://website.com/_hcms/api/{endpoint-name/path}` o `https://subdomain.brand.com/_hcms/api/{endpoint-name/path}`. ## Archivo de funciones Además del archivo de configuración `serverless.json`, la carpeta `.functions` también contendrá un archivo JavaScript [Node.js](https://nodejs.org/en/) que define la función. También puedes aprovechar la biblioteca de [solicitudes](https://github.com/request/request#readme) para realizar solicitudes HTTP a las [API de HubSpot](https://developers.hubspot.es/docs/api-reference/overview) y otras API. Por ejemplo: ```js theme={null} // Require axios library, to make API requests. const axios = require("axios"); // Environment variables from your serverless.json // process.env.globalConfigKey exports.main = (context, sendResponse) => { // your code called when the function is executed // context.params // context.body // context.accountId // context.limits // secrets created using the CLI are available in the environment variables. // process.env.secretName //sendResponse is what you will send back to services hitting your serverless function. sendResponse({ body: { message: "my response" }, statusCode: 200 }); }; ``` ### Objeto de contexto El objeto de contexto contiene información contextual sobre la ejecución de la función, almacenada en los siguientes parámetros. | Parámetro | Descripción | | - | - | | `accountId` | El ID de la cuenta de HubSpot que contiene la función. | | `body` | Lleno si la solicitud se envía como `POST` con un tipo de contenido `application/json`. | | `contact` | Si la solicitud proviene de un contacto con cookies, el objeto contacto estará lleno con un conjunto de propiedades básicas junto con la siguiente información:<ul><li>`vid`: ID de visitante del contacto.</li><li>`isLoggedIn`: cuando se utiliza CMS Memberships, esto será `true` si el contacto ha iniciado sesión en el dominio.</li><li>`listMemberships`: una matriz de ID de listas de contactos de las que este contacto es miembro.</li></ul> | | `headers` | Contiene los [títulos](#headers) enviados por el cliente que llega a tu endpoint. | | `params` | Rellenado con valores de cadena de consulta junto con cualquier valor HTML Form-POSTed. Se estructuran como un mapa con cadenas como claves y una matriz de cadenas para cada valor.`context.params.yourvalue` | | `limits` | Devuelve lo cerca que estás de alcanzar los [límites de velocidad de las funciones sin servidor](/docs/cms/start-building/features/serverless-functions/overview#know-your-limits).<ul><li>`executionsRemaining`: cuántas ejecuciones por minuto quedan.</li><li>`timeRemaining`: cuánto tiempo de ejecución permitido queda.</li></ul> | ### Encabezados Si necesitas conocer los encabezados del cliente que está llegando a tu endpoint, puedes acceder a ellos a través de `context.headers`, similar a cómo accederías a la información a través de `context.body`. A continuación, revisa algunos de los encabezados comunes que proporciona HubSpot. Para obtener una lista completa, consulta la documentación de encabezados HTTP de [MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers). | título | Descripción | | - | - | | `accept` | Comunica qué tipos de contenido, expresados como [tipos MIME](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/MIME_types), entiende el cliente. [Consulta MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Accept). | | `accept-encoding` | Comunica la codificación del contenido que el cliente entiende. [Consulta MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Accept-Encoding). | | `accept-language` | Comunica qué idioma humano y localización se prefiere. [Consulta MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Accept-Language). | | `cache-control` | Contiene directivas para el almacenamiento en caché. [Consulta MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Cache-Control). | | `connection` | Comunica si la conexión de red permanece abierta. [Consulta MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Connection). | | `cookie` | Contiene las cookies enviadas por el cliente. [Consulta MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Cookie). | | `host` | Comunica el nombre de dominio y el número de puerto TCP de un servidor de escucha. [Consulta MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Host). | | `true-client-ip` | Dirección IP del usuario final. [Consulta Cloudflare true-client-ip](https://developers.cloudflare.com/network/true-client-ip-header/). | | `upgrade-insecure-requests` | Comunica la preferencia del cliente por una respuesta cifrada y autentificada. [Consulta MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Upgrade-Insecure-Requests). | | `user-agent` | Cadena definida por el proveedor que identifica la aplicación, el sistema operativo, el proveedor de la aplicación y la versión. [Consulta MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/User-Agent). | | `x-forwarded-for` | Identifica la dirección IP de origen de un cliente a través de un proxy o equilibrador de carga. [Consulta MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-For). | #### Redireccionamiento enviando un encabezado Puedes realizar un redireccionamiento desde tu función sin servidor enviando una respuesta con un encabezado *location* y un statusCode `301`. ```js theme={null} sendResponse({ statusCode: 301, headers: { Location: "https://www.example.com", }, }); ``` ### Establecer las cookies desde tu endpoint Desde tu función sin servidor puedes decirle al cliente (navegador web) que establezca una cookie. ```js theme={null} exports.main = (context, sendResponse) => { sendResponse({ body: { ... }, 'Set-Cookie': 'myCookie1=12345; expires=...; Max-Age=...', statusCode: 200 }); } ``` ### Establecer varios valores para un solo encabezado En el caso de los encabezados que admiten múltiples valores, puedes utilizar `multiValueHeaders`, para pasar los valores. Por ejemplo: puedes decirle al navegador que establezca varias cookies. ```js theme={null} exports.main = (context, sendResponse) => { sendResponse({ body: { ... }, multiValueHeaders: { 'Set-Cookie': [ 'myCookie1=12345; expires=...; Max-Age=...', 'myCookie2=56789; expires=...; Max-Age=...' ] }, statusCode: 200 }); } ``` ## Secretos Cuando necesites autenticar una solicitud de función sin servidor, usarás secretos para almacenar valores como claves de API o tokens de acceso a aplicaciones privadas. Con la CLI, puedes agregar secretos a tu cuenta de HubSpot para almacenar esos valores, a los que luego podrás acceder a través de variables de entorno (`process.env.secretName`). Los secretos se gestionan a través de la CLI de HubSpot utilizando los siguientes comandos: * [`hs secrets list`](/docs/developer-tooling/local-development/hubspot-cli/reference#list-secrets) * [`hs secrets add`](/docs/developer-tooling/local-development/hubspot-cli/reference#add-a-secret) * [`hs secrets delete`](/docs/developer-tooling/local-development/hubspot-cli/reference#remove-a-secret) Una vez agregados a través de la CLI, los secretos pueden ponerse a disposición de las funciones mediante la inclusión de una matriz de `secrets` que contenga el nombre del secreto. Esto le permite almacenar tu código de función en el [control de versiones](/docs/cms/start-building/introduction/developer-environment/github-integration) y usar secretos sin exponerlos. Sin embargo, nunca debes devolver el valor de tu secreto a través del registro de la consola o como respuesta, ya que esto expondrá el secreto en los registros o en las páginas del front-end que llaman a tu función sin servidor. > [!WARNING] > > ### Nota: > > Debido al almacenamiento en caché, puede tardar aproximadamente un minuto ver los valores actualizados de los secretos. Si acabas de actualizar un secreto pero todavía estás viendo el valor anterior, vuelve a comprobarlo después de aproximadamente un minuto. ## Uso de funciones sin servidor con el elemento de formulario Al enviar funciones sin servidor, utiliza javascript para manejar el envío del formulario y utiliza el encabezado `"contentType" : "application/json"` en tu solicitud. No utilices el atributo `<form>` de los elementos `action`. ## CORS [**Intercambio de recursos de origen cruzado (CORS)**](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CORS) es una función de seguridad del navegador. Por opción predeterminada, los navegadores restringen las solicitudes de origen cruzado iniciadas por javascript. Esto evita que el código malicioso que se ejecuta en un dominio diferente, afecte a tu sitio. Esto se denomina política del mismo origen. Dado que el envío y la recuperación de datos de otros servidores es a veces una necesidad, el servidor externo, puede suministrar encabezados HTTP que comunican qué orígenes están autorizados a leer la información de un navegador. No deberías tener problemas de CORS al llamar a tu función sin servidor dentro de tus páginas alojadas en HubSpot. Si lo haces, verifica que estás utilizando el protocolo correcto. > [!NOTE] > > **¿Recibes este error CORS?** *"Se ha bloqueado el acceso para obtener la \[URL de la función] desde el origen \[página que realiza la solicitud] debido a la política de CORS: la respuesta a la solicitud previa no supera la verificación de control de acceso; no se encontró el encabezado 'Access-Control-Allow-Origin' en el recurso solicitado. Si una respuesta opaca sirve a tus necesidades, establece el modo de la solicitud como 'no-cors' para obtener el recurso con CORS desactivado"* > > **¿Tu solicitud se dirige a un origen diferente al del sitio que la llama?** > > * Si el nombre de dominio es diferente, sí. > * Si utilizas un protocolo diferente (http, https), sí. > > Si utilizas un protocolo diferente, simplemente cambia el protocolo para que coincida y eso lo arreglará. > > En este momento no se puede modificar el encabezado `Access-Control-Allow-Origin` de HubSpot. > > [Consulta el MDN para obtener más detalles sobre la solución de errores de CORS.](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CORS/Errors) ### Solicitudes Get Las solicitudes Get pueden hacer [solicitudes CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CORS) dependiendo del cliente. No hagas que las peticiones [GET](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Methods/GET) escriban nada, solo que devuelvan datos. ## Paquetes precargados Las funciones sin servidor de HubSpot vienen actualmente precargadas con los siguientes paquetes: * [@hubspot/api-client](https://www.npmjs.com/package/@hubspot/api-client): ^1.0.0-beta * [axios](https://www.npmjs.com/package/axios): ^0.19.2 * [request](https://www.npmjs.com/package/request): ^2.88.0 * [requests](https://www.npmjs.com/package/requests): ^0.2.2 Para utilizar la última versión compatible de un paquete precargado, o para utilizar un paquete recién agregado: 1. Clona o copia tu archivo de funciones. 2. Cambia el endpoint de tu función en el archivo `serverless.json` para que se dirija a tu nuevo archivo de función. Puedes eliminar la versión antigua con seguridad. Si quieres incluir paquetes fuera del conjunto de paquetes precargados, puedes usar [webpack](https://webpack.js.org/) para combinar tus módulos de node y hacer que tus archivos agrupados sean tus archivos de función. ## Límites Las funciones sin servidor están previstas para ser rápidas y tener un enfoque limitado. Para permitir llamadas y respuestas rápidas, las funciones sin servidor de HubSpot tienen los siguientes límites: * 50 secretos por cuenta. * 128 MB de memoria. * No más de 100 endpoints por cuenta de HubSpot. * Debes usar `contentType` `application/json` cuando se llama a una función. * Los registros de las funciones sin servidor se almacenan durante 90 días. * 6MB en una carga útil de invocación de AWS Lambda. **Límites de ejecución** * Cada función tiene un tiempo máximo de ejecución de 10 segundos * Cada cuenta está limitada a un total de 600 segundos de ejecución por minuto. Esto significa que cualquiera de estos escenarios puede ocurrir: * 60 ejecuciones de funciones que tardan 10 segundos cada una en completarse. * 6000 ejecuciones de funciones que tardan 100 milisegundos en completarse. Las funciones que superen esos límites arrojarán un error. El recuento de ejecuciones y los límites de tiempo devolverán una respuesta `429`. El tiempo de ejecución de cada función se incluye en los [registros de funciones sin servidor](/docs/developer-tooling/local-development/hubspot-cli/reference#get-logs). Para ayudar a evitar estos límites, los datos de los límites se proporcionan automáticamente al [contexto de la función](https://developers.hubspot.es/docs/cms/reference/serverless-functions/serverless-functions-in-projects#function-file) durante la ejecución. Puedes utilizarlo para influir en tu solicitud para mantenerse dentro de esos límites. Por ejemplo, si tu aplicación requiere sondear tu endpoint, entonces puedes devolver con tus datos una variable para influir en la frecuencia del sondeo. De este modo, cuando el tráfico es elevado, se puede reducir el ritmo de sondeo para evitar que se alcancen los límites, y luego volver a aumentarlo cuando el tráfico sea escaso. # Referencia sin servidor Source: https://developers.hubspot.es/docs/cms/reference/serverless-functions/serverless-functions-in-projects Información de referencia para tu serverless.json, archivos de función, puntos de terminación, comandos CLI y gestión de paquetes, todo en un solo lugar. > **Productos compatibles** > [!WARNING] > > ### Nota: > > Si estás creando una función sin servidor como parte de un [proyecto de desarrollador](https://developers.hubspot.es/docs/guides/crm/intro/create-a-project), en su lugar visita la [documentación de la función sin servidor del proyecto de desarrollador](https://developers.hubspot.es/docs/cms/reference/serverless-functions/serverless-functions-in-projects). La siguiente documentación es para crear funciones sin servidor fuera de la plataforma del proyecto de desarrollador. En este artículo, aprende sobre los archivos que se encuentran dentro de una [carpeta `.functions` sin servidor](/docs/cms/reference/serverless-functions/serverless-functions-in-projects#file-structure) y los comandos CLI que puedes utilizar con las funciones sin servidor. Para obtener un resumen general de las funciones sin servidor, consulta la [descripción general de las funciones sin servidor](/docs/cms/start-building/features/serverless-functions/overview). Para obtener más información sobre la creación de funciones sin servidor con proyectos para [módulos renderizados y parciales de JavaScript](https://github.hubspot.com/cms-js-building-block-examples/), consulta la [documentación de proyectos de desarrollador](https://developers.hubspot.es/docs/cms/reference/serverless-functions/serverless-functions-in-projects). ## Serverless.json En la carpeta [`.functions`](/docs/cms/reference/serverless-functions/serverless-functions-in-projects#file-structure), el archivo `serverless.json` almacena la configuración de la función sin servidor. Este es un archivo obligatorio y asigna tus funciones a sus [puntos de terminación](#endpoints). ```json theme={null} // serverless.json { "runtime": "nodejs18.x", "version": "1.0", "environment": { "globalConfigKey": "some-value" }, "secrets": ["secretName"], "endpoints": { "events": { "file": "function1.js", "method": "GET" }, "events/update": { "method": "POST", "file": "action2.js", "environment": { "CONFIG_KEY": "some-other-value" }, "secrets": ["googleKeyName", "otherkeyname"] } } } ``` | Clave | Type | Description | | - | - | - | | `runtime` | String | El entorno de ejecución. Admite las siguientes versiones de [Node.js](https://nodejs.org/en/about/):<ul><li>Nodo 20 (`nodejs20.x`) (recomendado)</li><li>Nodo 18 (`nodejs18.x`)</li></ul>Ten en cuenta que HubSpot [ya no admitirá el Nodo 16](https://developers.hubspot.com/changelog/deprecation-of-node-v16-in-all-serverless-functions) más allá del 12 de julio de 2024. | | `version` | String | Versión del esquema de funciones sin servidor de HubSpot. (Versión actual 1.0) | | `environment` | Objetos | Variables de configuración pasadas a la función ejecutante como [variables de entorno](https://nodejs.org/docs/latest-v10.x/api/process.html#process_process_env) en tiempo de ejecución. Puedes usar esto para agregar una lógica para usar una versión de prueba de una API en lugar de la real basada en una variable de entorno. | | `secrets` | Matriz | Una matriz que contiene los nombres de los secretos que tu función sin servidor utilizará para la autenticación. No almacenes secretos directamente en este archivo, solo haz referencia a los nombres de los secretos. | | `endpoints` | Objetos | Los puntos de terminación definen las rutas que se exponen y tu asignación a archivos JavaScript específicos, dentro de tu carpeta de funciones. Obtén más información sobre puntos de terminación a continuación. | > [!WARNING] > > ### Nota: > > No asignes el mismo nombre a tus secretos y variables de entorno. Si lo haces, se producirán conflictos al devolver tus valores en la función. ### Puntos de terminación Cada punto de terminación puede tener sus propias [variables de entorno](https://nodejs.org/docs/latest-v10.x/api/process.html#process_process_env) y secretos. Las variables especificadas fuera de los puntos de terminación deben utilizarse para los ajustes de configuración que se aplican a todas las funciones y puntos de terminación. ```json theme={null} "events/update": { "method": "POST", "file": "action2.js", "environment": { "configKey": "some-other-value" }, "secrets": ["googleAPIKeyName","otherKeyName"] } ``` Los puntos de terminación tienen un par de claves únicas. | Clave | Type | Description | | - | - | - | | `method` | Cadena o matriz de cadenas | [Método o métodos HTTP](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Methods) que admite el punto de terminación. El valor predeterminado es [GET](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Methods/GET). | | `file` | String | Ruta al archivo de la función JavaScript con la implementación para el punto de terminación. | Las funciones sin servidor se exponen a través de una ruta en el dominio de tu cuenta de HubSpot CMS. Esto incluye los subdominios predeterminados `.hs-sites.com`. Puedes acceder a estas funciones en la siguiente URL: `https://{domainName}/_hcms/api/{endpoint-name/path}?portalid={hubId}`. A continuación, conoce cada uno de los componentes de la URL: | Parameter | Description | | - | - | | `domainName` | Tu nombre de dominio. | | `/_hcms/api/` | La ruta reservada para las funciones sin servidor. Todos los puntos de terminación existen dentro de esta ruta. | | `endpoint-name/path` | El nombre del punto de terminación o la ruta que especificaste en el archivo `serverless.json`. | | `hubId` | Tu ID de Hub Proporcionar esto en la solicitud te permitirá probar tus funciones dentro de las vistas previas de módulos y plantillas. | ## Archivo de funciones Además del archivo de configuración `serverless.json`, la carpeta `.functions` también contendrá un archivo JavaScript [Node.js](https://nodejs.org/en/) que define la función. También puedes aprovechar la biblioteca de [solicitudes](https://github.com/request/request#readme) para realizar solicitudes HTTP a las [API de HubSpot](https://developers.hubspot.es/docs/api-reference/overview) y otras API. Por ejemplo: ```js theme={null} // Require axios library, to make API requests. const axios = require("axios"); // Environment variables from your serverless.json // process.env.globalConfigKey exports.main = (context, sendResponse) => { // your code called when the function is executed // context.params // context.body // context.accountId // context.limits // secrets created using the CLI are available in the environment variables. // process.env.secretName //sendResponse is what you will send back to services hitting your serverless function. sendResponse({ body: { message: "my response" }, statusCode: 200 }); }; ``` ### Objeto de contexto El objeto de contexto contiene información contextual sobre la ejecución de la función, almacenada en los siguientes parámetros. | Parameter | Description | | - | - | | `accountId` | El ID de la cuenta de HubSpot que contiene la función. | | `body` | Lleno si la solicitud se envía como `POST` con un tipo de contenido `application/json`. | | `contact` | Si la solicitud proviene de un contacto con cookies, el objeto contacto estará lleno con un conjunto de propiedades básicas del contacto junto con la siguiente información:<ul><li>`vid`: El ID de visitante del contacto.</li><li>`isLoggedIn`: cuando se utiliza CMS Memberships, esto será `true` si el contacto está registrado en el dominio</li><li>`listMemberships`: una matriz de ID de listas de contactos de las que este contacto es miembro</li></ul> | | `headers` | Contiene los [títulos](#headers) enviados por el cliente que llega a tu punto de terminación. | | `params` | Rellenado con valores de cadena de consulta junto con cualquier valor HTML Form-POSTed. Se estructuran como un mapa con cadenas como claves y una matriz de cadenas para cada valor.`context.params.yourvalue` | | `limits` | Devuelve lo cerca que estás de alcanzar los [límites de velocidad de las funciones sin servidor](/docs/cms/reference/serverless-functions/serverless-functions-in-projects#limits).<ul><li>`executionsRemaining`: cuántas ejecuciones por minuto quedan.</li><li>`timeRemaining`: cuánto tiempo de ejecución permitido queda.</li></ul> | ### Encabezados Si necesitas conocer los encabezados del cliente que está llegando a tu punto de terminación, puedes acceder a ellos a través de `context.headers`, similar a cómo accederías a la información a través de `context.body`. A continuación, revisa algunos de los encabezados comunes que proporciona HubSpot. Para obtener una lista completa, consulta la documentación de encabezados HTTP de [MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers). | encabezado | Description | | - | - | | `accept` | Comunica qué tipos de contenido, expresados como [tipos MIME](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/MIME_types), entiende el cliente. [Consulta MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Accept). | | `accept-encoding` | Comunica la codificación del contenido que el cliente entiende. [Consulta MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Accept-Encoding). | | `accept-language` | Comunica qué idioma humano y localización se prefiere. [Consulta MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Accept-Language). | | `cache-control` | Contiene directivas para el almacenamiento en caché. [Consulta MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Cache-Control). | | `connection` | Comunica si la conexión de red permanece abierta. [Consulta MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Connection). | | `cookie` | Contiene las cookies enviadas por el cliente. [Consulta MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Cookie). | | `host` | Comunica el nombre de dominio y el número de puerto TCP de un servidor de escucha. [Consulta MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Host). | | `true-client-ip` | Dirección IP del usuario final. [Consulta Cloudflare true-client-ip](https://developers.cloudflare.com/network/true-client-ip-header/). | | `upgrade-insecure-requests` | Comunica la preferencia del cliente por una respuesta cifrada y autentificada. [Consulta MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Upgrade-Insecure-Requests). | | `user-agent` | Cadena definida por el proveedor que identifica la aplicación, el sistema operativo, el proveedor de la aplicación y la versión. [Consulta MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/User-Agent). | | `x-forwarded-for` | Identifica la dirección IP de origen de un cliente a través de un proxy o equilibrador de carga. [Consulta MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-For). | #### Redirigir enviando una encabezado Puedes realizar una redirección desde tu función sin servidor enviando una respuesta con un encabezado *location* y un statusCode `301`. ```js theme={null} sendResponse({ statusCode: 301, headers: { Location: "https://www.example.com", }, }); ``` ### Establecer las cookies desde tu punto de terminación Desde tu función sin servidor puedes decirle al cliente (navegador web) que establezca una cookie. ```js theme={null} exports.main = (context, sendResponse) => { sendResponse({ body: { ... }, 'Set-Cookie': 'myCookie1=12345; expires=...; Max-Age=...', statusCode: 200 }); } ``` ### Establecer varios valores para un solo encabezado En el caso de los encabezados que admiten múltiples valores, puedes utilizar `multiValueHeaders`, para pasar los valores. Por ejemplo: puedes decirle al navegador que establezca varias cookies. ```js theme={null} exports.main = (context, sendResponse) => { sendResponse({ body: { ... }, multiValueHeaders: { 'Set-Cookie': [ 'myCookie1=12345; expires=...; Max-Age=...', 'myCookie2=56789; expires=...; Max-Age=...' ] }, statusCode: 200 }); } ``` ## Secretos Cuando necesites autenticar una solicitud de función sin servidor, usarás secretos para almacenar valores como claves de API o tokens de acceso a aplicaciones privadas. Con la CLI, puedes agregar secretos a tu cuenta de HubSpot para almacenar esos valores, a los que luego podrás acceder a través de variables de entorno (`process.env.secretName`). Los secretos se gestionan a través de la CLI de HubSpot utilizando los siguientes comandos: * [`hs secrets list`](https://developers.hubspot.com/docs/developer-tooling/local-development/hubspot-cli/reference#list-secrets) * [`hs secrets add`](https://developers.hubspot.com/docs/developer-tooling/local-development/hubspot-cli/reference#add-secret) * [`hs secrets delete`](https://developers.hubspot.com/docs/developer-tooling/local-development/hubspot-cli/reference#remove-secret) Una vez agregados a través de la CLI, los secretos pueden ponerse a disposición de las funciones mediante la inclusión de una matriz de `secretos` que contenga el nombre del secreto. Esto le permite almacenar tu código de función en el [control de versiones](/docs/cms/start-building/introduction/developer-environment/github-integration) y usar secretos sin exponerlos. Sin embargo, nunca debes devolver el valor de tu secreto a través del registro de la consola o como respuesta, ya que esto expondrá el secreto en los registros o en las páginas del front-end que llaman a tu función sin servidor. > [!WARNING] > > ### Nota: > > Debido al almacenamiento en caché, puede tardar aproximadamente un minuto en ver los valores secretos actualizados. Si acabas de actualizar un secreto pero todavía estás viendo el valor anterior, vuelve a comprobarlo después de aproximadamente un minuto. ## Uso de funciones sin servidor con el elemento de formulario Al enviar funciones sin servidor, utiliza javascript para manejar el envío del formulario y utiliza el encabezado `"contentType" : "application/json"` en tu solicitud. No utilices el atributo `action` de los elementos `<form>`. ## CORS [**Intercambio de recursos de origen cruzado (CORS)**](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CORS) es una función de seguridad del navegador. Por opción predeterminada, los navegadores restringen las solicitudes de origen cruzado iniciadas por javascript. Esto evita que el código malicioso que se ejecuta en un dominio diferente, afecte a tu sitio. Esto se denomina política del mismo origen. Dado que el envío y la recuperación de datos de otros servidores es a veces una necesidad, el servidor externo, puede suministrar encabezados HTTP que comunican qué orígenes están autorizados a leer la información de un navegador. No deberías tener problemas de CORS al llamar a tu función sin servidor dentro de tus páginas alojadas en HubSpot. Si lo haces, verifica que estás utilizando el protocolo correcto. > [!NOTE] > > **¿Recibes este error CORS?** > > *"El acceso a la búsqueda en \[tu url de función] desde el origen \[solicitud de creación de página] ha sido bloqueado por la política de CORS: la respuesta a la solicitud de prefiltro no pasa la verificación de control de acceso: no hay encabezado 'Access-Control-Allow-Origin' presente en el recurso solicitado. Si una respuesta opaca sirve a tus necesidades, establece el modo de la solicitud como 'no-cors' para obtener el recurso con CORS desactivado"* > > **¿Tu solicitud se dirige a un origen diferente al del sitio que la llama?** > > * Si el nombre de dominio es diferente, sí. > * Si utilizas un protocolo diferente (http, https), sí. > > Si utilizas un protocolo diferente, simplemente cambia el protocolo para que coincida y eso lo arreglará. > > En este momento no se puede modificar el encabezado `Access-Control-Allow-Origin` de HubSpot. > > [Consulta el MDN para obtener más detalles sobre la solución de errores de CORS.](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CORS/Errors) ### Solicitudes Get Las solicitudes Get pueden hacer [solicitudes CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CORS) dependiendo del cliente. No hagas que las peticiones [GET](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Methods/GET) escriban nada, solo que devuelvan datos. ## Paquetes precargados Las funciones sin servidor de HubSpot vienen actualmente precargadas con los siguientes paquetes: * [@hubspot/api-client](https://www.npmjs.com/package/@hubspot/api-client): ^1.0.0-beta * [axios](https://www.npmjs.com/package/axios): ^0.19.2 * [request](https://www.npmjs.com/package/request): ^2.88.0 * [requests](https://www.npmjs.com/package/requests): ^0.2.2 Para utilizar la última versión compatible de un paquete precargado, o para utilizar un paquete recién agregado: 1. Clona o copia tu archivo de funciones. 2. Cambia el punto de terminación de tu función en el archivo `serverless.json` para que apunte a tu nuevo archivo de función. Puedes eliminar la versión antigua con seguridad. Si quieres incluir paquetes fuera del conjunto de paquetes precargados, puedes usar [webpack](https://webpack.js.org/) para combinar tus módulos de node y hacer que tus archivos agrupados sean tus archivos de función. ## Límites Las funciones sin servidor están previstas para ser rápidas y tener un enfoque limitado. Para permitir llamadas y respuestas rápidas, las funciones sin servidor de HubSpot tienen los siguientes límites: * 50 secretos por cuenta. * 128 MB de memoria. * No más de 100 puntos de terminación por cuenta de HubSpot. * Debes usar `contentType` `application/json` cuando se llama a una función. * Los registros de las funciones sin servidor se almacenan durante 90 días. * 6MB en una carga útil de invocación de AWS Lambda. **Límites de ejecución** * Cada función tiene un tiempo máximo de ejecución de 10 segundos * Cada cuenta está limitada a un total de 600 segundos de ejecución por minuto. Esto significa que cualquiera de estos escenarios puede ocurrir: * 60 ejecuciones de funciones que tardan 10 segundos cada una en completarse. * 6000 ejecuciones de funciones que tardan 100 milisegundos en completarse. Las funciones que superen esos límites arrojarán un error. El recuento de ejecuciones y los límites de tiempo devolverán una respuesta `429`. El tiempo de ejecución de cada función se incluye en los [registros de funciones sin servidor](https://developers.hubspot.com/docs/developer-tooling/local-development/hubspot-cli/reference#logs). Para ayudar a evitar estos límites, los datos de los límites se proporcionan automáticamente al [contexto de la función](https://developers.hubspot.es/docs/cms/reference/serverless-functions/serverless-functions-in-projects#function-file) durante la ejecución. Puedes utilizarlo para influir en tu solicitud para mantenerse dentro de esos límites. Por ejemplo, si tu aplicación requiere sondear tu punto de terminación, entonces puedes devolver con tus datos una variable para influir en la frecuencia del sondeo. De este modo, cuando el tráfico es elevado, se puede reducir el ritmo de sondeo para evitar que se alcancen los límites, y luego volver a aumentarlo cuando el tráfico sea escaso. # Construye páginas dinámicas usando objetos del CRM Source: https://developers.hubspot.es/docs/cms/start-building/features/data-driven-content/crm-data-in-cms-pages # Objetos del CRM en las páginas del CMS Source: https://developers.hubspot.es/docs/cms/start-building/features/data-driven-content/crm-objects Los objetos del CRM se pueden consultar y renderizar en el contenido alojado en HubSpot, lo que permite compartir datos entre tus operaciones comerciales, el sitio web y los correos electrónicos. 'Los objetos del CRM se pueden consultar y renderizar en el contenido alojado en HubSpot, lo que permite compartir datos entre tus operaciones comerciales, el sitio web y los correos electrónicos.'; Puedes consultar los objetos del CRM para utilizar sus datos en el contenido alojado en HubSpot, lo que permite compartir los datos entre tus operaciones comerciales, el sitio web y los correos electrónicos. Utilizando las funciones de HubL [`crm_object`](/docs/cms/reference/hubl/functions#crm-object), [`crm_objects`](/docs/cms/reference/hubl/functions#crm-objects) y [`crm_associations`](/docs/cms/reference/hubl/functions#crm-associations), puedes mostrar y controlar la lógica basada en los datos de tu objeto del CRM. Utilizar los datos del CRM en tu sitio web significa que tus datos de ventas, marketing y sitio web se encuentran en el mismo lugar y siempre reflejarán la misma información. Además, ya que puedes asociar registros del CRM entre sí, también puedes extraer datos asociados en las páginas de tu sitio web. Del mismo modo, puedes [crear conjuntos de páginas dinámicas que se generen automáticamente utilizando los datos del objeto del CRM o de HubDB](https://developers.hubspot.com/docs). Puedes obtener más información sobre la creación de páginas del CMS basadas en datos en el curso de [Contenido basado en datos del CMS](https://app.hubspot.com/academy/tracks/1148948/intro) de HubSpot Academy. ### Ejemplo de uso Un ejemplo de uso de los datos de los objetos del CRM en las páginas es una página de índice de bienes raíces. Con un objeto personalizado llamado *propiedad*, se pueden crear registros de objetos individuales para cada casa que necesite ser listada. Los agentes de bienes raíces pueden agregar información a las propiedades del objeto para almacenar detalles, como la ubicación, el número de habitaciones y los precios de venta. Las páginas del sitio web pueden entonces extraer los datos de los registros de cada propiedad para crear una página de índice y páginas de detalles para cada propiedad. [Consulta el repositorio de GitHub](https://github.com/HubSpot/cms-custom-objects-example) para ver el ejemplo completo. Para obtener un resumen de este ejemplo, consulta la [grabación del día del desarrollador de HubSpot 2020](https://developers.hubspot.com/community/developer-day-2020). ## Tipos de objetos del CRM compatibles A continuación se muestran los tipos de objetos del CRM de los que puedes extraer datos para tus páginas del CMS. La posibilidad de utilizar los datos en todas las páginas o solo en las páginas privadas depende del tipo de objeto. En las siguientes tablas, puedes obtener más información sobre los tipos de objetos disponibles para el contenido CMS junto con los nombres del tipo de objeto y nombres totalmente cualificados. ### Datos del objeto del CRM disponibles para todas las páginas Los datos de los siguientes objetos del CRM pueden utilizarse en cualquier página del CMS. | Tipo de objeto | Nombre del tipo de objeto | Nombre totalmente cualificado | | - | - | - | | [Productos](/docs/api-reference/crm-products-v3/guide) | `product` | `PRODUCT` | | [Eventos de marketing](/docs/api-reference/marketing-marketing-events-v3/guide) | `marketing_event` | `MARKETING_EVENT` | | [Objetos personalizados](/docs/api-reference/crm-custom-objects-v3/guide) | ***Solo Content Hub** Enterprise*. Puedes utilizar el [nombre totalmente cualificado](/docs/cms/start-building/features/data-driven-content/crm-objects#getting-a-custom-object-type-s-details) del objeto o el nombre que se introdujo en el momento de la creación. Por ejemplo, si creas un objeto llamado `Cars`, no puedes hacer referencia a él con `cars` o `Car`. Debes utilizar el [nombre completo](/docs/cms/start-building/features/data-driven-content/crm-objects#getting-a-custom-object-type-s-details) si el objeto personalizado comparte nombre con un objeto estándar. También se recomienda utilizar el FQN si el nombre del objeto está completamente en mayúsculas para evitar posibles conflictos con los objetos estándar de HubSpot. | | ### Datos del objeto del CRM disponibles para las páginas privadas Los datos de los siguientes objetos del CRM solo pueden utilizarse en páginas que requieran una [contraseña](https://knowledge.hubspot.com/es/website-pages/password-protect-a-page) o un [inicio de sesión con membresía.](https://knowledge.hubspot.com/es/website-pages/require-member-registration-to-access-private-content) | Tipo de objeto | Nombre del tipo de objeto | Nombre totalmente cualificado | | - | - | - | | [Contactos](/docs/api-reference/crm-contacts-v3/guide) | `contact` | `CONTACT` | | [Empresas](/docs/api-reference/crm-companies-v3/guide) | `company` | `COMPANY` | | [Negocios](/docs/api-reference/crm-deals-v3/guide) | `deal` | `DEAL` | | [Tickets](/docs/api-reference/crm-tickets-v3/guide) | `ticket` | `TICKET` | | [Cotizaciones](/docs/api-reference/crm-quotes-v3/guide) | `quote` | `QUOTE` | | [Elementos de pedido](/docs/api-reference/crm-line-items-v3/guide) | `line_item` | `LINE_ITEM` | ## Visualizar los datos de un solo registro del CRM con la función crm\_object Utiliza la función [`crm_object`](/docs/cms/reference/hubl/functions#crm-object) para obtener un único registro del CRM de HubSpot por consulta o por el ID del registro del CRM. Los registros de los objetos se devuelven como un dictado de propiedades y valores. **Input** ```hubl theme={null} {# Render custom object by query #} {% set event = crm_object("event", "name=Defensive Health") %} {{ event.name }} {# Render custom objects specifying the id of the object #} {% set event = crm_object("event", 289236) %} {{ event.name }} ``` **Output** ```html theme={null} <p>Defensive Health</p> <p>Defensive Health</p> ``` Si una consulta devuelve una colección de registros, la función devolverá el primer registro de la colección. ## Visualización de datos de varios registros del CRM con la función crm\_objects Utiliza la función [`crm_objects()`](/docs/cms/reference/hubl/functions#crm-objects) para obtener registros del CRM por tipo de objeto desde el CRM de HubSpot por consulta o por el ID de registro. Los registros aparecerán en un dicc. de propiedades y valores. El registro devuelto contiene una propiedad `results` que se puede recorrer en bucle para mostrar la información de los elementos del registro. **Input** ```hubl theme={null} {# Render custom objects by query #} {% set events = crm_objects("event", "limit=3&type=virtual") %} <h3>{{events.total}} New Events:<h3> <ul> {% for event in events.results %} <li>Name: {{ event.name }}</li> {% endfor %} <ul> {# Render custom objects by ids #} {% set events = crm_objects("event", [289236,289237,289238]) %} <h3>{{events.total}} New Events:<h3> <ul> {% for event in events.results %} <li>Name: {{ event.name }}</li> {% endfor %} <ul> ``` **Output** ```html theme={null} <h3> 3 New Events: <h3> <ul> <li>Name: Defensive Health</li> <li>Name: Body Balance</li> <li>Name: Happy Heart</li> <ul> <h3> 3 New Events: <h3> <ul> <li>Name: Defensive Health</li> <li>Name: Body Balance</li> <li>Name: Happy Heart</li> <ul></ul> </ul> </h3> </h3> </ul> </ul> </h3> </h3> ``` ## Mostrar los registros asociados Utiliza la función de HubL [`crm_associations`](/docs/cms/reference/hubl/functions#crm-associations) para obtener una lista de registros asociados del CRM de HubSpot basada en el ID del registro, la categoría de la asociación y el ID de definición de la asociación.[](#getting-a-custom-object-s-details) Los registros aparecerán en un dicc. de propiedades y valores. **Input** ```hubl theme={null} {% set associated_objects = crm_associations(289236, "USER_DEFINED", 3) %} <h3>Contacts Associated With Event</h3> <ul> {% for contact in associated_objects.results %} <li>Name: {{ contact.firstname }} {{ contact.lastname }}</li> {% endfor %} </ul> ``` **Output** ```html theme={null} <h3> Contacts Associated With Event <h3> <ul> <li>Name: Brian Halligan</li> <li>Name: Dharmesh Shah</li> <li>Name: Yamini Rangan</li> </ul> </h3> </h3> ``` ## Obtener los detalles de un tipo de objeto personalizado Para obtener un tipo de objeto personalizado el `name`, el `id`, el `fullyQualifiedName`, los ID de asociación y otros detalles, puedes realizar una solicitud `GET` a la [API del esquema de objetos del CRM](https://developers.hubspot.com/docs). `fullyQualifiedName` para los tipos de objetos de la cuenta en específico incluye el ID de la cuenta de HubSpot, por lo que se recomienda evitar su uso cuando se desarrolle el código para varias cuentas de HubSpot. ## Campo del módulo de objetos del CRM Para proporcionar una forma para que los creadores de contenido seleccionen los registros del CRM para mostrar o ejecutar la lógica, puedes crear módulos que incluyan el [campo de objeto del CRM](https://developers.hubspot.es/docs/cms/reference/fields/module-theme-fields#crm-object). Por ejemplo, puedes mostrar información de un producto específico, contacto, empresa, negocio, cotización, ticket u objeto personalizado. ![Campo de objeto del CRM](https://f.hubspotusercontent00.net/hubfs/53/CRM%20Object%20Field.png) ## Tutoriales y recursos relacionados con objetos del CRM * [Elementos básicos para empezar a usar los objetos personalizados](https://developers.hubspot.com/blog/essentials-for-getting-started-with-custom-objects) * [Diseña con una visión de arquitectura: crea objetos personalizados escalables](https://developers.hubspot.com/blog/how-to-think-like-an-architect-by-building-scalable-custom-objects) * [Crea páginas dinámicas con objetos del CRM](https://developers.hubspot.com/docs) # Crear correos con contenido programable Source: https://developers.hubspot.es/docs/cms/start-building/features/data-driven-content/emails-with-programmable-content Esta característica actualmente está en versión beta. Al usar esta funcionalidad, aceptas los [términos de la versión beta para desarrolladores](https://legal.hubspot.com/hubspot-beta-terms). Esta guía hace referencia a las funciones disponibles solo a través de esa versión beta. [Habilita la versión beta en tus plantillas o módulos.](https://knowledge.hubspot.com/es/marketing-email/create-programmable-emails) Uso de contenido programable para personalizar correos electrónicos con datos de tu cuenta de HubSpot usando HubL. El origen de los datos que puedes utilizar en un correo electrónico programable dependen de tu suscripción de HubSpot: * Si tienes una suscripción a ***Marketing Hub*** *Pro*, puedes utilizar datos de objetos estándar del CRM, como contactos, empresas y productos. * Si tienes una suscripción a ***Marketing Hub*** *Enterprise*, también puedes utilizar fuentes de datos estructuradas como tablas de [HubDB](https://developers.hubspot.com/docs) y [objetos personalizados](https://knowledge.hubspot.com/es/records/use-custom-objects). Estos datos se pueden filtrar según las propiedades de contacto del destinatario. Por ejemplo, en un sitio web inmobiliario, los prospectos podrían completar un formulario con sus necesidades de vivienda. El envío de formularios podría desencadenar un workflow que le envíe al prospecto un correo electrónico con casas en las que pueda estar interesado. ## Límites de envío de correo electrónico Puedes incluir las funciones de HubL del CRM [crm\_object](/docs/cms/reference/hubl/functions#crm-object), [crm\_objects](/docs/cms/reference/hubl/functions#crm-objects) y [crm\_associations](/docs/cms/reference/hubl/functions#crm-associations) en un correo electrónico programable, pero cualquier correo que incluya estas funciones específicas está sujeto a los siguientes límites según el número de destinatarios a los que se lo estés enviando: <table> <tbody> <tr> <td> **Total de destinatarios** </td> <td> **Número máximo de funciones de HubL del CRM** </td> </tr> <tr> <td>500.000</td> <td>1</td> </tr> <tr> <td>250.000</td> <td>2</td> </tr> <tr> <td>165.000</td> <td>3</td> </tr> <tr> <td>125.000</td> <td>4</td> </tr> <tr> <td>100.000</td> <td>5</td> </tr> </tbody> </table> El envío de un correo electrónico que cumple o excede uno de los límites anteriores retrasará o cancelará el envío de tu correo. Además de los límites descritos anteriormente, ten en cuenta las advertencias adicionales que se indican a continuación: * Si clonas un correo electrónico programable, no se podrá enviar mientras el original aún esté en estado de procesamiento. Debes esperar al menos 1 hora entre cada envío de correo electrónico. * No puedes realizar una prueba A/B para un correo electrónico programable que incluya una función de HubL `crm_object`, `crm_objects` o `crm_associations`. Los correos electrónicos enviados mediante estas funciones tienen tiempos de envío significativamente más lentos que otros correos, lo que puede producir resultados inexactos en las pruebas. ## 1. Crear un módulo de correo electrónico programable Para crear el módulo de correo electrónico para acceder a tus datos de HubDB u objeto personalizado: * En tu cuenta de HubSpot, navega hasta **Marketing** > **Archivos y plantillas** > **Administrador de diseño**. * En la parte superior izquierda, haz clic en **Archivo**, y luego selecciona **Nuevo archivo**. * En el cuadro de diálogo, selecciona **Módulo** para el tipo de archivo y luego haz clic en **Siguiente**. Luego, selecciona la casilla de verificación **Correos electrónicos** e introduce un **nombre** para el archivo. * Haz clic en **Crear**. * Para habilitar el correo electrónico programable para el módulo: * En el inspector de la derecha, activa el interruptor **Activar módulo para correo electrónico programable beta**. ![programmable-email-switch0](https://www.hubspot.es/hubfs/Knowledge_Base_2021/Developer/programmable-email-switch0.png) * También puedes habilitar el correo electrónico programable para una plantilla de correo electrónico codificada agregando `isEnabledForEmailV3Rendering: true` en la parte superior del archivo. ![enable-design-manager-template-for-programmable-email](https://knowledge.hubspot.com/hs-fs/hubfs/Imported%20sitepage%20images/enable-design-manager-template-for-programmable-email.png?width=510\&name=enable-design-manager-template-for-programmable-email.png) Con el módulo creado, agregarás entonces el código para acceder a los datos desde tu CRM. En los siguientes ejemplos se muestra cómo consultar desde diferentes fuentes de datos. ### Objetos estándar Puedes utilizar las funciones de HubL como [crm\_object](/docs/cms/reference/hubl/functions#crm-object), [crm\_objects](/docs/cms/reference/hubl/functions#crm-objects) y [crm\_associations](/docs/cms/reference/hubl/functions#crm-associations) para consultar datos de objetos estándar en tu cuenta, como contactos, empresas o productos. El siguiente código utiliza la función de HubL [`crm_object`](/docs/cms/reference/hubl/functions#crm-object) para consultar los datos de un producto con un ID de `2444498793` y representar el nombre, la descripción y el precio: ```hubl theme={null} {% set product = crm_object("product", 2444498793, "name,description,price") %} <div> <p> <span>Name: </span> <span>{{ product.name }}</span> </p> <p> <span>Description: </span> <span>{{ product.description }}</span> </p> <p> <span>Price: </span> <span>{{ product.price }}</span> </p> </div> ``` ### Objetos personalizados Si tienes una cuenta de ***Marketing Hub** Enterprise*, puedes consultar datos de un objeto personalizado que hayas creado en tu cuenta. El siguiente código recupera datos de un objeto personalizado llamado *Propiedad*, devolviendo valores (por ejemplo, ubicación, precio) almacenados en las propiedades del objeto personalizado. Ten en cuenta que el siguiente ejemplo utiliza el nombre totalmente calificado del objeto personalizado como primer argumento cuando se ejecuta la [función de HubL](/docs/cms/reference/hubl/functions#crm-objects) `crm_objects`. * El nombre totalmente calificado comienza con el ID de la cuenta de HubSpot (precedido por `p`), seguido de un guion bajo y el nombre en plural en minúsculas del objeto personalizado (por ejemplo, `properties`). * Puedes recuperar un `fullyQualifiedName` de un objeto haciendo una solicitud `GET` a la [API del esquema de objetos del CRM](https://developers.hubspot.com/docs). ```hubl theme={null} {% set real_estate_listings = crm_objects("p2990812_properties", "", "listing_name,location, price, address, type") %} {% for home in real_estate_listings.results %} {{ home.address}} <br> {{ home.price }} <br> <img alt="{{ home.name }}" src="{{ home.hero_image }}" style="outline: none; max-width: 100%;" width="260px" /> <br> <hr> {% endfor %} ``` Si el nombre de tu objeto personalizado contiene guiones (por ejemplo, *Mi-Objeto-Personalizado*), sus propiedades no se pueden mostrar en un correo electrónico programable. Puedes recrear el objeto personalizado con los guiones omitidos [directamente en tu cuenta de HubSpot](https://knowledge.hubspot.com/es/object-settings/create-custom-objects) o puedes usar la [API de objeto personalizado](/docs/api-reference/crm-custom-objects-v3/guide). Para filtrar los datos que se devuleven para cada destinatario, puedes agregar un parámetro `query`, el cual filtrará los resultados por las propiedades de contacto del destinatario. Consulta la [lista completa de opciones de filtros](/docs/api-reference/cms-hubdb-v3/guide#filter-returned-rows). ```hubl theme={null} {% set query = "price__lte="~contact.budget_max|int~"&price__gte="~contact.budget_min|int~"&city="~contact.city"&order=listing_name" %} {% set real_estate_listings = crm_objects("p2990812_Property", query, "listing_name,location, price, address, type") %} {% for home in real_estate_listings.results %} ... {% endfor %} ``` ### HubDB Si tienes una cuenta de ***Marketing Hub*** *Enterprise*, puedes usar datos de una tabla de HubDB en tu correo electrónico. El siguiente código utiliza la función de HubL [`hubdb_table_rows`](/docs/cms/reference/hubl/functions#hubdb-table-rows) para recuperar todos los datos de la tabla. Esto enumerará todas las propiedades inmobiliarias en el correo electrónico, mostrando los detalles de cada propiedad junto con su imagen. ```hubl theme={null} {% set real_estate_listings = hubdb_table_rows(1234567) %} {% for home in real_estate_listings%} {{ home.address}} <br> {{ home.price }} <br> <img alt="{{ home.name }}" src="{{ home.hero_image.url }}" style="outline: none; max-width: 100%;" width="260px" /> <br> <hr> {% endfor %} ``` Para filtrar los datos que se devuelven para cada destinatario, puedes agregar un parámetro `query`, que filtrará los resultados por las propiedades de contacto especificadas. Consulta la [lista completa de opciones de filtros](/docs/api-reference/cms-hubdb-v3/guide#filter-returned-rows). ```hubl theme={null} {% set query = "price__lte="~contact.budget_max|int~"&price__gte="~contact.budget_min|int~"&persona="~contact.hs_persona.value~"&order=listing_name" %} {% for home in real_estate_listings %} ... {% endfor %} ``` En el ejemplo anterior, se hace referencia a la propiedad de contacto *Presupuesto máximo* con `contact.budget_max`, mientras que a *Buyer persona* se hace referencia con `contact.hs_persona.value`. Esto se debe a que *Buyer persona* es una [propiedad de enumeración](https://knowledge.hubspot.com/es/properties/property-field-types-in-hubspot), que requiere un `.value` adicional para analizar el valor de la propiedad, mientras que otros tipos de propiedades no lo hacen. ## 2. Agregar el módulo a un correo electrónico Con el módulo publicado, ahora lo agregarás al cuerpo del correo electrónico de arrastrar y soltar. * En tu cuenta de HubSpot, navega hasta **Marketing** > **Correo electrónico**. * Selecciona el **correo electrónico** que creaste. * En la barra lateral izquierda, en *Contenido*, haz clic en **Más**. Encuentra tu módulo de correo electrónico programable y luego arrástralo hasta el cuerpo del correo. ![drag-and-drop-email-editor-more-modules](https://www.hubspot.es/hubfs/Knowledge_Base_2021/Developer/drag-and-drop-email-editor-more-modules.png) Si configuraste el módulo para filtrar datos por propiedades de contacto específicas, la vista previa del correo electrónico aparecerá en blanco. Esto se debe a que la herramienta de correo electrónico no se ha configurado para obtener una vista previa del correo por un contacto específico. Para obtener una vista previa de cómo será el correo electrónico para un contacto específico: * En la parte superior derecha, haz clic en **Acciones** y luego selecciona **Vista previa**. ![email-actions-menu0](https://www.hubspot.es/hubfs/Knowledge_Base_2021/Developer/email-actions-menu0.png) * En la siguiente pantalla, haz clic en el menú desplegable **Ver como un contacto específico** y luego selecciona un **contacto**. ![preview-email-as-specific-contact0](https://www.hubspot.es/hubfs/Knowledge_Base_2021/Developer/preview-email-as-specific-contact0.png) Ahora deberías ver solo los datos relevantes para el destinatario, filtrados por sus propiedades de contacto. ![Captura de pantalla de la vista previa del correo electrónico](https://f.hubspotusercontent00.net/hubfs/53/preview%20window.png) Si una plantilla o módulo de correo electrónico contiene código personalizado con HubL no resuelto, aparecerá un módulo de marcador de posición en su lugar. ![placeholder-module-in-programmable-email](https://www.hubspot.es/hubfs/Knowledge_Base_2023_2024/placeholder-module-in-programmable-email.png) Es importante tener siempre datos de reserva para enviar en el caso de que no haya filas de HubDB o registros de objetos personalizados que cumplan con los criterios que estableciste. De lo contrario, el destinatario podría recibir un correo electrónico en blanco. Esta versión beta puede causar problemas con las plantillas existentes. Es importante probar los cambios antes de publicar y enviar un correo electrónico en directo. ## Más tutoriales enfocados en HubDB * [Desarrollo de páginas dinámicas con HubDB](https://developers.hubspot.com/docs) * [Cómo unir varias tablas de HubDB](https://developers.hubspot.com/docs) * [Cómo crear una página dinámica para miembros del equipo con HubDB](https://developers.hubspot.com/docs) * [Cómo crear páginas dinámicas multinivel usando HubDB](https://developers.hubspot.com/docs) ## HubSpot Academy * [Uso de HubDB y objetos personalizados en CMS Hub](https://academy.hubspot.com/lessons/other_data_sources_hubdb_and_custom_objects) # Crear un sitio web para una agencia de contratación utilizando GraphQL (BETA) Source: https://developers.hubspot.es/docs/cms/start-building/features/data-driven-content/graphql/build-a-recruiting-agency-using-graphql # Consultar datos de HubSpot usando GraphQL Source: https://developers.hubspot.es/docs/cms/start-building/features/data-driven-content/graphql/query-hubspot-data-using-graphql # Utilizar datos de una consulta de GraphQL en las páginas de tu sitio web Source: https://developers.hubspot.es/docs/cms/start-building/features/data-driven-content/graphql/use-graphql-data-in-your-website-pages # Contenido en varios idiomas Source: https://developers.hubspot.es/docs/cms/start-building/features/multi-language-content Los desarrolladores que construyen sitios web en HubSpot pueden admitir fácilmente un sitio web en varios idiomas. Es posible que se requiera un poco de esfuerzo de desarrollo según tu negocio único. Cualquier empresa que haga negocios entre regiones o con una base de clientes que hable varios idiomas debe poder conectarse con su audiencia en el idioma de la audiencia. Con CMS de HubSpot, los usuarios pueden [crear variantes en varios idiomas](https://knowledge.hubspot.com/es/cos-general/how-to-manage-multi-language-content-with-hubspots-cos) de su contenido que permiten al usuario final ver el contenido en el idioma con el que se sienten más cómodos. HubSpot establece un número de facetas de un sitio web multilingüe para ti automáticamente, pero también hay un número de pasos que los desarrolladores deben tomar para asegurarse de que tu sitio web está listo para varios idiomas. ## Funcionalidades multilingües predeterminadas de HubSpot Cada vez que se crea una variante en varios idiomas para una página en HubSpot, automáticamente: * Creamos una nueva entrada en el mapa del sitio XML que indique el nombre y la URL de la página traducida. * Especificamos el idioma del contenido dentro de la página `<head>` para las plantillas creadas con la funcionalidad de arrastrar y soltar. * Identificamos otras páginas dentro del grupo de contenido multilingüe siguiendo el formato estandarizado apropiado, que marca las otras páginas como alternativas para evitar errores de contenido duplicado y también identifica el código [ISO 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) asociado con la(s) traducción(es) del idioma: `<link rel="alternate" hreflang="[**_lang_code_**](https://developers.google.com/search/docs/specialty/international/localized-versions?visit_id=638932791536453915-3926684733&rd=1#language-codes)" href="_url_of_page_" />` * Vuelve a escribir enlaces en las páginas de idiomas para navegar a las versiones intra-idioma de la página enlazada para ayudar a los visitantes a mantenerse en el idioma y evitar la necesidad de que tengas que actualizar cada enlace en cada traducción de página. Para un elemento dado, puedes desactivar esta reescritura agregando la clase "hs-skip-lang-url-rewrite" al elemento. ### Lo que no hace HubSpot Con el CMS de HubSpot, HubSpot no hace automáticamente: * traducir el contenido de la página para ti. * dirigir a los usuarios a una variante en varios idiomas basada en su GeoIP. * incluir un módulo de conmutador de idioma dentro de tu encabezado o sitio web. * especificar el idioma de una página para los archivos codificados. * establecer el atributo direccional de contenido para las traducciones utilizando un idioma que se lee de derecha a izquierda en lugar de de izquierda a derecha para los archivos codificados. ## Establecer variables de idioma Debido a que los archivos codificados no incluyen automáticamente declaraciones de idioma o atributos direccionales de idioma de contenido, esto debe configurarse manualmente para plantillas codificadas. Las variables de idioma se pueden configurar en HTML o rellenar a través de HubL, como en la [plantilla Boilerplate de CMS](https://github.com/HubSpot/cms-theme-boilerplate/blob/master/src/templates/layouts/base.html#L2). Configurar estas propiedades usando HubL permitirá que estos datos se rellenen dinámicamente dentro del HTML de una página en función del idioma establecido para la página dentro del CMS de HubSpot. ```hubl theme={null} <html lang="{{ html_lang }}" {{ html_lang_dir }}> ``` ## Utilizar módulos editables por página Para garantizar que el contenido se pueda localizar en cada instancia del uso de una plantilla, aprovecha los [módulos personalizados](https://developers.hubspot.com/docs) en lugar de contenido HTML codificado siempre que sea posible. La creación de módulos que se pueden editar a nivel de página permitirá a los creadores de contenido establecer el contenido específico que debe aparecer en cada página sin tener que ajustar el código de la plantilla. También permite que se utilice contenido único en todas las páginas que comparten una plantilla. ## Incluir traducciones de campo en módulos y temas personalizados Para respaldar tu equipo global, puedes publicar traducciones de los módulos que creaste en HubSpot. Después de traducir y publicar el contenido en el módulo en los idiomas de los miembros de tu equipo, los usuarios verán las etiquetas de campo para ese módulo en el idioma predeterminado de su cuenta. El contenido de un módulo traducido no se traducirá automáticamente; deberás hacer esto. Puedes crear traducciones de tu módulo en cualquier idioma compatible. Puedes establecer traducciones usando las [herramientas de desarrollo local](https://developers.hubspot.com/docs#local-module-file-structure) o a través del Administrador de diseño. ### Desarrollo local Para configurar las traducciones usando herramientas de desarrollo local, cada carpeta de módulo y cada carpeta de tema pueden contener una carpeta `_locales`, con subcarpetas de idioma local, cada una con un archivo `messages.json`, que contiene traducciones de campo de módulo. ![Captura de pantalla de las traducciones del módulo de edición local en VS Code](https://newinboundblog.hubspot.com/hubfs/local%20module%20translations.png) ### Administrador de diseño Para configurar las traducciones de campo a través del [Administrador de diseño](/docs/cms/start-building/introduction/developer-environment/design-manager), al ver el módulo, navega a la opción "Agregar traducciones" en el lado derecho de la pantalla. Selecciona los idiomas en los que trabaja tu equipo desde el menú desplegable. Desde allí, puedes seleccionar cada idioma y especificar las convenciones de etiquetado para cada campo en cada idioma. ![Captura de pantalla de traducciones de campo en el Administrador de diseño](https://newinboundblog.hubspot.com/hubfs/field_translations.gif) Las traducciones de campos de tema no tienen una interfaz en el Administrador de diseño y deben editarse a través de los archivos `.json`. ## Traducir páginas del sistema Para configurar las traducciones de las páginas del sistema, incluidas las páginas de restablecimiento de contraseñas y suscripción de correo electrónico, puedes personalizar los campos de etiquetas de módulo y HubL con el contenido traducido. Más información sobre los campos disponibles para los [módulos](/docs/cms/reference/modules/default-modules) y las [etiquetas HubL de la página del sistema](/docs/cms/reference/hubl/tags/standard-tags#system-page-tags). ## Incluir un conmutador de idioma Para permitir a los usuarios finales alternar entre las traducciones disponibles, es recomendable que se agregue un módulo de conmutador de idioma a tu sitio web. Un [ejemplo de cómo implementar un conmutador de idioma se](https://github.com/HubSpot/cms-theme-boilerplate/blob/09ad0b2c3bbc8400e64c5617268cb0504392e8e5/src/templates/partials/header.html#L26-L47) puede encontrar en [Boilerplate de temas de CMS](/docs/cms/start-building/building-blocks/themes/hubspot-cms-boilerplate). ```hubl theme={null} {# Header navigation row one #} <div class="header__row-1"> {% if content.translated_content.values()|selectattr('published')|length || is_listing_view && group.translations %} <div class="header__language-switcher header--element"> <div class="header__language-switcher--label"> {% module 'language-switcher' path='@hubspot/language_switcher', label='Language switcher', display_mode='localized' %} <div class="header__language-switcher--label-current"> {{ locale_name(locale) }}</div> </div> </div> {% endif %} <div class="header__search header--element"> {% module 'site_search' path='@hubspot/search_input', label='Search', field_label='Search', placeholder='' %} </div> </div> {# End header navigation row one #} ``` ## Implementación de la búsqueda en tu sitio web La [búsqueda de contenido](/docs/cms/start-building/building-blocks/modules/content-search) admite la consulta de contenido en los distintos idiomas de tu sitio web. El parámetro de filtro de idioma se puede usar al pulsar[/contentsearch/v2/search](/docs/api-reference/legacy/site-search-v2/search-Content) para devolver solo los idiomas especificados, lo que te permite crear experiencias de búsqueda para cada idioma en tu sitio web o permitir que los visitantes busquen en varios idiomas en tu sitio web. ## Usar parciales globales y módulos Utiliza los campos del módulo para hacer que el texto en encabezados, pies de página y barras laterales sea editable. Coloca estos módulos en parciales globales. Los creadores de contenido no solo se beneficiarán de la facilidad de edición, sino que los parciales globales [admiten la configuración de sus ajustes para cada idioma](https://knowledge.hubspot.com/es/cos-general/how-to-manage-multi-language-content-with-hubspots-cos#edit-global-content-in-a-multi-language-page). ![Captura de pantalla del editor de páginas que muestra parciales del encabezado](https://newinboundblog.hubspot.com/hubfs/edit-multilanguage-global-content.png) # Comenzar a usar las funciones sin servidor Source: https://developers.hubspot.es/docs/cms/start-building/features/serverless-functions/getting-started-with-serverless-functions Crea tu primera función sin servidor en el CMS de HubSpot y obtén una respuesta. 'Crea tu primera función sin servidor en el CMS de HubSpot y obtén una respuesta.'; Las funciones sin servidor proporcionan una forma de ejecutar JavaScript a través de HubSpot en el lado del servidor, evitando que quede expuesto al cliente. Esto puede ser importante para realizar solicitudes a la API que contengan información sensible, como una clave de API u otras credenciales. Cuando se invoca la función, HubSpot la ejecuta en su back end, lo que también significa que no necesitas proporcionar tus propios servidores back end para hacer solicitudes a tu sitio web CMS. Las funciones sin servidor de HubSpot utilizan el tiempo de ejecución [NodeJS](https://nodejs.org/en/about/). En esta guía, aprenderás a crear una función sin servidor sencilla que obtenga una cotización de un servicio de terceros y la muestre en una página web. Para crear y desplegar la función sin servidor en tu cuenta, utilizarás un proyecto de desarrollador de HubSpot. Mientras que el método anteriormente documentado de subir funciones sin servidor a el administrador de diseño sigue siendo compatible, se recomienda utilizar el desarrollador de proyectos, ya que incluyen una aplicación privada para facilitar la autenticación y al mismo tiempo permiten las dependencias de terceros. El contenido de esta guía ha sido actualizado para utilizar el método más reciente. Puedes encontrar información de referencia para las funciones sin servidor creadas desde el administrador de diseño en la sección de [referencia ](/docs/cms/reference/serverless-functions/serverless-functions). Para una revisión de general de las funciones sin servidor, consulta el [resumen general de las funciones sin servidor](https://developers.hubspot.com/docs). También puedes consultar el [canal de YouTube de HubSpot Developers](https://www.youtube.com/watch?v=N0arXQOyfXo) para ver un tutorial sobre el uso de funciones sin servidor en un proyecto en el CMS. ## Requisitos previos Antes de empezar este tutorial, necesitarás: * Tener *una cuenta con una suscripción a **Content Hub** Enterprise* o una [cuenta de entorno de pruebas del CMS](https://app.hubspot.com/signup-hubspot/cms-developers). * La [CLI de HubSpot](/docs/developer-tooling/local-development/hubspot-cli/reference#install-the-cli) (se recomienda la última versión), deberá estar instalada y autenticada con la cuenta que estés utilizando. Para comprobar qué cuentas están autenticadas, puedes ejecutar `hs accounts list`. Más información en los [primeros pasos con el desarrollo local](/docs/developer-tooling/local-development/hubspot-cli/install-the-cli) ## 1. Crear una nueva carpeta de proyecto Empieza creando un proyecto de forma local para que puedas crearlo y desplegarlo en tu cuenta. * En el terminal, navega hasta el directorio donde guardarás tu proyecto utilizando el comando `cd`. ```shell theme={null} cd Documents/Dev/serverless-function-project ``` * Ejecuta `hs project create` para crear una propiedad nueva. ```shell theme={null} hs project create ``` * Sigue los prompts del terminal para crear tu proyecto. Para la plantilla, selecciona **Crear un proyecto vacío (sin plantilla)**. ![Opción prompt del terminal para crear un proyecto vacío sin plantilla](https://www.hubspot.es/hubfs/Knowledge_Base_2023-24-25/terminal-select-empty-project.png) * Navega hasta el directorio del nuevo proyecto utilizando el comando `cd`. Por ejemplo, si llamas a tu proyecto *mi nuevo proyecto*: ```shell theme={null} cd my-new-project ``` ## 2. Añade una función sin servidor al proyecto Una vez creado tu proyecto, ábrelo en tu editor preferido, como [VS Code](https://developers.hubspot.com/docs). HubSpot habrá creado automáticamente un directorio de proyecto junto con un directorio vacío `src` y un archivo de configuración `hsproject.json`. Para añadir una función sin servidor al proyecto, crea un directorio `app` dentro del directorio `src` y luego añade los siguientes directorios y archivos dentro de él: * `app/app.json`: el archivo de configuración de la aplicación. * `app/app.functions`: el directorio de funciones sin servidor. Puedes utilizar el nombre que quieras, siempre que termine en `.functions`. * `app/app.functions/function.js`: el código JavaScript que se ejecutará cuando se invoque la función. * `app/app.functions/serverless.json`: el archivo de configuración de la función sin servidor. * `app/app.functions/package.json`: incluye las dependencias necesarias. ![Estructura del proyecto tras añadir los archivos y carpetas anteriores al directorio del proyecto](https://www.hubspot.es/hubfs/Knowledge_Base_2023-24-25/project-serverless-functions-structure.png) * Copia el código de ejemplo que aparece a continuación en tus respectivos archivos locales `app.json`, `function.js`, `serverless.json`, y `package.json`. Debajo de cada bloque de código `.json`, también encontrarás una tabla con definiciones de campos. **app.json** ```json theme={null} { "name": "Serverless function app", "description": "This app runs a serverless function to fetch a quote using the Zen Quotes API.", "scopes": ["crm.objects.contacts.read", "crm.objects.contacts.write"], "uid": "serverless-function-app", "public": false } ``` | Campo | Tipo | Descripción | | - | - | - | | `name` | Cadena | El nombre de la aplicación, que se mostrará en la interfaz de usuario de HubSpot. | | `description` | Cadena | La descripción de la aplicación, que se mostrará en la interfaz de usuario de HubSpot. | | `scopes` | Matriz | Los permisos a los que tiene acceso la aplicación para autenticar las solicitudes con el token de acceso privado a la aplicación. Los dos permisos anteriores son los permisos mínimos requeridos. No se añaden permisos adicionales para este tutorial, ya que no necesitarás utilizar el token de acceso a la aplicación privada para la solicitud que harás. | | `uid` | Cadena | El identificador único de la aplicación. Puede ser cualquier cadena, pero debe identificar significativamente a la aplicación. HubSpot identificará la aplicación mediante este ID para que puedas cambiar el `name` de la aplicación de forma local o en HubSpot sin eliminar los datos históricos o de estado, como los registros. | | `public` | Cadena | Ajuste a `false` para aplicaciones privadas. | **function.js** Esta función obtendrá una cotización aleatoria de la [API de Cotizaciones Zen](https://zenquotes.io/). ```js theme={null} const axios = require("axios"); exports.main = async context => { try { // Make GET request to the ZenQuotes API const response = await axios.get("https://zenquotes.io/api/random"); // Extract the quote data (first item in the array) const quoteData = response.data[0]; // Log the quote and author to console console.log(`"${quoteData.q}" — ${quoteData.a}`); // Return a properly formatted response with status code and body return { statusCode: 200, body: quoteData, headers: { "Content-Type": "application/json", }, }; } catch (error) { // Handle any errors that occur during the request console.error("Error fetching quote:", error.message); // Return an error response return { statusCode: 500, body: { error: "Failed to fetch quote" }, headers: { "Content-Type": "application/json", }, }; } }; ``` **serverless.json** ```js theme={null} { "appFunctions": { "quote-function": { "file": "function.js", "secrets": [], "endpoint": { "path": "fetch-quote", "method": ["GET"] } } } } ``` | Campo | Tipo | Descripción | | - | - | - | | `quote-function` | Objeto | Un objeto que contiene los detalles de configuración de la función sin servidor. Este objeto puede tener cualquier nombre, pero debe coincidir con el nombre del campo asociado al que haces referencia en el campo `appFunctions` de tu archivo `serverless.json`. | | `file` | Cadena | El nombre del archivo JavaScript que contiene el código de la función sin servidor que se va a ejecutar. | | `secrets` | Matriz | Matriz que contiene los nombres de los secretos que la función utilizará para autenticar las solicitudes. Para este tutorial no se necesitan secretos. | | `endpoint` | Objeto | Un objeto que contiene detalles sobre el endpoint al que puedes acceder para invocar la función. El campo `path` define el último valor de la ruta del endpoint `/hs/serverless/<path>`, mientras que el campo `method` define el método de solicitud. | **package.json** ```json theme={null} { "name": "example-serverless-function", "version": "0.1.0", "author": "HubSpot", "license": "MIT", "dependencies": { "@hubspot/api-client": "^7.0.1", "axios": "^0.27.2" } } ``` | Campo | Tipo | Descripción | | - | - | - | | `dependencies` | Objeto | Las dependencias incluidas para la función sin servidor. | * Después de añadir el código anterior, guarda los cambios. ## 3. Subir el proyecto a HubSpot Una vez guardados los cambios, ya puedes subir el proyecto a HubSpot para crear y desplegar la aplicación y la función sin servidor. * En la terminal, ejecuta `hs project upload`. ```shell theme={null} hs project upload ``` * Confirma que quieres crear el proyecto en la cuenta. No necesitarás confirmarlo de nuevo después de la creación inicial. El terminal mostrará el estado actual de los pasos de compilación y despliegue a medida que avanzan. * Una vez que la subida se haya completado, ejecuta `hs project open` para ver el proyecto en HubSpot. ```shell theme={null} hs project open ``` En HubSpot, puedes ver los detalles del proyecto, los registros de creación y despliegue, los registros de funciones sin servidor, gestionar el proyecto y la aplicación, y mucho más. Más información sobre la [gestión de proyectos en HubSpot](https://developers.hubspot.com/docs#view-the-project-in-hubspot). ## 4. Probar la acción Con la función sin servidor desplegada, puedes invocarla usando su URL pública. Las funciones sin servidor creadas con proyectos de desarrollador tienen la siguiente estructura de URL pública: `https://<domain>/hs/serverless/<endpoint-path-from-config>`. * `<domain>`: puedes utilizar cualquier dominio conectado a la cuenta. Por ejemplo, si tanto el sitio web.com como el subdominio.marca.com están conectados a la cuenta, podrías llamar a la función utilizando `https://website.com/hs/serverless/<path>` o `https://subdomain.brand.com/hs/serverless/<path>`. * `<endpoint-path-from-config>`: el valor del campo `path` en `serverless.json`. Basándonos en el código de ejemplo proporcionado en este tutorial, la URL pública para invocar la función será: `https://<domain>/hs/serverless/fetch-quote`. En la URL para llamar a la función, la ruta del endpoint es global en lugar de para la aplicación o el proyecto. Si tienes rutas de endpoint idénticas a través de múltiples aplicaciones o proyectos, la función de endpoint desplegada más recientemente tiene prioridad. Para ver el resultado de la función, navega hasta esa URL en tu navegador, sustituyendo el dominio por uno de tus dominios alojados en HubSpot. Si no has conectado un dominio personalizado, puedes utilizar uno de los dominios predeterminados que HubSpot proporciona: `<hubId>.hs-sites.com` (por ejemplo, `123456.hs-sites.com`). Tu navegador debería mostrar los datos devueltos por la API de cotizaciones Zen. ![Navegador que muestra los datos devueltos por la API de cotizaciones Zen](https://www.hubspot.es/hubfs/Knowledge_Base_2023-24-25/zen-quotes-api-return.png) ## 5. Invocar la función desde una página web Ahora que has creado la función sin servidor y has confirmado que devuelve datos, impleméntala en una página para ver los datos devueltos en un contexto más real. Para este tutorial, crearás una plantilla de página que contenga algo de JavaScript personalizado y HTML para ejecutar la función y mostrar los datos de respuesta. Primero, crea una plantilla para una página nueva: * En tu entorno local, crea un nuevo directorio que contenga la plantilla de la página. A efectos de este tutorial, crea este directorio fuera del directorio del proyecto creado por `hs project create`. * En el terminal, navega hasta ese directorio utilizando el comando `cd`. ```shell theme={null} cd Documents/Dev/serverless-page ``` * Ejecuta `hs create template "serverless-template"` para crear una nueva plantilla llamada `serverless-template`. ```shell theme={null} hs create template "serverless-template" ``` * Selecciona el tipo de plantilla de la **página**. * Abre el archivo de plantilla de la página recién creado en tu editor y luego, sustituye el código de la plantilla por el código que aparece a continuación. Asegúrate de sustituir `<domain>` en la URL del endpoint de la función (`fetch('http://<domain>/hs/serverless/fetch-quote')`) por un dominio que esté conectado a tu cuenta de HubSpot. ```html theme={null} <!-- templateType: page label: Serverless function example template isAvailableForNewContent: true --> <!doctype html> <html> <head> <meta charset="utf-8" /> <title>{{ content.html_title }} {{ standard_header_includes }} {% module "page_template_logo" path="@hubspot/logo" label="Logo" %}

        Get quote

        Click the button to fetch and display a quote.

        {{ standard_footer_includes }} ``` * Guarda el archivo, luego ejecuta `hs upload` para subirlo a HubSpot. Sigue las indicaciones del terminal para seleccionar la ruta local de origen y de destino. Para este tutorial, basta con que pulses **Introducir** en cada prompt para utilizar las rutas predeterminadas. Luego, crea una nueva página a partir de la plantilla en HubSpot. * Navega al panel de páginas web de tu cuenta de HubSpot ejecutando el comando `hs open website-pages`. ```shell theme={null} hs open website-pages ``` Consulta la lista completa de accesos directos abiertos disponibles ejecutando `hs open --list`. * En tu navegador, haz clic en **Crear** en la parte superior derecha para crear una nueva página. * En el cuadro de diálogo, selecciona un **dominio** para utilizarlo y luego, asigna un **nombre de página**. El dominio de la página tendrá que coincidir con el dominio que estás utilizando para invocar la función sin servidor para evitar errores de origen cruzado (CORS). Puedes seleccionar ese dominio en el menú desplegable o actualizar la URL del endpoint en el código de la plantilla de la página (`fetch('http:///hs/serverless/fetch-quote')`) para utilizar el dominio que selecciones en este paso. * Haz clic en **Crear página**. * En la pantalla de selección de plantillas, busca tu nueva plantilla. Puedes utilizar la etiqueta o el nombre del archivo para buscar la plantilla (por ejemplo, "Página de ejemplo de función sin servidor"). La plantilla aparecerá en *Otras plantillas*, ya que no forma parte de un tema. ![Sección otras plantillas que muestra la plantilla de página recién creada](https://www.hubspot.es/hubfs/Knowledge_Base_2023-24-25/select-new-template.png) * Haz clic en **Seleccionar plantilla**. * En el editor de páginas, haz clic en **Vista previa** en la parte superior derecha. ![Botón de vista previa del editor de páginas](https://www.hubspot.es/hubfs/page-preview.png) * Haz clic en **Abrir en una nueva pestaña**. En la nueva pestaña, ahora deberías poder hacer clic en el botón para obtener y mostrar cotizaciones. ![Demostración de un botón de ejemplo que obtiene y muestra cotizaciones de la API de cotizaciones Zen](https://www.hubspot.es/hubfs/Knowledge_Base_2023-24-25/quote-button-demonstration.gif) ## Próximos pasos Ahora que has creado e implementado una función sin servidor que interactúa con una API de terceros, hay algunas formas de seguir aumentando el uso de tu función sin servidor, como por ejemplo: * [Incluir la autenticación en una solicitud](/docs/cms/reference/serverless-functions/serverless-functions-in-projects#authentication) para realizar llamadas a las API de HubSpot o a otras API autenticadas de terceros. * Implementar el botón y el código JavaScript en un módulo en lugar de codificarlo en la plantilla de la página. Esto te daría una opción más portátil, permitiendo invocar la función desde cualquier página a la que se añada el módulo. Para ello, debes crear un módulo, añadir el HTML en el archivo `module.html` del módulo y el JavaScript en el archivo `module.js`. **module.html** ```html theme={null}

        Get quote

        Click the button to fetch and display a quote.

        ``` **module.js** ```js theme={null} const dataButton = document.getElementById("data-button"); const dataContainer = document.getElementById("data-container"); dataButton.addEventListener("click", function (e) { console.log("Button clicked!"); // Show loading state dataContainer.innerText = "Loading..."; fetch("http://meowmix-2272014.hs-sites.com/hs/serverless/fetch-quote") .then(response => { if (!response.ok) { throw new Error(`HTTP error! Status: ${response.status}`); } // Parse the JSON response return response.json(); }) .then(data => { console.log("Raw data received:", data); // Clear container dataContainer.innerText = ""; // Create the paragraph element const newDataElement = document.createElement("p"); newDataElement.innerText = `"${data.q}" — ${data.a}`; dataContainer.appendChild(newDataElement); }); }); ``` # Resumen de Primeros pasos Source: https://developers.hubspot.es/docs/cms/start-building/features/serverless-functions/overview Aprende los primeros pasos para desarrollar en HubSpot. 'Aprende los primeros pasos para desarrollar en HubSpot.'; Tanto si eres un nuevo desarrollador de HubSpot como si quieres ampliar tus conocimientos, esta sección te guiará a través del proceso de puesta en marcha. Explorarás las distintas vías de desarrollo disponibles, así como las herramientas y cuentas específicas que necesitarás para alcanzar tus metas. ## Las ventajas de una plataforma conectada Primero, es útil considerar qué hace de HubSpot una potente plataforma para desarrolladores. La base de toda cuenta de HubSpot es la plataforma [CRM](/docs/guides/crm/understanding-the-crm) (Customer Relationship Management), una base de datos de relaciones y procesos de negocios. HubSpot ofrece diferentes vías para que desarrolladores y partners externos trabajen con el CRM y puedan crear valor agregado para los usuarios finales de HubSpot. Esto incluye: * Crear integraciones y/o extensiones con las API de HubSpot para sincronizar datos entre HubSpot y plataformas externas. * Construir sitios web personalizados utilizando el CMS (Sistema de gestión de contenido) de HubSpot. Además de un conjunto completo de herramientas de gestión de contenido, el CMS se integra totalmente con el CRM. Esto facilita el lanzamiento de campañas, la captación de leads y las comunicaciones continuas con los clientes. * Personalización del CRM con extensiones de IU. Los desarrolladores pueden utilizar React para crear tarjetas personalizadas flexibles que se integran perfectamente con HubSpot. En la siguiente sección, obtendrás un resumen de las herramientas que están disponibles para los desarrolladores de HubSpot. A continuación, elegirás una ruta para continuar tu viaje como desarrollador de HubSpot. ## 1. Instala herramientas que te ayuden a construir Hay una amplia gama de herramientas disponibles para los desarrolladores de HubSpot. La combinación de herramientas que necesitarás dependerá de tus metas específicas. * **CLI de HubSpot:** Instalar la CLI de HubSpot para el desarrollo local es un gran punto de partida para muchas tareas de desarrollo. La CLI se utiliza al crear extensiones de IU y recursos de CMS, y puede utilizarse para crear y gestionar secretos, tablas de HubDB y datos de objetos personalizados de tu cuenta. Necesitarás tener instalado [Node.js](https://nodejs.org/en/) (se requiere la versión 18 o superior, y se recomienda la versión LTS). Para instalar el CLI globalmente, ejecuta el siguiente comando: ```shell theme={null} npm i -g @hubspot/cli ``` * **Visual Studio Code:** Instalar [Visual Studio Code](https://code.visualstudio.com/) significa que puedes aprovechar la extensión [Visual Studio Code de HubSpot](https://developers.hubspot.com/docs), lo cual te permite centralizar tu workflow de desarrollo. * **Bibliotecas de clientes**: HubSpot proporciona bibliotecas de clientes para [Node](https://github.com/HubSpot/hubspot-api-nodejs), [PHP](https://github.com/HubSpot/hubspot-api-php), [Ruby](https://github.com/HubSpot/hubspot-api-ruby) y [Python](https://github.com/HubSpot/hubspot-api-python). * **Postman:** utiliza [Postman](https://www.postman.com/) para acceder a [Colecciones de Postman de HubSpot](https://www.postman.com/hubspot). A lo largo de la documentación de la API de HubSpot, encontrarás botones para ejecutar llamadas utilizando la colección. ![run-in-postman-current-docs-site](https://www.hubspot.com/hubfs/run-in-postman-current-docs-site.png) Más información sobre [herramientas para desarrolladores de de HubSpot](/docs/developer-tooling/overview). ## 2. Decide qué construir No hay un camino único para desarrollar con HubSpot. Es una plataforma flexible que puede satisfacer una amplia gama de necesidades. Una de las cuatro amplias categorías que se enumeran a continuación debería cubrir la mayoría de estas necesidades. Puedes elegir la que sea más relevante para ti en este momento para una breve introducción, junto con algunos pasos inmediatos para empezar. También puedes hacerte una idea de cuáles son las mejores herramientas para el trabajo, y si se requiere un [tipo específico de cuenta de HubSpot](/docs/getting-started/account-types). * [Utilizar API y crear integraciones](https://developers.hubspot.com#use-apis-and-build-integrations) * [Crear aplicaciones para el mercado](https://developers.hubspot.com#build-for-the-app-marketplace) * [Personalizar la IU de HubSpot](https://developers.hubspot.com#customize-the-hubspot-ui) * [Crear sitios web personalizados](https://developers.hubspot.com#build-custom-websites) ## 3. Únete a tus pares Conecta con tus pares que ya están construyendo en HubSpot. Haz preguntas, comparte conocimientos, construye una comunidad e incluso puede que hagas amigos por el camino. * [Slack para desarrolladores](https://developers.hubspot.com/community) * [Foros de desarrolladores](https://community.hubspot.com/t5/HubSpot-Developers/ct-p/developers) * [Developer Advocacy GitHub](https://github.com/hubspotdev) ## 4. Obtén más información, a tu manera Una vez que estés en marcha, hay muchos recursos disponibles para ayudarte a profundizar. Puedes acceder a guías detalladas, documentos de referencia detallados o a los cursos de [HubSpot Academy](https://academy.hubspot.com/courses), según tu estilo de aprendizaje preferido. # Administrador de archivos Source: https://developers.hubspot.es/docs/cms/start-building/features/storage/file-manager Usar el Administrador de archivos de HubSpot para alojar imágenes en la red de distribución de contenido de CMS de HubSpot y permitir que los creadores de contenido agreguen fácilmente archivos al contenido. Además del sistema de archivos de desarrollador, el administrador de archivos de HubSpot se puede usar para almacenar y servir archivos. Los archivos en el administrador de archivos se sirven a través de la red de distribución de contenido (CDN) de HubSpot. Por opción predeterminada, todos los archivos cargados en el administrador de archivos son de acceso público y pueden ser indexados en los motores de búsqueda. Después de cargar tus archivos, puedes [administrar la configuración de visibilidad de tu archivo ](https://knowledge.hubspot.com/files/organize-edit-and-delete-files#edit-your-file-s-visibility-settings)para evitar que los archivos se indexen o se acceda a ellos. El Administrador de archivos se puede encontrar en [**Marketing > Archivo y plantillas > Archivos**](https://app.hubspot.com/l/files/) en el menú de navegación superior. ![](https://www.hubspot.com/hubfs/image-png-May-24-2023-05-49-31-9738-AM.png) ## Cuando usar el Administrador de archivos Por lo general, el administrador de archivos se debe usar para archivos que están destinados a ser utilizados en selectores de archivos en todo el software HubSpot. Por ejemplo, para seleccionar una imagen en una imagen o módulo de texto enriquecido. Antes de cargar archivos para usar con el administrador de archivos: * Se aplicarán ciertos [límites de tamaño y tipo de archivo](https://knowledge.hubspot.com/files/supported-file-types#files-tool). Más información sobre[ qué considerar antes de cargar archivos](https://knowledge.hubspot.com/files/upload-files-to-use-in-your-hubspot-content#before-you-get-started) al administrador de archivos. * Los archivos cargados en el administrador de archivos no se pueden editar dentro de la aplicación HubSpot, aparte de pequeñas ediciones de archivos de imagen. * Si tienes la intención de editar archivos basados en texto, deben estar almacenados en el administrador de diseño. * Los archivos basados en texto cargados en el Administrador de archivos no se minimizarán ni modificarán de ninguna manera. Si deseas aprovechar la [minificación de JavaScript](https://developers.hubspot.com/docs#javascript-minification) y [minificación y combinación de CSS](https://developers.hubspot.com/docs) de HubSpot, almacena estos archivos en el administrador de diseño. ## Carga de archivos en el Administrador de archivos Los archivos se pueden cargar en el administrador de archivos a través de las siguientes opciones: * Para cargar archivos directamente en HubSpot, descubre cómo [cargar archivos en el administrador de archivos](https://knowledge.hubspot.com/files/upload-files-to-use-in-your-hubspot-content). * Para subir archivos a través de la [CLI de CMS, ](/docs/developer-tooling/local-development/hubspot-cli/install-the-cli)usa el comando `hs upload filemanager`. * Para subir archivos usando una API, obtén más información sobre la [API *Subir un nuevo archivo* de HubSpot](https://developers.hubspot.com/docs#post-%2Ffiles%2Fv3%2Ffiles). Después de cargar tus archivos al administrador de archivos, descubre cómo [organizar y administrar tus archivos y detalles de archivo](https://knowledge.hubspot.com/files/organize-edit-and-delete-files). ## Usar archivos del Administrador de archivos Se puede acceder a los archivos cargados al administrador de archivos a través de las siguientes opciones: * Todos los archivos cargados en el Administrador de archivos son accesibles en los diferentes selectores de archivos en todo HubSpot y el CMS de HubSpot, como en los módulos de texto enriquecido o de imagen en las páginas. * Se puede acceder a los archivos cargados al administrador de archivos a través de un enlace de descarga directa. Descubre cómo [recuperar el enlace de descarga directa de un archivo](https://knowledge.hubspot.com/files/provide-a-direct-download-link-to-a-file-hosted-on-the-files-tool). ## Optimizaciones Los archivos del Administrador de archivos se [almacenan en caché](https://developers.hubspot.com/docs#browser-and-server-caching), se [comprimen y se redimensionan automáticamente para que se puedan servir de manera eficiente](https://developers.hubspot.com/docs#image-compression-optimization-and-automatic-image-resizing) y [accesible en todos los dominios alojados para reducir las solicitudes de origen cruzado](https://developers.hubspot.com/docs#domain-rewriting). Más información sobre la [CDN, la seguridad y el rendimiento de HubSpot CMS](https://developers.hubspot.com/docs). ## Servir archivos HTML y JS desde el administrador de archivos Los archivos HTML y JavaScript subidos en el Administrador de archivos y servidos usando un dominio de HubSpot predeterminado (p. ej., `f.hubspotusercontentXX.net`) usan Tipo de contenido: `text/plain`. Esto significa que los navegadores web no mostrarán ni evaluarán el código. Si un usuario va directamente a un archivo HTML, se mostrará el código HTML al usuario. Para evitar esto, debes servir estos archivos desde uno de tus dominios conectados en lugar de un dominio predeterminado de HubSpot. # API del CMS | HubDB Source: https://developers.hubspot.es/docs/cms/start-building/features/storage/hubdb Los puntos de terminación de HubDB se utilizan para obtener y administrar datos en tus tablas de datos de HubDB. HubDB es un almacén de datos relacional que presenta datos como filas, columnas y celdas en una tabla, muy parecido a una hoja de cálculo. Las tablas de HubDB se pueden agregar o modificar [dentro de tu cuenta de HubSpot](https://developers.hubspot.com/docs#creating-your-first-table), pero también puedes usar los puntos de terminación de API documentados aquí. Para obtener información sobre el uso de datos de tablas de HubDB en tu sitio web o en [correos electrónicos programables](/docs/cms/start-building/features/data-driven-content/emails-with-programmable-content), echa un vistazo [a la documentación para desarrolladores de CMS de HubSpot](https://developers.hubspot.com/docs). Al igual que las páginas del sitio web de HubSpot, las tablas de HubDB son compatibles con las versiones `draft` y `published`. Esto te permite actualizar los datos de la tabla, ya sea para realizar pruebas o para permitir un proceso de aprobación manual, sin que ello afecte a las páginas publicadas. Más información sobre [tablas en borrador vs. tablas en vivo](#draft-vs-live-tables). Si una tabla está configurada para [permitir el acceso público](https://knowledge.hubspot.com/website-and-landing-pages/create-and-hubdb-tables#manage-table-settings-cms-hub-professional-and-enterprise-only), puedes acceder a la versión publicada de la tabla y las filas sin ninguna autenticación especificando el ID de tu cuenta de HubSpot a través del parámetro de consulta `portalId`. Si estás migrando desde la versión 2 de la API de HubDB, obtén más información sobre los [cambios en la API actual (v3)](#changes-in-v3). Los puntos de terminación que admiten `GET` también admiten `CORS`, por lo que puedes acceder a los datos de una tabla del lado del cliente usando JavaScript y tu ID de cuenta. Otros métodos y el punto de terminación *Obtener todas las tablas* requieren autenticación y no son compatibles con `CORS`. ## Límites de tasa Las solicitudes de API de HubDB tienen diferentes límites de tasa, según el tipo de solicitud: * Las solicitudes `GET` realizadas que no requieren autentificación (incluidas las solicitudes de JavaScript del lado del cliente) están limitadas a 10 solicitudes por segundo. Estas solicitudes no contarán para el límite diario. * Todas las demás solicitudes [que utilizan la autenticación](https://developers.hubspot.com/docs) siguen los [límites estándar](/docs/api-reference/overview). ## Tablas en borrador vs tablas en vivo Las tablas de HubDB tienen versiones en borrador y en vivo, y las versiones en vivo se pueden publicar o no publicar. Esto te permitirá actualizar los datos de la tabla, ya sea para vistas preliminares o pruebas de páginas, o para permitir un proceso de aprobación manual, sin afectar ninguna página activa. En esta API, se designan puntos de terminación separados para las versiones en borrador y publicadas de una tabla. Por ejemplo, puedes recuperar la versión publicada de una tabla haciendo una solicitud `GET` al siguiente punto de terminación: `/cms/v3/hubdb/tables/{tableIdOrName}` Y para recuperar cualquier contenido que haya sido redactado pero que aún no haya sido publicado, agregarías `/draft` al final de la URL: `/cms/v3/hubdb/tables/{tableIdOrName}/draft` Los datos en borrador se pueden revisar y luego enviar en HubSpot, o con el punto de terminación `/push-live`. Los datos en borrador también se pueden descartar a través del punto de terminación `/reset`, lo que te permite volver a la versión actual en vivo de los datos sin interrupciones. ## Crear una tabla de HubDB Para crear una tabla de HubDB, haz una solicitud `POST` a `/cms/v3/hubdb/tables`. En el cuerpo de la solicitud, especifica los siguientes campos obligatorios: | Campo | Tipo | Descripción | Ejemplo | | - | - | - | - | | `name` | Cadena | El nombre interno de la tabla. Este nombre no se puede cambiar una vez creada la tabla. Los nombres solo pueden incluir letras minúsculas, dígitos y guiones bajos y no pueden comenzar con un número. | `"name": "my_table"` | | `label` | Cadena | : La etiqueta de la tabla que ven los usuarios al editar la tabla en HubSpot. | `"label":"My table"` | Además, puedes especificar los siguientes campos opcionales: | Campo | Tipo | Descripción | Ejemplo | | - | - | - | - | | `useForPages` | Booleano | Si la tabla se puede utilizar para [la creación de páginas dinámicas](#configuring-hubdb-tables-for-dynamic-pages). | `"useForPages": false` | | `allowPublicAPIAccess` | Booleano | Si la tabla se puede leer sin autorización. | `"allowPublicApiAccess": false` | | `allowChildTables` | Booleano | Si se pueden crear tablas secundarias para la tabla. | `"allowChildTables": false` | | `enableChildTablePages` | Booleano | Si [las páginas dinámicas multinivel](https://developers.hubspot.com/docs) deben crearse utilizando tablas secundarias. | `"enableChildTablePages": false` | | `columns` | Objeto | Las columnas de la tabla. Obtén más información sobre las propiedades de las columnas en las secciones [Agregar columnas de tabla](#add-table-columns) . | `See "Add table columns" section below` | Si aún no se han agregado columnas, tu solicitud de creación podría tener el siguiente aspecto: ```json theme={null} // Example request { "name": "test_table", "label": "Test Table", "useForPages": false, "allowPublicApiAccess": false, "allowChildTables": true, "enableChildTablePages": false, "columns": [] } ``` ### Agregar columnas a la tabla Cada columna en una tabla de HubDB se puede definir con las siguientes propiedades: | Campo | Tipo | Descripción | Ejemplo | | - | - | - | - | | `name` | Cadena | Obligatorio. El nombre interno de la columna. No se puede cambiar después de creada la columna. | `"name": "row_name"` | | `label` | Cadena | Opcional. La etiqueta para la columna que verán los usuarios al editar la tabla en HubSpot. | `"label": "Row label"` | | `type` | Cadena | El tipo de datos de la columna. Debe ser uno de los siguientes:
        • `TEXT`: un campo de texto.
        • `RICHTEXT`: un campo de texto que admite el formato HTML básico. No se recomienda para HTML sin procesar, ya que puede afectar si el HTML es editable en HubSpot. Editar el código en HubSpot también puede afectar la forma en que se renderiza el código.
        • `NUMBER`: un campo numérico.
        • `BOOLEAN`: representado como una casilla de verificación en HubSpot. Usar `0` para desmarcado y `1` para marcado.
        • `DATE`: almacena una fecha específica como una marca de tiempo de milisegundos establecida en la medianoche UTC.
        • `DATETIME`: almacena una fecha y una hora como una marca de tiempo de milisegundos.
        • `SELECT`: la columna solo se puede establecer en una de un conjunto de opciones. Consulta el campo `options` a continuación para las propiedades requeridas.
        • `MULTISELECT`: la columna se puede establecer en una o más de un conjunto de opciones. Consulta el campo `options` a continuación para las propiedades requeridas.
        • `LOCATION`: almacena una ubicación de latitud y longitud.
        • `IMAGE`: almacena la URL de una imagen.
        • `VIDEO`: almacena el ID del reproductor del video.
        • `FOREIGN_ID`: la columna hará referencia a una columna de otra tabla de HubDB. Además, debes definir la otra tabla de HubDB con las siguientes propiedades:
          • foreignTableId: el ID de la otra tabla de HubDB.
          • foreignColumnId: el ID de la columna en la otra tabla de HubDB.
        • `CURRENCY`: almacena el número como un valor de divisa.
        • `FILE`: almacena un archivo del archivo mánager. También deberá incluir un campo `fileType` para especificar si el campo puede almacenar todos los tipos de archivo (`FILE`) o sólo tipos de documento como PDF (`DOCUMENT`).
        | `"type": "type"` | | `options` | Objeto | : Una lista de opciones para las columnas de selección y selección múltiple. Cada opción se define con un `name` junto con un `type` igual a `option`. | `"option": [{"name":"Option 1", "type":"option"}, {"name": "Option 2", "type": "option"}]` | Usando los campos anteriores, tu solicitud para crear una nueva tabla de HubDB podría verse de la siguiente manera: ```json theme={null} // Example request { "label": "Test Table", "name": "test_table", "columns": [ { "name": "text_column", "label": "Text Column", "archived": false, "type": "TEXT" }, { "name": "number_column", "label": "Number Column", "archived": false, "type": "NUMBER" }, { "name": "multiselect", "label": "Multi Select Column", "archived": false, "type": "multiselect", "options": [ { "name": "Option 1", "type": "option" }, { "name": "Option 2", "type": "option" } ] } ], "useForPages": true, "allowChildTables": true, "enableChildTablePages": false, "allowPublicApiAccess": false } ``` Después de crear una tabla, a las columnas se les asignarán ID en orden ascendente. Al actualizar columnas existentes, incluye el campo `id` de la columna en el objeto de entrada. ### Agregar filas a la tabla Puedes agregar filas manualmente a través de la API, o puedes [importar filas desde un archivo CSV](#import-rows-from-csv). Para agregar filas a una tabla de HubDB, haz una solicitud `POST`a `/cms/v3/hubdb/tables/{tableIdOrName}/rows`. Para cada fila de la tabla, puedes incluir los siguientes campos: | Campo | Tipo | Descripción | Ejemplo | | - | - | - | - | | `values` | Objeto | : Una lista de pares clave-valor con el nombre de la columna y el valor que deseas agregarle. Si no deseas establecer un valor específico para una columna, puedes omitir el nombre de la columna de la lista de pares clave-valor. | `"values": { "text_column": "sample text", "number_column": 76}` | | `path` | Cadena | : En el caso de las tablas [habilitadas para páginas dinámicas](https://developers.hubspot.com/docs), `path` es el sufijo de la ruta utilizado para la página creada para esta fila. | `"path": "example_url_path"` | | `name` | Cadena | : Para las tablas [habilitadas para páginas dinámicas](https://developers.hubspot.com/docs), `name` es el título HTML utilizado para la página creada para esta fila. | `"name": "Example Title"` | | `childTableId` | Número | Al crear [páginas dinámicas de varios niveles](https://developers.hubspot.com/docs), `childTableId` especifica el ID de la tabla secundaria. | `"childTableId": 123456` | Usando los campos anteriores, el cuerpo de tu solicitud puede tener un aspecto similar al siguiente: ```json theme={null} // Example request { "values": { "text_column": "sample text value", "number_column": 76, "rich_text_column": "This is a styled paragraph.", "date_column": 1591228800000, "date_time_column": 1604450520000, "boolean_column": 1, "select_column": { "name": "option 1", "type": "option" }, "multiselect_column": [ { "name": "Option 1", "type": "option" }, { "name": "Option 2", "type": "option" } ], "url_column": "https://www.hubspot.com/marketing", "video_column": 3392210008, "image_column": { "url": "https://f.hubspotusercontentqa00.net/hubfs/99992002/image3%20(1).jpg", "width": 1600, "height": 900, "type": "image" }, "foreign_id_column": [ { "id": "4364402239", "type": "foreignid" }, { "id": "4364402240", "type": "foreignid" } ] }, "path": "test_path", "name": "test_title", "childTableId": "1902373" } ``` ### Importar filas desde CSV Para importar datos a una tabla de HubDB desde un archivo CSV, realiza una solicitud `POST` a `/cms/v3/hubdb/tables/{tableIdOrName}/draft/import`. El punto de terminación de importación acepta una solicitud `multipart/form-data` `POST`: * `config`**:** un conjunto de opciones con formato JSON para la importación. * `file`**:** el archivo CSV que deseas importar. En `config`, incluye los siguientes campos como cadena JSON: | Campo | Tipo | Descripción | Ejemplo | | - | - | - | - | | `skipRows` | Número | El número de filas de encabezados que se deben omitir. El valor predeterminado de este campo es `1`, omitiendo la primera fila y tratándola como un título. Establécelo en `0` si todas las filas son datos válidos. | `"skipRows": 0` | | `separator` | Cadena | El delimitador de columna en el archivo CSV. Establecer en `","` de forma predeterminada. | `"separator": ","` | | `idSourceColumn` | Número | El índice de la columna del archivo de origen que contiene el ID de la fila (`hs_id`). Si se especifica esta columna, la importación actualizará las filas existentes en la tabla para los ID de fila coincidentes del archivo CSV. Esto es opcional y puedes ignorarlo la primera vez que importes datos a una tabla. Consulte la sección [Opciones de restablecimiento](#reset-options) a continuación para obtener información más detallada. | `"idSourceColumn": 1` | | `resetTable` | Booleano | El valor predeterminado es `false`, lo que significa que las filas de la tabla se actualizarán sin eliminar ninguna fila existente. Si se establece en `true`, las filas de la hoja de cálculo sobrescribirán los datos de la tabla, lo que significa que se eliminará cualquier fila de la tabla que no esté en la hoja de cálculo. Consulte la sección [Opciones de restablecimiento](#reset-options) a continuación para obtener información más detallada. | `"resetTable": true` | | `nameSourceColumn` | Número | Para las tablas [habilitadas para páginas dinámicas](https://developers.hubspot.com/docs), `nameSourceColumn` especifica la columna del archivo CSV que contiene los `name` de la fila. Los números de las columnas están en orden ascendente, siendo la primera columna `1`. | `"nameSourcecolumn": 5` | | `pathSourceColumn` | Número | Para las tablas [habilitadas para páginas dinámicas](https://developers.hubspot.com/docs), `pathSourceColumn` especifica la columna del archivo CSV que contiene los `path` de la fila. Los números de las columnas están en orden ascendente, siendo la primera columna `1`. | `"pathSourcecolumn": 6` | | `childTableSourceColumn` | Número | Especifica la columna del archivo CSV que contiene los `childTableId` de la fila. Los números de las columnas están en orden ascendente, siendo la primera columna `1`. | `"childTableSourcecolumn": 3` | | `columnMappings` | Matriz | Una lista de asignaciones de las columnas del archivo de origen a las columnas de la tabla de HubDB de destino. Cada asignación debe tener el siguiente formato: `{"source":1,"target”:"columnIdOrName"}`
        • **origen:** el índice de columna en el archivo de origen. Por ejemplo, `2` para la segunda columna.
        • **objetivo:** el ID o nombre de la columna de la tabla de HubDB. Puedes obtener el ID o el nombre de una columna [obteniendo los detalles de la tabla](#retrieve-hubdb-data).
        Si tu archivo tiene una columna`hs_id`, no deberías incluirla en `columnMappings`. En cambio, inclúyelo como `idSourceColumn` para actualizar las filas existentes. | `"columnMappings": [{"source":1, "target": 2}, {"source": 2, "target": "column_name"}]` | | `primaryKeyColumn` | Cadena | El nombre de una columna de la tabla de HubDB objetivo que se utilizará para la desduplicación. El ID de la columna no se puede utilizar para este campo. | `"primaryKeyColumn": "column_name"` | | `encoding` | Cadena | El tipo de codificación del archivo. Por ejemplo, `utf-8`, `ascii`, `iso-8859-2`, `iso-8859-5`, `iso-2022-jp`, `windows-1252`. | `"encoding": "utf-8"` | | `format` | Cadena | Solo se admiten archivos CSV. | `"format": "csv"` | Usando la tabla anterior, tu `config` JSON podría verse de la siguiente manera: ```json theme={null} // Example config JSON { "skipRows": 1, "separator": ",", "idSourceColumn": 1, "resetTable": false, "columnMappings": [ { "target": 1, "source": 2 }, { "target": 2, "source": "zip_code" } ], "primaryKeyColumn": "name", "encoding": "utf-8", "format": "csv" } ``` Si utilizas cURL, el comando podría tener el siguiente aspecto: ```shell theme={null} curl -L -X POST 'https://api.hubspotqa.com/hubdb/api/v2/tables/xxxxxx/import?portalId=xxxxxxx' \ -H 'Content-Type: multipart/form-data' \ -F 'config="{\"skipRows\":1,\"format\":\"csv\",\"separator\":\",\",\"encoding\":\"iso-8859-1\",\"columnMappings\":[{\"target\":1,\"source\":7},{\"target\":3,\"source\":8}],\"idSourceColumn\":1,\"pathSourceColumn\":null,\"nameSourceColumn\":null,\"childTableSourceColumn\":null,\"resetTable\":true}"' \ -F 'file=@"/Users/xxxxxxxxxxxxx/Downloads/filename.csv"' ``` ### Formato de fecha Hay varios formatos que puedes utilizar al importar datos a una columna de tipo fecha. **Enteros** * `yyyy/mm/dd` * `yyyy/mm/dd` * `mm/dd/yyyy` * `mm/dd/yy` Estos formatos requieren que el mes preceda al día (es decir, `dd/mm/yy` no se acepta). Los enteros pueden separarse con guiones (`-`) o barras diagonales (`/`). **Fechas relajadas** También puede importar formatos de fecha que estén menos estandarizados que las fechas basadas en números enteros. Por ejemplo:\*\* * `The 1st of March in the year 2022` * `Fri Mar 4 2022` * `March 4th '22` **Fechas relativas** HubSpot analizará los siguientes formatos de fecha en relación con el día actual:\*\* * `next Thursday` * `Today` * `tomorrow` * `3 days from now` ### Opciones de restablecimiento Al importar datos de un archivo CSV a una tabla de HubDB, puedes establecer el campo `resetTable` en `true` o `false` (por opción predeterminada) para administrar si los datos de la fila de HubDB se sobrescriben. * Si `resetTable` se establece en `true`: * Si las filas del archivo CSV no tienen una columna de ID de fila (`hs_id` o el ID de fila se especifica como `0`, esas filas se insertarán con los nuevos ID de fila generados. * Si los ID de fila del archivo CSV ya existen en la tabla objetivo, las filas existentes en la tabla se actualizarán con los nuevos valores de los archivos de entrada. * Si la tabla tiene filas pero el archivo CSV de entrada no tiene esos ID de fila, esas filas se eliminarán de la tabla objetivo. * Si los ID de fila del archivo CSV de entrada no existen en la tabla objetivo, esas filas se insertarán con los nuevos ID de fila generados y se ignorarán los ID de fila indicados en el archivo de entrada. * Si el archivo CSV de entrada no contiene la columna ID de fila, todas las filas se eliminarán de la tabla objetivo y las filas del archivo de entrada se insertarán con los nuevos ID de fila generados. * Si `resetTable` se establece en `false` (por opción predeterminada): * Si los ID de fila del archivo CSV ya existen en la tabla objetivo, las filas existentes en la tabla se actualizarán con los nuevos valores de los archivos de entrada. * Si la tabla tiene filas pero el archivo CSV de entrada no tiene esos ID de fila, esas filas *no* se eliminarán de la tabla objetivo y esas filas permanecerán sin cambios. * Si los ID de fila del archivo CSV de entrada no existen en la tabla objetivo, esas filas se insertarán con los nuevos ID de fila generados y se ignorarán los ID de fila indicados en el archivo de entrada. * Si las filas del archivo CSV no tienen una columna de ID de fila o el ID de fila se especifica como `0`, esas filas se insertarán con los nuevos ID de fila generados. ## Recuperar datos de HubDB Hay varias maneras de recuperar los datos de HubDB, dependiendo de si estás buscando detalles de la tabla o las filas de una tabla: * Para recuperar los detalles de la tabla de todas las tablas publicadas, haz una solicitud `GET` a `/cms/v3/hubdb/tables`. * Para recuperar los detalles de la tabla de una tabla publicada específica, realiza una solicitud `GET` a `/cms/v3/hubdb/tables{tableIdOrName}`. * Para recuperar todas las filas de una tabla específica, haz una solicitud `GET` a `/cms/v3/hubdb/tables{tableIdOrName}/rows`. * Para recuperar una fila específica de una tabla, haz una solicitud `GET` a `/cms/v3/hubdb/tables{tableIdOrName}/rows/{rowId}`. Cuando recuperes datos de filas, puedes filtrar y ordenar aún más los resultados. Si una tabla está configurada para [permitir el acceso público](https://knowledge.hubspot.com/website-and-landing-pages/create-and-hubdb-tables#manage-table-settings-cms-hub-professional-and-enterprise-only), puedes acceder a la versión publicada de la tabla y las filas sin ninguna autenticación especificando el ID de tu cuenta de HubSpot a través del parámetro de consulta `portalId`. ### Filtrar filas obtenidas Al recuperar datos de la tabla de HubDB, puedes aplicar filtros como parámetros de consulta para recibir datos específicos. Los parámetros de consulta de filtro se construyen de la siguiente manera: `columnName__operator`. Por ejemplo, si tienes una columna numérica denominada *bar*, puedes filtrar los resultados para incluir solo las filas en las que *bar* sea mayor que 10: `&bar__gt=10`. Todos los filtros se suman con Y (actualmente no se admiten filtros O). Al filtrar, ten en cuenta lo siguiente: * Al pasar valores para las columnas `multiselect`, los valores deben estar separados por comas (por ejemplo, `multiselect_column__contains=1,2`). * Para los filtros `datetime`, puedes utilizar fechas relativas en lugar de marcas de tiempo para especificar un valor relativo a la hora actual. Por ejemplo, `-3h` correspondería a la marca de tiempo 3 horas antes de ahora, mientras que `10s` correspondería a 10 segundos en el futuro. Las unidades de tiempo admitidas son ms (milisegundos), s (segundos), m (minutos), h (horas), d (días). La hora actual se puede utilizar especificando un valor cero: 0s A los efectos de estos filtros, la columna incorporada `hs_id` es una columna `number`, la columna `hs_created_at` es un `datetime`, y las columnas `hs_path` y `hs_name` son columnas `text`. A continuación, descubre qué operadores se pueden aplicar a qué tipos de columna: | Operador | Nombre | Descripción | | - | - | - | | `eq (or none)` | Es igual a | Todos los tipos de columna Este filtro se aplica si no se utiliza ningún operador. Cuando se utiliza con columnas de selección múltiple, devuelve filas que coinciden exactamente con los valores suministrados. | | `ne` | No es igual a | Todos los tipos de columna. | | `contains` | Contiene | Texto, texto enriquecido y selección múltiple. Cuando se utiliza con columnas de selección múltiple, devuelve filas que contienen todos los valores proporcionados. Este filtro distingue entre mayúsculas y minúsculas. | | `lt` | Menor que | Número, fecha y hora. | | `lte` | Menor que o igual a | Número, fecha y hora. | | `gt` | Mayor que | Número, fecha y hora. | | `gte` | Mayor que o igual a | Número, fecha y hora. | | `is_null` | Nulo | Todos los tipos de columna, excepto booleanos. Este filtro no requiere un valor (por ejemplo, `&exampleColumn__is_null=`). | | `not_null` | No nulo | Todos los tipos de columnas, excepto booleano. Este filtro no requiere un valor (por ejemplo, `&exampleColumn__not_null=`). | | `like` | Como | Texto y texto enriquecido. | | `not_like` | No como | Texto y texto enriquecido. | | `icontains` | Contiene | Texto y texto enriquecido. Este filtro no distingue entre mayúsculas y minúsculas. | | `startswith` | Comienza con | Texto y texto enriquecido. | | `in` | En | Número, seleccione y multiselección. Devuelve filas en las que la columna incluye al menos una de las opciones pasadas. Cuando no hay otro `sort` en el parámetro de consulta, los resultados se ordenarán en el orden en que se especifiquen los valores en el operador`in`. | ### Ordenar filas obtenidas Al recuperar datos de HubDB, puedes aplicar la ordenación como parámetro de consulta para determinar el orden de los datos obtenidos. Para ordenar los datos, agrega un parámetro de consulta `sort` y especifica el nombre de la columna: `&sort=columnName` De forma predeterminada, los datos se devolverán en el orden natural de la columna especificada. Puedes invertir la ordenación agregando un `-` al nombre de la columna: `&sort=-columnName` Puedes incluir este parámetro varias veces para ordenar por varias columnas. Además de ordenar por una columna, hay tres funciones que se pueden utilizar: * **geo\_distance(location\_column\_name, latitud, longitud):** toma el nombre de una columna de localización y las coordenadas, devuelve las filas ordenadas según la distancia entre el valor de la columna de localización especificada y las coordenadas proporcionadas. * **longitud(column\_name):** toma el nombre de una columna, devuelve las filas ordenadas por la longitud del valor de la columna (calculada como una cadena) * **random():** devuelve las filas en orden aleatorio. Estas funciones también admiten la ordenación inversa. Por ejemplo, la siguiente ordenación `geo_distance` devuelve primero los elementos que están más lejos: `sort=-geo_distance(location_column,42.37,-71.07)` ## Configurando tablas HubDB para páginas dinámicas Con CMS de HubSpot, puedes usar una tabla de HubDB como fuente de datos para [generar páginas dinámicas](https://developers.hubspot.com/docs). Por ejemplo, puedes crear una tabla que contenga una fila para cada miembro de tu equipo ejecutivo, con columnas que contengan la información que desees mostrar en una página. Después de seleccionar esa tabla como fuente de datos dinámicos para una página, esa página generará un página de índice que muestra todas las filas como elementos de resumen, junto con páginas separadas para cada fila, similar a un página de índice de blog y páginas de publicación de blog. Para permitir que una tabla se seleccione como fuente de datos en el editor de contenido, deberás establecer `useForPage` en `true`. Opcionalmente, puedes incluir `dynamicMetaTags` para especificar qué columnas usar para los metadatos de cada página. \*\*Nota: \*\*cuando especifiques `dynamicMetaTags`, deberás asegurarte de que la página utilice etiquetas HubL `page_meta` en lugar de `content`. Más información en la [guía de páginas dinámicas](https://developers.hubspot.com/docs#metadata). Por ejemplo, el código siguiente crearía una tabla que se puede usar para páginas dinámicas y especifica las tres columnas que se usarán para los metadatos de página. ```json theme={null} // Example POST request to create table { "name": "dynamic_page_table", "label": "Dynamic page table", "useForPages": true, "columns": [ { "name": "meta_description", "label": "Meta description", "archived": false, "type": "TEXT" }, { "name": "featured_image", "label": "Featured image", "archived": false, "type": "IMAGE" }, { "name": "canonical_url", "label": "Canonical URL", "archived": false, "type": "URL" } ], "dynamicMetaTags": { "DESCRIPTION": 1, "FEATURED_IMAGE_URL": 2, "LINK_REL_CANONICAL_URL": 3 } } ``` | Parámetro | Tipo | Descripción | | - | - | - | | `useForPages` | Booleano | Establecer en `true` para permitir que la tabla se utilice como fuente de datos para páginas dinámicas. | | `dynamicMetaTags` | Objeto | Especifica las columnas por ID que se utilizarán para los metadatos de cada página dinámica. Puede contener:
        • `DESCRIPTION`
        • `FEATURED_IMAGE_URL`
        • `LINK_REL_CANONICAL_URL`
        Para cualquier campo de metadatos no especificado, las páginas heredarán los valores respectivos de su página principal. | | `DESCRIPTION` | Número | El ID numérico de la columna que se utilizará para la metadescripción de cada página. | | `FEATURED_IMAGE_URL` | Número | El ID numérico de la columna que se utilizará para la URL de la imagen destacada de cada página. | | `LINK_REL_CANONICAL_URL` | Número | El ID numérico de la columna que se utilizará para la URL canónica de cada página. | ## Cambios en la v3 * Las tablas deben tener tanto `name` como `label`. Este nombre no se puede cambiar una vez creada la tabla. Los nombres solo pueden incluir letras minúsculas, dígitos y guiones bajos y no pueden comenzar con un número. Ambos `name` y `label` deben ser únicos en la cuenta. * La API admite tanto la tabla `id` como `name` las rutas URL. * `GET` Los puntos de terminación de fila devuelven la columna `name` en lugar de `id` en el campo`values`. Además, los puntos de terminación de fila `POST` / `PUT` / `PATCH` requieren una columna `name` en lugar de `id` en el campo`values`. * Los puntos de terminación de actualización de fila `PATCH` ahora aceptan actualizaciones dispersas, lo que significa que solo puedes especificar los valores de columna que necesita actualizar (mientras que tenías que especificar todos los valores de columna en las versiones anteriores). Al actualizar una columna con una lista de valores como multiselect, debes especificar la lista de todos los valores. Para eliminar el valor de una columna, debes especificar la columna con el valor como `null` en la solicitud. * Se han eliminado los puntos de terminación `get` / `update` / `delete` a una celda de fila en favor de los puntos de terminación de actualización de fila`PATCH`. * El punto de terminación de importación ahora admite un campo opcional `idSourceColumn` junto con los campos existentes en las opciones con formato JSON. Puedes utilizar este campo para especificar la columna del archivo csv que contiene los ID de fila. Para importar nuevas filas junto con los nuevos valores de las filas existentes, simplemente puedes especificar `0` como el id de fila para las nuevas filas y los id de fila válidos para las columnas existentes. Ver más detalles a continuación en la sección Importar. También puedes utilizar nombres o identificadores de columnas en el campo de destino de las asignaciones de columnas en las opciones con formato JSON. * Clonar el punto de terminación requiere un nuevo nombre y una nueva etiqueta. # Etiquetas compatibles con HubL obsoletas Source: https://developers.hubspot.es/docs/cms/versions-deprecations/deprecated/hubl/filters-functions La siguiente es una lista de etiquetas compatibles con HubL que están obsoletas. Si bien estas etiquetas aún funcionan según lo previsto, se han creado etiquetas más nuevas para reemplazarlas que son más optimizadas. Estas nuevas etiquetas se indican a continuación. Esta página es para referencia histórica. La siguiente es una lista de etiquetas compatibles con HubL que están obsoletas. Si bien estas etiquetas aún funcionan según lo previsto, se han creado etiquetas más nuevas para reemplazarlas que son más optimizadas. Estas nuevas etiquetas se indican a continuación. Esta página es para referencia histórica. ## Widgets personalizados > [!WARNING] > > Esta etiqueta ha sido reemplazada por una [**etiqueta de módulo personalizada.**](/docs/cms/reference/hubl/tags/standard-tags#custom-modules) ## Sígueme Los módulos Sígueme representan iconos que enlazan a tus diferentes perfiles de redes sociales. Los iconos que se muestran se basan en tu configuración de redes sociales. > [!WARNING] > > Esta etiqueta es reemplazada por el nuevo módulo predeterminado Sígueme. ```text entrada.txt theme={null} {% follow_me "follow_me" %} {% follow_me "follow_us" title='Follow Us', module_title_tag="h2" %} ``` ```text salida.txt theme={null}

        Follow Us

        ``` ## Widget global Un widget global es uno que se puede compartir a través de la plantilla > [!WARNING] > > La etiqueta ha sido reemplazada por la [etiqueta de módulo personalizada](/docs/cms/reference/hubl/tags/standard-tags#custom-modules). ```hubl theme={null} {% global_widget "facebook_fan_box" overrideable=False, label='Facebook Fan Box' %}" ``` ## Búsqueda en Google > [!WARNING] > > La etiqueta Búsqueda de Google y los módulos ya no están disponibles. Esto ha sido reemplazado por la propia búsqueda nativa de HubSpot. ## Control deslizante de imágenes Genera un módulo de control deslizante de imágenes de HubSpot. Este módulo de control deslizante se basa en [FlexSlider](http://flexslider.woothemes.com/). Mientras que puedes crear un módulo de control deslizante con la sintaxis estándar de HubL, si quieres predefinir diapositivas predeterminadas usando HubL, debes usar la sintaxis de bloque. A continuación se muestran ambos métodos. > [!WARNING] > > Esta etiqueta ha quedado obsoleta a favor de la [etiqueta Galería](/docs/cms/reference/hubl/tags/standard-tags#gallery). ```text entrada.txt theme={null} {% image_slider "image_slider" %} <-- Block syntax --> {% widget_block image_slider "crm_slider" sizing='static', only_thumbnails=False, transition='slide', caption_position='below', with_thumbnail_nav=False, lightbox=False, auto_advance=True, overrideable=True, description_text='', show_pagination=True, label='Image Slider', loop_slides=True, num_seconds=5 %} {% widget_attribute "slides" is_json=True %}[{"caption": "CRM Contacts App", "show_caption": true, "link_url": "http://www.hubspot.com/crm", "alt_text": "Screenshot of CRM Contacts", "img_src": "http://go.hubspot.com/hubfs/Contacts-View-1.png?t=1430860504240", "open_in_new_tab": true}, {"caption": "HubSpot CRM Contact Profile", "show_caption": true, "link_url": "http://www.hubspot.com/", "alt_text": "HubSpot CRM Contact Profile", "img_src": "http://cdn2.hubspot.net/hubfs/53/Contact-Profile.png?t=1430860504240", "open_in_new_tab": true}]{% end_widget_attribute %} {% end_widget_block %} ``` ```text salida.txt theme={null}
        • Screenshot of CRM Contacts
          CRM Contacts App
        • HubSpot CRM Contact Profile
          HubSpot CRM Contact Profile
        1. 1
        2. 2
        ``` | Parámetro | Tipo | Descripción | Predeterminado | | - | - | - | - | | `sizing` | Enumeración | Determina si el deslizador cambia de tamaño en función de la altura de las diapositivas. Los valores posibles son: "estático" o "redimensionado" | `"static"` | | `only_thumbnails` | Booleano | Mostrar imágenes como miniaturas en lugar de un control deslizante. | `False` | | `transition` | Enumeración | Define el tipo de transición de las diapositivas. Los valores posibles son: "fade" o "slide" | `"slide"` | | `caption_position` | Enumeración | Afecta a la posición de los subtítulos en o debajo de la diapositiva. Los valores posibles son "below" o "superimpose" | `"below"` | | `with_thumbnail_nav` | Booleano | Incluir miniaturas debajo del control deslizante para la navegación (only\_thumbnails debe ser falso para que esto sea verdadero) | `False` | | `lightbox` | Booleano | Muestra la imagen en miniatura en el lightbox cuando se hace clic (with\_thumbnail\_nav debe ser verdadero para que esto sea verdadero) | `False` | | `auto_advance` | Booleano | Avanza automáticamente las diapositivas después del tiempo establecido en num\_seconds | `False` | | `show_pagination` | Booleano | Proporcionar botones debajo del control deslizante para navegar entre las diapositivas. | `True` | | `label` | Cadena | Una etiqueta para este módulo, visible solo en el editor | `"Image Slider"` | | `loop_slides` | Booleano | Cuando es verdadero, muestra las diapositivas en un bucle continuo | `True` | | `num_seconds` | Número | Tiempo en segundos de pausa entre diapositivas | `5` | | `slides` | JSON | Una lista JSON con el título predeterminado, la URL del enlace, el texto alt, el src de la imagen y si se abre en una nueva pestaña. Consulta la sintaxis del bloque anterior. | | # Módulos predeterminados obsoletos Source: https://developers.hubspot.es/docs/cms/versions-deprecations/deprecated/modules # Retrieve account details Source: https://developers.hubspot.es/docs/api-reference/latest/account/account-information/get-account-details specs/2026-09/account-account-info-v2026-09.json GET /account-info/2026-09/details Obtén información detallada sobre la cuenta asociada al portal de HubSpot. Este punto de terminación te da información sobre el tipo de cuenta, la zona horaria, la configuración de la divisa y la ubicación del alojamiento de datos. Es útil para tener una visión general completa de la configuración y los ajustes de la cuenta. > **Supported products** > **Required Scopes** # Retrieve private app daily API usage Source: https://developers.hubspot.es/docs/api-reference/latest/account/account-information/get-usage-details specs/2026-09/account-account-info-v2026-09.json GET /account-info/2026-09/api-usage/daily/private-apps Obtén el uso diario de la API para las aplicaciones privadas de la cuenta. Este punto de terminación te da información sobre los patrones de consumo de la API, lo que ayuda a los usuarios a monitorear y gestionar su uso de la API de forma efectiva. > **Supported products** > **Required Scopes** # Account information API Source: https://developers.hubspot.es/docs/api-reference/latest/account/account-information/guide # Retrieve audit logs Source: https://developers.hubspot.es/docs/api-reference/latest/account/audit-logs/get-audit-logs specs/2026-09/account-audit-logs-v2026-09.json GET /account-info/2026-09/activity/audit-logs Recupera el historial de actividad de las acciones de los usuarios relacionadas con aprobaciones, actualizaciones de contenido, actualizaciones de objetos del CRM, actividad de seguridad, etc. (solo Enterprise). Más información sobre [actividades incluidas en las exportaciones de registros de auditoría](https://knowledge.hubspot.com/account-management/view-and-export-account-activity-history-in-a-centralized-audit-log?hubs_content=knowledge.hubspot.com/account-management/view-and-export-account-activity-history&hubs_content-cta=centralized%20audit%20log#data-included-in-the-centralized-audit-log). > **Supported products** > **Required Scopes** # Retrieve login activity Source: https://developers.hubspot.es/docs/api-reference/latest/account/audit-logs/get-login specs/2026-09/account-audit-logs-v2026-09.json GET /account-info/2026-09/activity/login Recuperar registros de acciones de usuario relacionadas con [actividad de inicio de sesión](https://knowledge.hubspot.com/account-management/view-and-export-account-activity-history#account-login-history). > **Supported products** > **Required Scopes** # Retrieve security history Source: https://developers.hubspot.es/docs/api-reference/latest/account/audit-logs/get-security specs/2026-09/account-audit-logs-v2026-09.json GET /account-info/2026-09/activity/security Recuperar registros de acciones de usuario relacionadas con [actividad de seguridad](https://knowledge.hubspot.com/account-management/view-and-export-account-activity-history#security-activity-history). > **Supported products** > **Required Scopes** # Account activity API Source: https://developers.hubspot.es/docs/api-reference/latest/account/audit-logs/guide # Get business units for a user Source: https://developers.hubspot.es/docs/api-reference/latest/account/brands/get-brands specs/2026-09/business-units-business-units-v2026-09.json GET /business-units/public/2026-09/business-units/user/{userId} Recupera las marcas a las que un usuario específico puede acceder. > **Supported products** > **Required Scopes** # Brands API Source: https://developers.hubspot.es/docs/api-reference/latest/account/brands/guide # Retrieve IP ranges Source: https://developers.hubspot.es/docs/api-reference/latest/account/ip-ranges/get-origins specs/2026-09/meta-origins-v2026-09.json GET /meta/network-origins/2026-09/ip-ranges Recupera la lista de intervalos de IP asociados a diferentes servicios y direcciones. Este punto de terminación se puede usar para obtener información de intervalos de IP para servicios específicos como EMAIL, API, DNS, WEB_SCRAPING y TEST_SERVICE. Los resultados se pueden filtrar por la dirección del tráfico de red, ya sea INGRESS o EGRESS. > **Supported products** # Retrieve simplified IP ranges Source: https://developers.hubspot.es/docs/api-reference/latest/account/ip-ranges/get-simple specs/2026-09/meta-origins-v2026-09.json GET /meta/network-origins/2026-09/ip-ranges/simple Recupera una lista simplificada de intervalos de IP asociados con orígenes de red específicos en el sistema de HubSpot. Este punto de terminación permite filtrar por dirección y tipo de servicio, lo que es útil para entender las configuraciones de red y gestionar los controles de acceso. > **Supported products** # HubSpot IP ranges Source: https://developers.hubspot.es/docs/api-reference/latest/account/ip-ranges/guide # Consent banner API Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/consent-banner/consent-banner-api # Implement Google Consent Mode Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/consent-banner/google-consent-mode # Create multiple exchange rates Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/multicurrency/batch/create-exchange-rates specs/2026-09/settings-multicurrency-v2026-09.json POST /settings/currencies/2026-09/exchange-rates/batch/create Crear múltiples tasas de cambio en una sola solicitud. > **Supported products** > **Required Scopes** # Retrieve multiple rates Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/multicurrency/batch/get-exchange-rates specs/2026-09/settings-multicurrency-v2026-09.json POST /settings/currencies/2026-09/exchange-rates/batch/read Obtener los detalles de múltiples tasas de cambio en una sola solicitud, especificados por sus ID. > **Supported products** > **Required Scopes** # Update multiple exchange rates Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/multicurrency/batch/update-exchange-rates specs/2026-09/settings-multicurrency-v2026-09.json POST /settings/currencies/2026-09/exchange-rates/batch/update Actualizar las tasas de conversión para múltiples tasas de cambio en una operación por lotes. > **Supported products** > **Required Scopes** # Add a new currency with central exchange rates. Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/multicurrency/central-fx-rates/create-multicurrency specs/2026-09/settings-multicurrency-v2026-09.json POST /settings/currencies/2026-09/central-fx-rates/add-currency Crea una nueva divisa con tasas de cambio centrales en el portal. Las divisas no admitidas no se pueden agregar. > **Supported products** > **Required Scopes** # Retrieve information about the central exchange rates feature. Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/multicurrency/central-fx-rates/get-exchange-rates specs/2026-09/settings-multicurrency-v2026-09.json GET /settings/currencies/2026-09/central-fx-rates/information Obtén información sobre si la función de tasas de cambio centrales está activada en el portal. > **Supported products** > **Required Scopes** # Retrieve currencies not supported by central exchange rates. Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/multicurrency/central-fx-rates/get-unsupported-currencies specs/2026-09/settings-multicurrency-v2026-09.json GET /settings/currencies/2026-09/central-fx-rates/unsupported-currencies Obtén una lista de los códigos de divisas que no son compatibles con las tasas de cambio centrales. Las divisas no admitidas deberán actualizarse manualmente. > **Supported products** > **Required Scopes** # Add a new exchange rate Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/multicurrency/exchange-rates/create-exchange-rate specs/2026-09/settings-multicurrency-v2026-09.json POST /settings/currencies/2026-09/exchange-rates Crear una nueva tasa de cambio con la tasa de conversión y los códigos de divisa especificados. > **Supported products** > **Required Scopes** # Change the visibility of a specific currency pairs Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/multicurrency/exchange-rates/create-update-visibility specs/2026-09/settings-multicurrency-v2026-09.json POST /settings/currencies/2026-09/exchange-rates/update-visibility Cambiar la configuración de visibilidad para un par de divisas. Esto ocultará o mostrará un par de divisas para los usuarios en la aplicación de HubSpot. > **Supported products** > **Required Scopes** # Get all current exchange rates Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/multicurrency/exchange-rates/get-current-exchange-rates specs/2026-09/settings-multicurrency-v2026-09.json GET /settings/currencies/2026-09/exchange-rates/current Obtener todas las tasas de cambio actuales para todos los pares de divisas. > **Supported products** > **Required Scopes** # Get the details for a specific exchange rate Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/multicurrency/exchange-rates/get-exchange-rate specs/2026-09/settings-multicurrency-v2026-09.json GET /settings/currencies/2026-09/exchange-rates/{exchangeRateId} Obtener los detalles para una tasa de cambio especificada por su ID. > **Supported products** > **Required Scopes** # Get exchange rates Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/multicurrency/exchange-rates/get-exchange-rates specs/2026-09/settings-multicurrency-v2026-09.json GET /settings/currencies/2026-09/exchange-rates Obtener una lista de tasas de cambio > **Supported products** > **Required Scopes** # Update a conversion rate Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/multicurrency/exchange-rates/update-exchange-rate specs/2026-09/settings-multicurrency-v2026-09.json PATCH /settings/currencies/2026-09/exchange-rates/{exchangeRateId} Actualizar una tasa de conversión existente, especificada por su ID. > **Supported products** > **Required Scopes** # Get the company currency Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/multicurrency/get-company-currency specs/2026-09/settings-multicurrency-v2026-09.json GET /settings/currencies/2026-09/company-currency Obtén los detalles de la divisa de la empresa. La divisa de la empresa se utiliza en los totales de los negocios, los informes y como divisa predeterminada para los nuevos negocios. > **Supported products** > **Required Scopes** # Get all currency codes Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/multicurrency/get-currency-codes specs/2026-09/settings-multicurrency-v2026-09.json GET /settings/currencies/2026-09/codes Obtener una lista de todos los códigos de divisa disponibles y sus nombres. > **Supported products** > **Required Scopes** # Settings API | Currencies Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/multicurrency/guide # Set or update the company currency. Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/multicurrency/update-company-currency specs/2026-09/settings-multicurrency-v2026-09.json PUT /settings/currencies/2026-09/company-currency Establecer o actualizar la divisa principal de la empresa. > **Supported products** > **Required Scopes** # Get a specific tax rate Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/tax-rates/get-tax-rate specs/2026-09/settings-tax-rates-v2026-09.json GET /tax-rates/2026-09/tax-rates/{taxRateGroupId} Obtener una tasa impositiva específica por su `taxRateGroupId`. > **Supported products** > **Required Scopes** # Get all tax rates Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/tax-rates/get-tax-rates specs/2026-09/settings-tax-rates-v2026-09.json GET /tax-rates/2026-09/tax-rates Obtener una lista paginada de todas las tasas impositivas configuradas en la biblioteca de tasas impositivas de la cuenta > **Supported products** > **Required Scopes** # Add Team Members Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/teams/add-team-members specs/2026-09/settings-teams-v2026-09.json POST /settings/teams/2026-09/{teamId}/members Asigna nuevos miembros a un equipo específico en tu cuenta de HubSpot. Este punto de terminación te permite agregar usuarios a un equipo especificando sus ID de usuario y roles. Es útil para gestionar la composición de los equipos y asegurar que los usuarios correctos tengan acceso a los recursos del equipo. > **Supported products** > **Required Scopes** # Create Team Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/teams/create-team specs/2026-09/settings-teams-v2026-09.json POST /settings/teams/2026-09 Crea un equipo nuevo en tu cuenta de HubSpot. Este punto de terminación te permite definir el nombre del equipo, el equipo principal y los miembros. El cuerpo de la solicitud debe incluir el nombre y los miembros del equipo. Si la creación es exitosa, la respuesta incluirá la URL del recurso del equipo recién creado. > **Supported products** > **Required Scopes** # Retrieve team Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/teams/get-team specs/2026-09/settings-teams-v2026-09.json GET /settings/teams/2026-09/{teamId} Obtén información detallada sobre un equipo específico en la cuenta de HubSpot usando el identificador único del equipo. Este punto de conexión es útil para acceder a las propiedades del equipo, como su nombre y el ID del equipo principal, para gestionar o mostrar datos relacionados con el equipo. > **Supported products** > **Required Scopes** # List members Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/teams/get-team-members specs/2026-09/settings-teams-v2026-09.json GET /settings/teams/2026-09/{teamId}/members Obtén una lista de los miembros de un equipo específico en tu cuenta de HubSpot. Este punto de terminación te permite paginar a través de los miembros del equipo usando los parámetros de consulta "limit" y "after". Es útil para gestionar y ver las composiciones y roles del equipo dentro de tu organización. > **Supported products** > **Required Scopes** # List teams Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/teams/get-teams specs/2026-09/settings-teams-v2026-09.json GET /settings/teams/2026-09 Obtener una lista de equipos de tu cuenta de HubSpot. Este punto de terminación te permite paginar los equipos usando los parámetros de consulta 'limit' y 'after'. Es útil para obtener una visión general de todos los equipos configurados en la cuenta. > **Supported products** > **Required Scopes** # Settings API | Teams Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/teams/guide # Sunsetted and deprecated APIs Source: https://developers.hubspot.es/docs/api-reference/latest/deprecated-apis # Error handling Source: https://developers.hubspot.es/docs/api-reference/latest/error-handling # Referencia de API 2026-09 Source: https://developers.hubspot.es/docs/api-reference/latest/overview Documentación de referencia para las API de HubSpot con versiones basadas en fechas, introducidas con la versión 2026-09. Las API `2026-09` utilizan un sistema de versionado basado en fechas que reemplaza las antiguas rutas de versión numéricas (por ejemplo, `/crm/v3/`). Todos los endpoints de esta sección siguen el patrón: ```text theme={null} /api-name/2026-09/resource ``` Por ejemplo, para recuperar todos los contactos: ```bash theme={null} GET /crm/objects/2026-09/contacts ``` Todas las API, ya sean antiguas, nuevas o beta, utilizan la misma ruta raíz que antes: `https://api.hubapi.com/`. Este modelo de versionado permite a HubSpot publicar actualizaciones en un calendario predecible. Cuando se publica una nueva versión con fecha, la versión anterior sigue funcionando hasta su fecha de fin de vida, dándote tiempo para migrar. Para nuevas integraciones, utiliza siempre la última versión con fecha. Obtén más información sobre este cambio en el [Registro de cambios para desarrolladores de HubSpot](https://developers.hubspot.com/changelog/introducing-date-based-api-versioning). En la sección de referencia de API, utiliza el menú desplegable de versiones en la barra superior para cambiar de versión. Si existe un endpoint equivalente al que estás consultando, serás redirigido automáticamente. De lo contrario, llegarás a la página de inicio de esa versión. ![Uso del selector de versiones en la documentación para desarrolladores para explorar las versiones de las API de HubSpot](https://developers.hubspot.com/hubfs/Knowledge_Base_2023-24-25/developer/hs-docs-version-selector.png) # Batch assign members Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/teams/batch/add-team-members specs/2026-09/settings-teams-v2026-09.json POST /settings/teams/2026-09/{teamId}/members/batch Asigna varios miembros a un equipo específico en una sola solicitud. Este punto de terminación permite una gestión eficiente de las membresías de equipo al procesar varias asignaciones a la vez. Es útil para organizaciones que buscan optimizar sus procesos de gestión de equipos. > **Supported products** > **Required Scopes** # Delete team Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/teams/delete-team specs/2026-09/settings-teams-v2026-09.json DELETE /settings/teams/2026-09/{teamId} Elimina un equipo específico de tu cuenta de HubSpot usando su identificador único. Esta operación eliminará el equipo y sus datos asociados. Asegúrate de tener los permisos necesarios para realizar esta acción. > **Supported products** > **Required Scopes** # Delete member Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/teams/remove-team-member specs/2026-09/settings-teams-v2026-09.json DELETE /settings/teams/2026-09/{teamId}/members/{userId} Eliminar a un miembro específico de un equipo en tu cuenta de HubSpot. Esta operación requiere especificar los identificadores del equipo y del usuario. Es útil para gestionar la composición de los equipos al eliminar a los usuarios que ya no necesitan acceso o asociación con un equipo en particular. > **Supported products** > **Required Scopes** # Update team Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/teams/update-team specs/2026-09/settings-teams-v2026-09.json PATCH /settings/teams/2026-09/{teamId} Actualiza los detalles de un equipo específico en tu cuenta de HubSpot. Este punto de terminación te permite modificar la información del equipo, como su nombre o el ID del equipo principal. Asegúrate de que el teamId proporcionado en la ruta sea correcto, ya que identifica el equipo que se va a actualizar. > **Supported products** > **Required Scopes** # Add privacy consent listener Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/tracking-code/add-privacy-consent-listener # Enable do not track Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/tracking-code/do-not-track # Identify a visitor Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/tracking-code/identify # HubSpot tracking code API Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/tracking-code/overview # Revoke cookie consent Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/tracking-code/revoke-cookie-consent # Set the current page path Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/tracking-code/set-path # Track custom events Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/tracking-code/track-event # Track a page view Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/tracking-code/track-page-view # Create a user Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/user-provisioning/create-user specs/2026-09/settings-user-provisioning-v2026-09.json POST /settings/users/2026-09 Crea un nuevo usuario en tu cuenta de HubSpot con los detalles especificados. Este punto de conexión requiere un cuerpo de solicitud JSON con información del usuario, como el correo electrónico, el nombre, los apellidos, el rol y las licencias. Puedes enviar un correo electrónico de bienvenida al nuevo usuario de forma opcional. > **Supported products** > **Required Scopes** # Retrieves users Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/user-provisioning/get-users specs/2026-09/settings-user-provisioning-v2026-09.json GET /settings/users/2026-09 Obtén una lista paginada de usuarios en tu cuenta de HubSpot. Este punto de conexión te permite especificar el número máximo de resultados por página y usar un cursor de paginación para navegar por la lista de usuarios. > **Supported products** > **Required Scopes** # Settings API | User provisioning Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/user-provisioning/guide # Retrieves the roles on an account Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/user-provisioning/roles/get-roles specs/2026-09/settings-user-provisioning-v2026-09.json GET /settings/users/2026-09/roles Obtén una lista de los roles de usuario disponibles en tu cuenta de HubSpot. Este punto de conexión proporciona información sobre los diferentes conjuntos de permisos que se pueden asignar a los usuarios, lo que es útil para gestionar el acceso y los permisos de los usuarios dentro de la cuenta. > **Supported products** > **Required Scopes** # Retrieves the seats on this account Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/user-provisioning/seats/get-seats specs/2026-09/settings-user-provisioning-v2026-09.json GET /settings/users/2026-09/seats Obtén la lista de licencias disponibles en la cuenta. Este punto de conexión proporciona detalles sobre cada licencia, como su nombre, descripción y el número de licencias restantes. Es útil para gestionar y revisar las asignaciones de licencias dentro de la organización. > **Supported products** > **Required Scopes** # See details about this account's teams Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/user-provisioning/teams/get-teams specs/2026-09/settings-user-provisioning-v2026-09.json GET /settings/users/2026-09/teams Ver los equipos de esta cuenta. > **Supported products** > **Required Scopes** # Removes a user Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/user-provisioning/users/delete-user specs/2026-09/settings-user-provisioning-v2026-09.json DELETE /settings/users/2026-09/{userId} Elimina un usuario identificado por "userId". Por opción predeterminada, "userId" hace referencia al ID del usuario, u opcionalmente al correo especificado por el parámetro de consulta "IdProperty". > **Supported products** > **Required Scopes** # Retrieves a user Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/user-provisioning/users/get-user specs/2026-09/settings-user-provisioning-v2026-09.json GET /settings/users/2026-09/{userId} Recupera un usuario identificado por "userId". Por opción predeterminada, "userId" hace referencia al ID del usuario, u opcionalmente al correo especificado por el parámetro de consulta "IdProperty". > **Supported products** > **Required Scopes** # Modifies a user Source: https://developers.hubspot.es/docs/api-reference/latest/account/settings/user-provisioning/users/update-user specs/2026-09/settings-user-provisioning-v2026-09.json PUT /settings/users/2026-09/{userId} Modifica un usuario identificado por "userId". Por opción predeterminada, "userId" hace referencia al ID del usuario, u opcionalmente al correo especificado por el parámetro de consulta "IdProperty". > **Supported products** > **Required Scopes** # App uninstalls API Source: https://developers.hubspot.es/docs/api-reference/latest/app-management/app-uninstalls/guide # Uninstall app Source: https://developers.hubspot.es/docs/api-reference/latest/app-management/app-uninstalls/uninstall-app specs/2026-09/crm-app-uninstalls-v2026-09.json DELETE /appinstalls/2026-09/external-install Utiliza este punto de terminación para desinstalar tu aplicación de la cuenta de HubSpot de un cliente. Si se hace correctamente, este punto de terminación devolverá una respuesta 204 y el cliente recibirá un correo notificando que el desarrollador desinstaló la aplicación de su cuenta. > **Supported products** > **Required Scopes** # Delete an app's feature flag Source: https://developers.hubspot.es/docs/api-reference/latest/app-management/feature-flags/flags/delete-feature-flag specs/2026-09/crm-public-app-feature-flags-v3-v2026-09.json DELETE /feature-flags/2026-09/{appId}/flags/{flagName} Elimina un indicador de característica en una aplicacion aplicación. Por ejemplo, una vez que se hayan migrado todas las cuentas, elimina el indicador "hs-release-app-cards". > **Supported products** > **Required Scopes** # Retrieve a feature flag Source: https://developers.hubspot.es/docs/api-reference/latest/app-management/feature-flags/flags/get-feature-flag specs/2026-09/crm-public-app-feature-flags-v3-v2026-09.json GET /feature-flags/2026-09/{appId}/flags/{flagName} Recupera el estado actual de las características de una aplicación. No se incluye el cuerpo de la solicitud. > **Supported products** > **Required Scopes** # Retrieve an app's feature flags Source: https://developers.hubspot.es/docs/api-reference/latest/app-management/feature-flags/flags/get-feature-flags specs/2026-09/crm-public-app-feature-flags-v3-v2026-09.json GET /feature-flags/2026-09/{appId}/flags/all Recupera todos los indicadores de características asociados a una aplicación específica en tu cuenta de HubSpot. Este punto de terminación es útil para desarrolladores que necesitan gestionar o auditar los indicadores de características de sus aplicaciones. Requiere el ID de la aplicación para identificar la aplicación cuyos indicadores se mostrarán. > **Supported products** > **Required Scopes** # Set an app's feature flag Source: https://developers.hubspot.es/docs/api-reference/latest/app-management/feature-flags/flags/update-feature-flag specs/2026-09/crm-public-app-feature-flags-v3-v2026-09.json PUT /feature-flags/2026-09/{appId}/flags/{flagName} Establece un indicador de característica de una aplicación. Por ejemplo, actualiza "defaultState" del indicador "hs-hide-crm-cards" a "ON" para ocultar las tarjetas CRM clásicas de las nuevas instalaciones. > **Supported products** > **Required Scopes** # Feature flags Source: https://developers.hubspot.es/docs/api-reference/latest/app-management/feature-flags/guide # Delete an account flag state Source: https://developers.hubspot.es/docs/api-reference/latest/app-management/feature-flags/portal-flag-states/delete-portal-flag specs/2026-09/crm-public-app-feature-flags-v3-v2026-09.json DELETE /feature-flags/2026-09/{appId}/flags/{flagName}/portals/{portalId} Elimina un estado de indicador a nivel de cuenta para una cuenta específica de HubSpot. No se incluye el cuerpo de la solicitud. > **Supported products** > **Required Scopes** # Batch delete account flag state Source: https://developers.hubspot.es/docs/api-reference/latest/app-management/feature-flags/portal-flag-states/delete-portal-flag-batch specs/2026-09/crm-public-app-feature-flags-v3-v2026-09.json POST /feature-flags/2026-09/{appId}/flags/{flagName}/portals/batch/delete Elimina el estado de un indicador de nivel de cuenta para varias cuentas de HubSpot a la vez. Utiliza este punto de terminación para gestionar la exposición de indicadores para grupos de cuentas de HubSpot. > **Supported products** > **Required Scopes** # Retrieve account flag state Source: https://developers.hubspot.es/docs/api-reference/latest/app-management/feature-flags/portal-flag-states/get-account-flag specs/2026-09/crm-public-app-feature-flags-v3-v2026-09.json GET /feature-flags/2026-09/{appId}/flags/{flagName}/portals/{portalId} Recupera el estado de indicador a nivel de cuenta de una cuenta específica de HubSpot. > **Supported products** > **Required Scopes** # Retrieve accounts with a set flag state Source: https://developers.hubspot.es/docs/api-reference/latest/app-management/feature-flags/portal-flag-states/get-accounts-with-flag-state specs/2026-09/crm-public-app-feature-flags-v3-v2026-09.json GET /feature-flags/2026-09/{appId}/flags/{flagName}/portals Recupera una lista de cuentas de HubSpot con un valor de configuración de indicador específico de la cuenta para la aplicación especificada. No se incluye el cuerpo de la solicitud. > **Supported products** > **Required Scopes** # Set an account flag state Source: https://developers.hubspot.es/docs/api-reference/latest/app-management/feature-flags/portal-flag-states/update-account-flag specs/2026-09/crm-public-app-feature-flags-v3-v2026-09.json PUT /feature-flags/2026-09/{appId}/flags/{flagName}/portals/{portalId} Especifica un estado de indicador a nivel de cuenta para una cuenta específica de HubSpot. > **Supported products** > **Required Scopes** # Batch set account flag state Source: https://developers.hubspot.es/docs/api-reference/latest/app-management/feature-flags/portal-flag-states/upsert-account-flag specs/2026-09/crm-public-app-feature-flags-v3-v2026-09.json POST /feature-flags/2026-09/{appId}/flags/{flagName}/portals/batch/upsert Establece el estado del indicador del portal para varias cuentas de HubSpot a la vez. Utiliza este punto de terminación para gestionar la exposición de indicadores para grupos de cuentas de HubSpot. > **Supported products** > **Required Scopes** # Manage OAuth access tokens with the 2026-09 API Source: https://developers.hubspot.es/docs/api-reference/latest/authentication/manage-oauth-tokens # Refresh an access token Source: https://developers.hubspot.es/docs/api-reference/latest/authentication/oauth-tokens/refresh-oauth-token specs/2026-09/auth-oauth-v2026-09.json POST /oauth/2026-09/token Autentica a un cliente y devuelve tokens de acceso y actualización. > **Supported products** # Revoke an OAuth token Source: https://developers.hubspot.es/docs/api-reference/latest/authentication/oauth-tokens/revoke-token specs/2026-09/auth-oauth-v2026-09.json POST /oauth/2026-09/token/revoke Elimina/revoca el token de actualización proporcionado > **Supported products** # Token introspection endpoint Source: https://developers.hubspot.es/docs/api-reference/latest/authentication/oauth-tokens/token-introspect specs/2026-09/auth-oauth-v2026-09.json POST /oauth/2026-09/token/introspect Devuelve validez y metadatos para acceder a tokens y actualizarlos. > **Supported products** # Create template Source: https://developers.hubspot.es/docs/api-reference/latest/automation/email-templates/create-email-template specs/2026-09/automation-email-templates-v2026-09.json POST /automation/email-templates/2026-09 Crea una nueva plantilla de correo electrónico en tu cuenta de HubSpot. Este punto de terminación te permite definir el nombre, el asunto y el cuerpo de la plantilla, y opcionalmente asignarla a una carpeta. La solicitud debe incluir el cuerpo y el nombre de la plantilla. Ten en cuenta que los ámbitos de estos puntos de terminación requieren acceso a nivel de usuario y no funcionarán para las aplicaciones existentes con acceso a nivel de portal. > **Supported products** > **Required Scopes** # Email templates Source: https://developers.hubspot.es/docs/api-reference/latest/automation/email-templates/guide # Retrieve template Source: https://developers.hubspot.es/docs/api-reference/latest/automation/email-templates/retrieve-email-template specs/2026-09/automation-email-templates-v2026-09.json GET /automation/email-templates/2026-09/{templateId} Obtén una plantilla de correo electrónico específica usando su identificador único. Este punto de terminación te permite acceder a los detalles de una plantilla de correo electrónico, lo que puede ser útil para revisar o gestionar tus estrategias de automatización de correos. Ten en cuenta que los alcances para estos puntos de terminación requieren acceso a nivel de usuario y no funcionarán para aplicaciones existentes con acceso a nivel de portal. > **Supported products** > **Required Scopes** # Retrieve templates Source: https://developers.hubspot.es/docs/api-reference/latest/automation/email-templates/retrieve-email-templates specs/2026-09/automation-email-templates-v2026-09.json GET /automation/email-templates/2026-09 Obtén una lista de las plantillas de correo electrónico disponibles en la cuenta de HubSpot. Este punto de terminación admite la paginación para navegar por grandes conjuntos de plantillas. Usa este endpoint para acceder y gestionar tus plantillas de correo electrónico de forma eficiente. Ten en cuenta que los ámbitos de estos puntos de terminación requieren acceso a nivel de usuario y no funcionarán para las aplicaciones existentes con acceso a nivel de portal. > **Supported products** > **Required Scopes** # Retrieve folders Source: https://developers.hubspot.es/docs/api-reference/latest/automation/email-templates/retrieve-folders specs/2026-09/automation-email-templates-v2026-09.json GET /automation/email-templates/2026-09/folders Obtén una lista de las carpetas de plantillas de correo electrónico disponibles en tu cuenta de HubSpot. Este punto de terminación admite la paginación para navegar por grandes conjuntos de carpetas. Usa este punto de terminación para organizar y gestionar tus plantillas de correo electrónico de forma eficiente. Ten en cuenta que los ámbitos de estos puntos de terminación requieren acceso a nivel de usuario y no funcionarán para las aplicaciones existentes con acceso a nivel de portal. > **Supported products** > **Required Scopes** # Update template Source: https://developers.hubspot.es/docs/api-reference/latest/automation/email-templates/update-email-template specs/2026-09/automation-email-templates-v2026-09.json PATCH /automation/email-templates/2026-09/{templateId} Actualiza una plantilla de correo electrónico existente en tu cuenta de HubSpot. Este punto de terminación te permite modificar las propiedades de la plantilla, como el nombre, el asunto, el cuerpo y el folderId. Asegúrate de que el templateId proporcionado corresponda a una plantilla existente. Ten en cuenta que los ámbitos de estos puntos de terminación requieren acceso a nivel de usuario y no funcionarán para las aplicaciones existentes con acceso a nivel de portal. > **Supported products** > **Required Scopes** # Create sequence Source: https://developers.hubspot.es/docs/api-reference/latest/automation/sequences/create-sequence specs/2026-09/automation-sequences-v2026-09.json POST /automation/sequences/2026-09/serviceaccounts/sequences Crea una secuencia nueva en tu cuenta de HubSpot con la configuración y los pasos especificados. Este punto de conexión te permite definir las propiedades de la secuencia, como su nombre, configuración, pasos y dependencias, para automatizar procesos de forma eficaz. Ten en cuenta que los permisos de este punto de conexión requieren acceso a nivel de usuario y no funcionarán para las aplicaciones existentes con acceso a nivel de portal. > **Supported products** > **Required Scopes** # Delete sequence Source: https://developers.hubspot.es/docs/api-reference/latest/automation/sequences/delete-sequence specs/2026-09/automation-sequences-v2026-09.json DELETE /automation/sequences/2026-09/serviceaccounts/sequences/{sequenceId} Elimina una secuencia específica de tu cuenta de HubSpot usando su identificador único. Esta operación eliminará la secuencia y, opcionalmente, puede anular las inscripciones activas si se especifica. Ten en cuenta que los permisos de este punto de conexión requieren acceso a nivel de usuario y no funcionarán para las aplicaciones existentes con acceso a nivel de portal. > **Supported products** > **Required Scopes** # Enroll a contact Source: https://developers.hubspot.es/docs/api-reference/latest/automation/sequences/enrollment/enroll-a-contact specs/2026-09/automation-sequences-v2026-09.json POST /automation/sequences/2026-09/enrollments Inscribe a un contacto en una secuencia usando el ID de secuencia especificado. Esta operación requiere que el ID de usuario se proporcione como un parámetro de consulta. El cuerpo de la solicitud debe incluir el ID de contacto, el correo electrónico del remitente y el ID de secuencia. Este punto de conexión es útil para automatizar la inscripción de contactos en secuencias predefinidas para optimizar la comunicación y los procesos de seguimiento. > **Supported products** > **Required Scopes** # Enroll service account Source: https://developers.hubspot.es/docs/api-reference/latest/automation/sequences/enrollment/enroll-service-account specs/2026-09/automation-sequences-v2026-09.json POST /automation/sequences/2026-09/serviceaccounts/enrollments Inscribe una cuenta de servicio en una secuencia usando los detalles de inscripción especificados. Este punto de conexión es útil para automatizar el proceso de añadir cuentas de servicio a secuencias, lo que puede ayudar a optimizar los workflows y garantizar estrategias de interacción coherentes. Ten en cuenta que los permisos para este punto de conexión requieren acceso a nivel de usuario y no funcionarán para aplicaciones existentes con acceso a nivel de portal. > **Supported products** > **Required Scopes** # Retrieve enrollment details Source: https://developers.hubspot.es/docs/api-reference/latest/automation/sequences/enrollment/retrieve-enrollment-details specs/2026-09/automation-sequences-v2026-09.json GET /automation/sequences/2026-09/enrollments/contact/{contactId} Obtén los detalles de inscripción en la secuencia de un contacto específico en tu cuenta de HubSpot. Este punto de conexión te da información sobre la secuencia en la que está inscrito un contacto, como las fechas de inscripción y el nombre y el ID de la secuencia. > **Supported products** > **Required Scopes** # Sequences API Source: https://developers.hubspot.es/docs/api-reference/latest/automation/sequences/guide # List sequences Source: https://developers.hubspot.es/docs/api-reference/latest/automation/sequences/list-sequences specs/2026-09/automation-sequences-v2026-09.json GET /automation/sequences/2026-09/serviceaccounts/sequences Obtén una lista de las secuencias disponibles en la cuenta de servicio. Este punto de conexión admite paginación y permite filtrar por nombre de secuencia. Es útil para obtener una vista general de las secuencias con fines de gestión o elaboración de informes. Ten en cuenta que los permisos de este punto de conexión requieren acceso a nivel de usuario y no funcionarán para las aplicaciones existentes con acceso a nivel de portal. > **Supported products** > **Required Scopes** # Retrieve performance Source: https://developers.hubspot.es/docs/api-reference/latest/automation/sequences/retrieve-performance specs/2026-09/automation-sequences-v2026-09.json GET /automation/sequences/2026-09/serviceaccounts/sequences/{sequenceId}/performance Obtén las métricas de rendimiento de una secuencia específica en tu cuenta de HubSpot. Este punto de conexión proporciona información detallada sobre la efectividad de la secuencia, e incluye métricas como tasas de apertura, clics y respuestas. Es útil para analizar el éxito de tus secuencias a lo largo del tiempo. Ten en cuenta que los permisos de este punto de conexión requieren acceso a nivel de usuario y no funcionarán para aplicaciones existentes con acceso a nivel de portal. > **Supported products** > **Required Scopes** # Retrieve sequence Source: https://developers.hubspot.es/docs/api-reference/latest/automation/sequences/retrieve-sequence specs/2026-09/automation-sequences-v2026-09.json GET /automation/sequences/2026-09/serviceaccounts/sequences/{sequenceId} Obtén los detalles de una secuencia específica en tu cuenta de HubSpot usando el ID de la secuencia. Este punto de conexión te da información completa sobre la secuencia, incluyendo su configuración, pasos y dependencias. Es útil para obtener configuraciones de la secuencia y entender la estructura y los componentes de esta. Ten en cuenta que los permisos de este punto de conexión requieren acceso a nivel de usuario y no funcionarán para las aplicaciones existentes con acceso a nivel de portal. > **Supported products** > **Required Scopes** # Update sequence Source: https://developers.hubspot.es/docs/api-reference/latest/automation/sequences/update-sequence specs/2026-09/automation-sequences-v2026-09.json PUT /automation/sequences/2026-09/serviceaccounts/sequences/{sequenceId} Actualiza una secuencia existente en tu cuenta de HubSpot usando su identificador único. Este punto de conexión te permite modificar la configuración, los pasos y las dependencias de la secuencia. Asegúrate de que el sequenceId proporcionado en la ruta sea válido y corresponda a la secuencia que quieres actualizar. Ten en cuenta que los permisos de este punto de conexión requieren acceso a nivel de usuario y no funcionarán para las aplicaciones existentes con acceso a nivel de portal. > **Supported products** > **Required Scopes** # Complete a batch of callbacks Source: https://developers.hubspot.es/docs/api-reference/latest/automation/workflow-actions/callbacks/batch-complete-callbacks specs/2026-09/automation-actions-v4-v2026-09.json POST /automation/actions/callbacks/2026-09/complete Completar un lote de ejecuciones de acciones bloqueadas. > **Supported products** > **Required Scopes** # Complete a callback Source: https://developers.hubspot.es/docs/api-reference/latest/automation/workflow-actions/callbacks/complete-callback specs/2026-09/automation-actions-v4-v2026-09.json POST /automation/actions/callbacks/2026-09/{callbackId}/complete Completar la ejecución de una acción bloqueada específica por ID. > **Supported products** > **Required Scopes** # Build custom workflow actions Source: https://developers.hubspot.es/docs/api-reference/latest/automation/workflow-actions/custom-action-guide # Custom workflow actions reference Source: https://developers.hubspot.es/docs/api-reference/latest/automation/workflow-actions/custom-action-reference # Custom code actions Source: https://developers.hubspot.es/docs/api-reference/latest/automation/workflow-actions/custom-code-actions # Create a new custom action definition Source: https://developers.hubspot.es/docs/api-reference/latest/automation/workflow-actions/definitions/create-action-definition specs/2026-09/automation-actions-v4-v2026-09.json POST /automation/actions/2026-09/{appId} Cree una nueva acción de workflow personalizada. > **Supported products** > **Required Scopes** # Delete an action definition Source: https://developers.hubspot.es/docs/api-reference/latest/automation/workflow-actions/definitions/delete-action-definition specs/2026-09/automation-actions-v4-v2026-09.json DELETE /automation/actions/2026-09/{appId}/{definitionId} Eliminar una definición de acción por ID. > **Supported products** > **Required Scopes** # Retrieve a custom action definition Source: https://developers.hubspot.es/docs/api-reference/latest/automation/workflow-actions/definitions/get-action-definition specs/2026-09/automation-actions-v4-v2026-09.json GET /automation/actions/2026-09/{appId}/{definitionId} Recuperar una definición de acción de workflow personalizada por ID. > **Supported products** > **Required Scopes** # Retrieve custom action definitions Source: https://developers.hubspot.es/docs/api-reference/latest/automation/workflow-actions/definitions/get-action-definitions specs/2026-09/automation-actions-v4-v2026-09.json GET /automation/actions/2026-09/{appId} Recuperar definiciones de acciones de workflow personalizadas por ID de aplicación. > **Supported products** > **Required Scopes** # Set the object requirement for a custom action definition. Source: https://developers.hubspot.es/docs/api-reference/latest/automation/workflow-actions/definitions/set-object-requirement specs/2026-09/automation-actions-v4-v2026-09.json POST /automation/actions/2026-09/{appId}/{definitionId}/requires-object Indica si una definición de acción personalizada requiere un objeto. > **Supported products** > **Required Scopes** # Update an existing action definition Source: https://developers.hubspot.es/docs/api-reference/latest/automation/workflow-actions/definitions/update-action-definition specs/2026-09/automation-actions-v4-v2026-09.json PATCH /automation/actions/2026-09/{appId}/{definitionId} Actualizar una definición de acción existente por ID. > **Supported products** > **Required Scopes** # Insert a function for a definition Source: https://developers.hubspot.es/docs/api-reference/latest/automation/workflow-actions/functions/add-function specs/2026-09/automation-actions-v4-v2026-09.json PUT /automation/actions/2026-09/{appId}/{definitionId}/functions/{functionType} Agregar una función para una definición dada. > **Supported products** > **Required Scopes** # Archive a function for a definition Source: https://developers.hubspot.es/docs/api-reference/latest/automation/workflow-actions/functions/archive-function specs/2026-09/automation-actions-v4-v2026-09.json DELETE /automation/actions/2026-09/{appId}/{definitionId}/functions/{functionType}/{functionId} Archiva una función para una definición específica. > **Supported products** > **Required Scopes** # Delete a function for a definition Source: https://developers.hubspot.es/docs/api-reference/latest/automation/workflow-actions/functions/delete-function specs/2026-09/automation-actions-v4-v2026-09.json DELETE /automation/actions/2026-09/{appId}/{definitionId}/functions/{functionType} Eliminar una función dentro de una definición dada. > **Supported products** > **Required Scopes** # Retrieve a function from a given definition Source: https://developers.hubspot.es/docs/api-reference/latest/automation/workflow-actions/functions/get-function specs/2026-09/automation-actions-v4-v2026-09.json GET /automation/actions/2026-09/{appId}/{definitionId}/functions/{functionType}/{functionId} Recuperar una función específica de una definición dada. > **Supported products** > **Required Scopes** # Retrieve functions for a given definition Source: https://developers.hubspot.es/docs/api-reference/latest/automation/workflow-actions/functions/get-functions specs/2026-09/automation-actions-v4-v2026-09.json GET /automation/actions/2026-09/{appId}/{definitionId}/functions Recuperar todas las funciones incluidas en una definición. > **Supported products** > **Required Scopes** # Retrieve functions by a type for a given definition Source: https://developers.hubspot.es/docs/api-reference/latest/automation/workflow-actions/functions/get-functions-by-type specs/2026-09/automation-actions-v4-v2026-09.json GET /automation/actions/2026-09/{appId}/{definitionId}/functions/{functionType} Obtén las funciones de un tipo específico para una definición determinada. > **Supported products** > **Required Scopes** # Update a function for a definition Source: https://developers.hubspot.es/docs/api-reference/latest/automation/workflow-actions/functions/update-function specs/2026-09/automation-actions-v4-v2026-09.json PUT /automation/actions/2026-09/{appId}/{definitionId}/functions/{functionType}/{functionId} Actualizar una función para una definición dada por ID. > **Supported products** > **Required Scopes** # Retrieve a specific revision of a definition Source: https://developers.hubspot.es/docs/api-reference/latest/automation/workflow-actions/revisions/get-revision specs/2026-09/automation-actions-v4-v2026-09.json GET /automation/actions/2026-09/{appId}/{definitionId}/revisions/{revisionId} Recuperar una revisión específica de una definición por ID de revisión. > **Supported products** > **Required Scopes** # Retrieve revisions for a given definition Source: https://developers.hubspot.es/docs/api-reference/latest/automation/workflow-actions/revisions/get-revisions specs/2026-09/automation-actions-v4-v2026-09.json GET /automation/actions/2026-09/{appId}/{definitionId}/revisions Recuperar las versiones de una definición por ID. > **Supported products** > **Required Scopes** # Create a batch of authors Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/authors/batch/create-authors specs/2026-09/cms-authors-v2026-09.json POST /cms/blogs/2026-09/authors/batch/create Crea los objetos de autor de blog detallados en el cuerpo de la solicitud. > **Supported products** > **Required Scopes** # Delete a batch of authors Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/authors/batch/delete-authors specs/2026-09/cms-authors-v2026-09.json POST /cms/blogs/2026-09/authors/batch/archive Elimina los objetos de autor de blog identificados en el cuerpo de la solicitud. > **Supported products** > **Required Scopes** # Retrieve a batch of authors Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/authors/batch/get-authors specs/2026-09/cms-authors-v2026-09.json POST /cms/blogs/2026-09/authors/batch/read Recupera los objetos de autor de blog identificados en el cuerpo de la solicitud. > **Supported products** > **Required Scopes** # Update a batch of authors Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/authors/batch/update-authors specs/2026-09/cms-authors-v2026-09.json POST /cms/blogs/2026-09/authors/batch/update Actualiza los objetos de autor de blog identificados en el cuerpo de la solicitud. > **Supported products** > **Required Scopes** # Create an author Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/authors/create-author specs/2026-09/cms-authors-v2026-09.json POST /cms/blogs/2026-09/authors Crea un nuevo autor de blog. > **Supported products** > **Required Scopes** # Delete an author Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/authors/delete-author specs/2026-09/cms-authors-v2026-09.json DELETE /cms/blogs/2026-09/authors/{objectId} Elimina el objeto de autor de blog identificado por el id en la ruta. > **Supported products** > **Required Scopes** # Retrieve an author Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/authors/get-author specs/2026-09/cms-authors-v2026-09.json GET /cms/blogs/2026-09/authors/{objectId} Recupera el objeto de autor de blog identificado por el id en la ruta. > **Supported products** > **Required Scopes** # Get all authors Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/authors/get-authors specs/2026-09/cms-authors-v2026-09.json GET /cms/blogs/2026-09/authors Obtener la lista de autores de blog. Admite paginación y filtrado. Este método sería útil para una integración que examinara estos modelos y utilizara un servicio externo para sugerir ediciones. > **Supported products** > **Required Scopes** # CMS API | Blog Authors Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/authors/guide # Attach an author to a multi-language group Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/authors/multi-language/attach-to-lang-group specs/2026-09/cms-authors-v2026-09.json POST /cms/blogs/2026-09/authors/multi-language/attach-to-lang-group Adjunta un autor de blog a un grupo multilingüe. > **Supported products** > **Required Scopes** # Create a new language variation Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/authors/multi-language/create-language-variation specs/2026-09/cms-authors-v2026-09.json POST /cms/blogs/2026-09/authors/multi-language/create-language-variation Crea una nueva variación de idioma a partir de un autor de blog existente. > **Supported products** > **Required Scopes** # Detach an author from a multi-language group Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/authors/multi-language/detach-from-lang-group specs/2026-09/cms-authors-v2026-09.json POST /cms/blogs/2026-09/authors/multi-language/detach-from-lang-group Separa un autor de blog de un grupo multilingüe. > **Supported products** > **Required Scopes** # Set a new primary language Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/authors/multi-language/set-new-lang-primary specs/2026-09/cms-authors-v2026-09.json PUT /cms/blogs/2026-09/authors/multi-language/set-new-lang-primary Establece un autor de blog como idioma principal de un grupo multilingüe. > **Supported products** > **Required Scopes** # Update languages of multi-language group Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/authors/multi-language/update-languages specs/2026-09/cms-authors-v2026-09.json POST /cms/blogs/2026-09/authors/multi-language/update-languages Establece explícitamente nuevos idiomas para cada autor de blog en un grupo multilingüe. > **Supported products** > **Required Scopes** # Update an author Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/authors/update-author specs/2026-09/cms-authors-v2026-09.json PATCH /cms/blogs/2026-09/authors/{objectId} Actualiza selectivamente un único objeto de autor de blog identificado por el id incluido en la ruta. No es necesario especificar todos los valores de las columnas. Solo se puede especificar el que se necesita modificar. > **Supported products** > **Required Scopes** # Retrieve a blog Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/blog-settings/get-blog specs/2026-09/cms-blog-settings-v2026-09.json GET /cms/blog-settings/2026-09/settings/{blogId} Recuperar un blog específico por su ID. > **Supported products** > **Required Scopes** # Get a specific blog revision Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/blog-settings/get-blog-revision specs/2026-09/cms-blog-settings-v2026-09.json GET /cms/blog-settings/2026-09/settings/{blogId}/revisions/{revisionId} Obtén una modificación específica del blog. > **Supported products** > **Required Scopes** # Get all blog revisions Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/blog-settings/get-blog-revisions specs/2026-09/cms-blog-settings-v2026-09.json GET /cms/blog-settings/2026-09/settings/{blogId}/revisions Obtén la lista de modificaciones del blog. Los resultados pueden limitarse y filtrarse por fecha de creación o actualización. > **Supported products** > **Required Scopes** # Retrieve all blogs Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/blog-settings/get-blogs specs/2026-09/cms-blog-settings-v2026-09.json GET /cms/blog-settings/2026-09/settings Obtén la lista de blogs. Los resultados pueden limitarse y filtrarse por fecha de creación o actualización. > **Supported products** > **Required Scopes** # CMS API | Blog Settings Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/blog-settings/guide # Add a blog to a multi-language group Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/blog-settings/multi-language/attach-to-lang-group specs/2026-09/cms-blog-settings-v2026-09.json POST /cms/blog-settings/2026-09/settings/multi-language/attach-to-lang-group Adjunta un blog a un grupo multilingüe. > **Supported products** > **Required Scopes** # Update blog languages Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/blog-settings/multi-language/create-blog-setting specs/2026-09/cms-blog-settings-v2026-09.json POST /cms/blog-settings/2026-09/settings/multi-language/update-languages Define explícitamente nuevos idiomas para cada blog en un grupo multilingüe. > **Supported products** > **Required Scopes** # Create a language variation from an existing blog Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/blog-settings/multi-language/create-language-variation specs/2026-09/cms-blog-settings-v2026-09.json POST /cms/blog-settings/2026-09/settings/multi-language/create-language-variation Crear una nueva variante de idioma a partir de un blog existente. > **Supported products** > **Required Scopes** # Remove a blog from a multi-language group Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/blog-settings/multi-language/detach-from-lang-group specs/2026-09/cms-blog-settings-v2026-09.json POST /cms/blog-settings/2026-09/settings/multi-language/detach-from-lang-group Desvincula un blog de un grupo multilingüe. > **Supported products** > **Required Scopes** # Set primary language to match a specific blog Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/blog-settings/multi-language/set-new-lang-primary specs/2026-09/cms-blog-settings-v2026-09.json PUT /cms/blog-settings/2026-09/settings/multi-language/set-new-lang-primary Define un blog como el idioma principal de un grupo multilingüe. > **Supported products** > **Required Scopes** # CMS API | Blog Posts Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/posts/guide # Create a batch of posts Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/posts/batch/create-posts specs/2026-09/cms-posts-v2026-09.json POST /cms/blogs/2026-09/posts/batch/create Crear un lote de entradas de blog, especificando su contenido en el cuerpo de la solicitud. > **Supported products** > **Required Scopes** # Delete a batch of posts Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/posts/batch/delete-posts specs/2026-09/cms-posts-v2026-09.json POST /cms/blogs/2026-09/posts/batch/archive Eliminar una entrada del blog por ID. Nota: Esto no es lo mismo que la función "archive" en la aplicación. Para realizar un "archive" del panel de control, envía una actualización normal con el campo "archivedInDashboard" establecido en verdadero. > **Supported products** > **Required Scopes** # Retrieve a batch of posts Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/posts/batch/get-posts specs/2026-09/cms-posts-v2026-09.json POST /cms/blogs/2026-09/posts/batch/read Recuperar un lote de entradas de blog por ID identificados en el cuerpo de la solicitud. > **Supported products** > **Required Scopes** # Update a batch of posts Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/posts/batch/update-posts specs/2026-09/cms-posts-v2026-09.json POST /cms/blogs/2026-09/posts/batch/update Actualizar un lote de entradas de blog > **Supported products** > **Required Scopes** # Clone a post Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/posts/clone-post specs/2026-09/cms-posts-v2026-09.json POST /cms/blogs/2026-09/posts/clone Clonar una entrada de blog, haciendo una copia de la misma en una nueva entrada de blog. > **Supported products** > **Required Scopes** # Create a new post Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/posts/create-post specs/2026-09/cms-posts-v2026-09.json POST /cms/blogs/2026-09/posts Crear una nueva entrada de blog, especificando su contenido en el cuerpo de la solicitud. > **Supported products** > **Required Scopes** # Delete a post Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/posts/delete-post specs/2026-09/cms-posts-v2026-09.json DELETE /cms/blogs/2026-09/posts/{objectId} Eliminar una entrada de blog por ID. > **Supported products** > **Required Scopes** # Retrieve the full draft version of a post Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/posts/drafts/get-post-draft specs/2026-09/cms-posts-v2026-09.json GET /cms/blogs/2026-09/posts/{objectId}/draft Recuperar la versión completa del borrador de una entrada de blog. > **Supported products** > **Required Scopes** # Publish a post draft Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/posts/drafts/publish-draft specs/2026-09/cms-posts-v2026-09.json POST /cms/blogs/2026-09/posts/{objectId}/draft/push-live Publicar la versión preliminar de la entrada del blog, enviando su contenido a la página en vivo. > **Supported products** > **Required Scopes** # Update the draft of a post Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/posts/drafts/update-post-draft specs/2026-09/cms-posts-v2026-09.json PATCH /cms/blogs/2026-09/posts/{objectId}/draft Actualiza parcialmente la versión preliminar de una única entrada de blog por ID. Sólo tienes que especificar los valores que deseas actualizar. > **Supported products** > **Required Scopes** # Retrieve a post Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/posts/get-post specs/2026-09/cms-posts-v2026-09.json GET /cms/blogs/2026-09/posts/{objectId} Recuperar una entrada de blog por el ID de la entrada. > **Supported products** > **Required Scopes** # Get all posts Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/posts/get-posts specs/2026-09/cms-posts-v2026-09.json GET /cms/blogs/2026-09/posts Recuperar todas las entradas del blog, con opciones de paginación y filtrado. Este método sería útil para una integración que reciba entradas y sugiera ediciones. > **Supported products** > **Required Scopes** # Attach post to a multi-language group Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/posts/multi-language/attach-to-lang-group specs/2026-09/cms-posts-v2026-09.json POST /cms/blogs/2026-09/posts/multi-language/attach-to-lang-group Adjuntar una entrada de blog a un [grupo multilingüe](https://developers.hubspot.com/docs/guides/cms/content/multi-language-content). > **Supported products** > **Required Scopes** # Create a language variation Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/posts/multi-language/create-language-variation specs/2026-09/cms-posts-v2026-09.json POST /cms/blogs/2026-09/posts/multi-language/create-language-variation Crear una nueva variación de idioma a partir de una entrada de blog existente > **Supported products** > **Required Scopes** # Detach post from a multi-language group Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/posts/multi-language/detach-from-lang-group specs/2026-09/cms-posts-v2026-09.json POST /cms/blogs/2026-09/posts/multi-language/detach-from-lang-group Separar una entrada de blog de un [grupo multilingüe](https://developers.hubspot.com/docs/guides/cms/content/multi-language-content). > **Supported products** > **Required Scopes** # Set a new primary language Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/posts/multi-language/set-new-lang-primary specs/2026-09/cms-posts-v2026-09.json PUT /cms/blogs/2026-09/posts/multi-language/set-new-lang-primary Establecer el idioma principal de un [grupo multilingüe] (https://developers.hubspot.com/docs/guides/cms/content/multi-language-content) en el idioma de la entrada proporcionada (especificada como un ID en el cuerpo de la solicitud) > **Supported products** > **Required Scopes** # Update languages of multi-language group Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/posts/multi-language/update-languages specs/2026-09/cms-posts-v2026-09.json POST /cms/blogs/2026-09/posts/multi-language/update-languages Establecer explícitamente nuevos idiomas para cada mensaje en un [grupo multilingüe](https://developers.hubspot.com/docs/guides/cms/content/multi-language-content). > **Supported products** > **Required Scopes** # Retrieve a previous version of a post Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/posts/revisions/get-post-version specs/2026-09/cms-posts-v2026-09.json GET /cms/blogs/2026-09/posts/{objectId}/revisions/{revisionId} Recuperar una versión anterior de una entrada de blog. > **Supported products** > **Required Scopes** # Retrieves all previous versions of a post Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/posts/revisions/get-post-versions specs/2026-09/cms-posts-v2026-09.json GET /cms/blogs/2026-09/posts/{objectId}/revisions Recuperar todas las versiones anteriores de una entrada de blog. > **Supported products** > **Required Scopes** # Restore a previous version Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/posts/revisions/restore-post specs/2026-09/cms-posts-v2026-09.json POST /cms/blogs/2026-09/posts/{objectId}/revisions/{revisionId}/restore Restaura una entrada de blog a una de sus versiones anteriores. > **Supported products** > **Required Scopes** # Restore a draft to a previous version Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/posts/revisions/restore-to-draft specs/2026-09/cms-posts-v2026-09.json POST /cms/blogs/2026-09/posts/{objectId}/revisions/{revisionId}/restore-to-draft Toma una versión específica de una entrada del blog y la establece como la nueva versión en borrador de la entrada. > **Supported products** > **Required Scopes** # Schedule a post to be published Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/posts/schedule-post specs/2026-09/cms-posts-v2026-09.json POST /cms/blogs/2026-09/posts/schedule Programar la publicación de una entrada de blog a una hora determinada. > **Supported products** > **Required Scopes** # Update a post Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/posts/update-post specs/2026-09/cms-posts-v2026-09.json PATCH /cms/blogs/2026-09/posts/{objectId} Actualiza parcialmente una entrada del blog por ID. Sólo tienes que especificar los valores que deseas actualizar. > **Supported products** > **Required Scopes** # Create a batch of tags Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/tags/batch/create-tags specs/2026-09/cms-tags-v2026-09.json POST /cms/blogs/2026-09/tags/batch/create Crear los objetos de la etiqueta del blog detallados en el cuerpo de la solicitud. > **Supported products** > **Required Scopes** # Delete a batch of tags Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/tags/batch/delete-tags specs/2026-09/cms-tags-v2026-09.json POST /cms/blogs/2026-09/tags/batch/archive Elimina los objetos de la etiqueta del blog identificados en el cuerpo de la solicitud. > **Supported products** > **Required Scopes** # Retrieve a batch of tags Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/tags/batch/get-tags specs/2026-09/cms-tags-v2026-09.json POST /cms/blogs/2026-09/tags/batch/read Recuperar los objetos de la etiqueta del blog identificados en el cuerpo de la solicitud. > **Supported products** > **Required Scopes** # Update a batch of tags Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/tags/batch/update-tags specs/2026-09/cms-tags-v2026-09.json POST /cms/blogs/2026-09/tags/batch/update Actualizar los objetos de la etiqueta del blog identificados en el cuerpo de la solicitud. > **Supported products** > **Required Scopes** # Create a tag Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/tags/create-tag specs/2026-09/cms-tags-v2026-09.json POST /cms/blogs/2026-09/tags Crear una nueva etiqueta de blog. > **Supported products** > **Required Scopes** # Delete a tag Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/tags/delete-tag specs/2026-09/cms-tags-v2026-09.json DELETE /cms/blogs/2026-09/tags/{objectId} Eliminar el objeto de la etiqueta del blog identificado por el ID en la ruta. > **Supported products** > **Required Scopes** # Retrieve a tag Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/tags/get-tag specs/2026-09/cms-tags-v2026-09.json GET /cms/blogs/2026-09/tags/{objectId} Recuperar el objeto de la etiqueta del blog identificado por el ID en la ruta. > **Supported products** > **Required Scopes** # Retrieve all tags Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/tags/get-tags specs/2026-09/cms-tags-v2026-09.json GET /cms/blogs/2026-09/tags Obtener la lista de etiquetas del blog. Admite paginación y filtrado. Este método sería útil para una integración que examinara estos modelos y utilizara un servicio externo para sugerir ediciones. > **Supported products** > **Required Scopes** # CMS API | Blog tags Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/tags/guide # Attach a tag to a multi-language group Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/tags/multi-language/attach-to-lang-group specs/2026-09/cms-tags-v2026-09.json POST /cms/blogs/2026-09/tags/multi-language/attach-to-lang-group Adjuntar una etiqueta de blog a un grupo multilingüe. > **Supported products** > **Required Scopes** # Create a new language variation Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/tags/multi-language/create-language-variation specs/2026-09/cms-tags-v2026-09.json POST /cms/blogs/2026-09/tags/multi-language/create-language-variation Crear una nueva variación de idioma a partir de una etiqueta de blog existente > **Supported products** > **Required Scopes** # Detach a tag from a multi-language group Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/tags/multi-language/detach-from-lang-group specs/2026-09/cms-tags-v2026-09.json POST /cms/blogs/2026-09/tags/multi-language/detach-from-lang-group Separar una etiqueta de blog de un grupo multilingüe. > **Supported products** > **Required Scopes** # Set a new primary language Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/tags/multi-language/set-new-lang-primary specs/2026-09/cms-tags-v2026-09.json PUT /cms/blogs/2026-09/tags/multi-language/set-new-lang-primary Establecer una etiqueta de blog como idioma principal de un grupo multilingüe. > **Supported products** > **Required Scopes** # Update languages of multi-language group Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/tags/multi-language/update-languages specs/2026-09/cms-tags-v2026-09.json POST /cms/blogs/2026-09/tags/multi-language/update-languages Establecer explícitamente nuevos idiomas para cada etiqueta de blog en un grupo multilingüe. > **Supported products** > **Required Scopes** # Update a tag Source: https://developers.hubspot.es/docs/api-reference/latest/cms/blogs/tags/update-tag specs/2026-09/cms-tags-v2026-09.json PATCH /cms/blogs/2026-09/tags/{objectId} Actualizaciones dispersas de un único objeto de etiqueta de blog identificado por el ID de la ruta. No es necesario especificar todos los valores de las columnas. Solo se pueden especificar los que necesitan ser modificados. > **Supported products** > **Required Scopes** # Export content audit logs Source: https://developers.hubspot.es/docs/api-reference/latest/cms/content-audit/export-content-audit specs/2026-09/cms-cms-content-audit-v2026-09.json POST /cms/audit-logs/2026-09/export Exporta los registros de auditoría del CMS según la configuración especificada. Este punto de terminación permite a los usuarios exportar registros en varios formatos, como XLS, XLSX o CSV. La solicitud requiere especificar detalles como el correo electrónico, el ID del portal y los ID de usuario del destinatario. Esto es útil para auditar y monitorear los cambios dentro del CMS. > **Supported products** > **Required Scopes** # Retrieve content audit logs Source: https://developers.hubspot.es/docs/api-reference/latest/cms/content-audit/get-content-audit specs/2026-09/cms-cms-content-audit-v2026-09.json GET /cms/audit-logs/2026-09 Recupera los registros de auditoría del CMS en tu cuenta de HubSpot. Este punto de terminación te permite filtrar registros por usuario, tipo de evento, tipo de objeto e ID de objeto. Admite paginación y clasificación, lo que facilita la navegación por grandes conjuntos de datos de registro. Usa este punto de terminación para monitorear cambios y actividades dentro de tu CMS. > **Supported products** > **Required Scopes** # API de auditoría de contenido de CMS Source: https://developers.hubspot.es/docs/api-reference/latest/cms/content-audit/guide > **[Run in Postman](https://app.getpostman.com/run-collection/26126890-30d22393-5cdf-4042-9b43-ca5e7bf0dab5)** > **Requisitos de ámbito** # Auditoría de contenido de CMS La API de auditoría de contenido del CMS te permite filtrar y ordenar cambios en el objeto contenido por tipo, período de tiempo o ID de usuario de HubSpot. Este punto de terminación solo está disponible en cuentas con una suscripción de ***CMS Hub** Enterprise*. **Ejemplo de uso:** averigua qué usuario realizó cambios más recientemente en una lista de páginas. ## Lista de tipos de eventos de CMS | Tipo de evento | Description | | - | - | | `CREADO` | Se creó un objeto. | | `ELIMINADO` | Se eliminó o se desconectó un objeto. | | `PUBLICADO` | Se publicó un objeto. | | `PUBLICACIÓN CANCELADA` | Se canceló la publicación de un objeto. | | `ACTUALIZADO` | Se actualizó un objeto. | ## Lista de tipos de objetos de CMS | Tipo de objeto | Description | | - | - | | `BLOG` | Cambios hechos a la configuración de tu blog en la configuración de tu cuenta. | | `BLOG_POST` | Publicaciones de blog asociadas a tus blogs. | | `CONTENT_SETTINGS` | Cambios hechos a la configuración de tu sitio web en la configuración de tu cuenta. Los valores que cambiaron aparecerán en la matriz `meta` JSON. | | `CTA` | Cambios hechos a tus [llamadas a la acción (CTA).](https://knowledge.hubspot.com/es/cta/get-started-with-calls-to-action-ctas) | | `DOMINIO` | Cambios hechos a los dominios conectados en tu configuración de Dominios y URL en la configuración de tu cuenta. | | `CORREO ELECTRÓNICO` | Cambios hechos en correos electrónicos en el editor de correo electrónico. | | `ARCHIVO` | Cambios hechos en archivos en la [herramienta Archivos](https://knowledge.hubspot.com/es/files/organize-edit-and-delete-files). | | `GLOBAL_MODULE` | Cambios hechos en los [módulos globales.](https://knowledge.hubspot.com/es/design-manager/make-changes-to-a-global-module-in-only-one-template) | | `HUBDB_TABLE` | Cambios hechos a tablas HubDB. | | `KNOWLEDGE_BASE` | Cambios hechos a la configuración de tu base de conocimientos en la configuración de tu cuenta. | | `KNOWLEDGE_BASE_ARTICLE` | Cambios hechos a artículos de la base de conocimientos en el editor de contenido. | | `LANDING_PAGE` | Cambios hechos a páginas de destino en el editor de contenido. | | `MÓDULO` | Cambios hechos a [módulos](/docs/cms/start-building/building-blocks/modules/overview). | | `SERVERLESS_FUNCTION` | Cambios hechos a [funciones sin servidor](/docs/cms/start-building/features/serverless-functions/overview). | | `PLANTILLA` | Cambios hechos a [plantillas](/docs/cms/start-building/building-blocks/templates/overview). | | `TEMA` | Cambios hechos a [Configuración de tema](https://knowledge.hubspot.com/es/website-and-landing-pages/edit-your-theme-settings) y cuándo se crearon los [Temas](https://knowledge.hubspot.com/es/website-and-landing-pages/edit-your-theme-settings). | | `URL_MAPPING` | Cambios hechos a tus redireccionamientos de URL en la configuración de Redireccionamientos de URL en la configuración de tu cuenta. | | `WEBSITE_PAGE` | Cambios hechos a páginas del sitio web en el editor de contenido. | # Retrieve a domain Source: https://developers.hubspot.es/docs/api-reference/latest/cms/domains/get-domain specs/2026-09/cms-domains-v2026-09.json GET /cms/domains/2026-09/{domainId} Devuelve un único dominio con el id especificado. > **Supported products** > **Required Scopes** # Retrieve all domains Source: https://developers.hubspot.es/docs/api-reference/latest/cms/domains/get-domains specs/2026-09/cms-domains-v2026-09.json GET /cms/domains/2026-09 Recupera una lista de los dominios de contenido asociados a tu cuenta de HubSpot. Este punto de terminación permite filtrar por marcas de tiempo de creación y actualización, ordenar y paginar. Es útil para gestionar y revisar los dominios configurados en tu CMS. > **Supported products** > **Required Scopes** # CMS API | Domain management Source: https://developers.hubspot.es/docs/api-reference/latest/cms/domains/guide # API del CMS | HubDB Source: https://developers.hubspot.es/docs/api-reference/latest/cms/hubdb/guide > **Requisitos de ámbito** HubDB es un almacén de datos relacional que presenta datos como filas, columnas y celdas en una tabla, muy parecido a una hoja de cálculo. Las tablas de HubDB se pueden agregar o modificar [dentro de tu cuenta de HubSpot](/docs/cms/start-building/features/storage/hubdb#create-a-hubdb-table), pero también puedes usar los puntos de terminación de API documentados aquí. Para obtener información sobre el uso de datos de tablas de HubDB en tu sitio web o en [correos electrónicos programables](/docs/cms/start-building/features/data-driven-content/emails-with-programmable-content), echa un vistazo [a la documentación para desarrolladores de CMS de HubSpot](/docs/cms/start-building/features/storage/hubdb). Al igual que las páginas del sitio web de HubSpot, las tablas de HubDB son compatibles con las versiones `draft` y `published`. Esto te permite actualizar los datos de la tabla, ya sea para realizar pruebas o para permitir un proceso de aprobación manual, sin que ello afecte a las páginas publicadas. Más información sobre [tablas en borrador vs. tablas en vivo](#draft-vs-live-tables). Si una tabla está configurada para [permitir el acceso público](https://knowledge.hubspot.com/website-and-landing-pages/create-and-hubdb-tables#manage-table-settings-cms-hub-professional-and-enterprise-only), puedes acceder a la versión publicada de la tabla y las filas sin ninguna autenticación especificando el ID de tu cuenta de HubSpot a través del parámetro de consulta `portalId`. Si estás migrando desde la versión 2 de la API de HubDB, obtén más información sobre los [cambios en la API actual (v3)](#changes-in-v3). > [!WARNING] > > ### Nota: > > Los puntos de terminación que admiten `GET` también admiten `CORS`, por lo que puedes acceder a los datos de una tabla del lado del cliente usando JavaScript y tu ID de cuenta. Otros métodos y el punto de terminación *Obtener todas las tablas* requieren autenticación y no son compatibles con `CORS`. ## Límites de tasa Las solicitudes de API de HubDB tienen diferentes límites de tasa, según el tipo de solicitud: * Las solicitudes `GET` realizadas que no requieren autentificación (incluidas las solicitudes de JavaScript del lado del cliente) están limitadas a 10 solicitudes por segundo. Estas solicitudes no contarán para el límite diario. * Todas las demás solicitudes [que utilizan la autenticación](https://developers.hubspot.es/docs/guides/api/oauth/tokens) siguen los [límites estándar](/docs/api-reference/overview). ## Tablas en borrador vs tablas en vivo Las tablas de HubDB tienen versiones en borrador y en vivo, y las versiones en vivo se pueden publicar o no publicar. Esto te permitirá actualizar los datos de la tabla, ya sea para vistas preliminares o pruebas de páginas, o para permitir un proceso de aprobación manual, sin afectar ninguna página activa. En esta API, se designan puntos de terminación separados para las versiones en borrador y publicadas de una tabla. Por ejemplo, puedes recuperar la versión publicada de una tabla haciendo una solicitud `GET` al siguiente punto de terminación: `/cms/v3/hubdb/tables/{tableIdOrName}` Y para recuperar cualquier contenido que haya sido redactado pero que aún no haya sido publicado, agregarías `/draft` al final de la URL: `/cms/v3/hubdb/tables/{tableIdOrName}/draft` Los datos en borrador se pueden revisar y luego enviar en HubSpot, o con el punto de terminación `/push-live`. Los datos en borrador también se pueden descartar a través del punto de terminación `/reset`, lo que te permite volver a la versión actual en vivo de los datos sin interrupciones. ## Crear una tabla de HubDB Para crear una tabla de HubDB, haz una solicitud `POST` a `/cms/v3/hubdb/tables`. En el cuerpo de la solicitud, especifica los siguientes campos obligatorios: | Campo | Tipo | Descripción | Ejemplo | | - | - | - | - | | `name` | Cadena | El nombre interno de la tabla. Este nombre no se puede cambiar una vez creada la tabla. Los nombres solo pueden incluir letras minúsculas, dígitos y guiones bajos y no pueden comenzar con un número. | `"name": "my_table"` | | `label` | Cadena | : La etiqueta de la tabla que ven los usuarios al editar la tabla en HubSpot. | `"label":"My table"` | Además, puedes especificar los siguientes campos opcionales: | Campo | Tipo | Descripción | Ejemplo | | - | - | - | - | | `useForPages` | Booleano | Si la tabla se puede utilizar para [la creación de páginas dinámicas](#configuring-hubdb-tables-for-dynamic-pages). | `"useForPages": false` | | `allowPublicAPIAccess` | Booleano | Si la tabla se puede leer sin autorización. | `"allowPublicApiAccess": false` | | `allowChildTables` | Booleano | Si se pueden crear tablas secundarias para la tabla. | `"allowChildTables": false` | | `enableChildTablePages` | Booleano | Si [las páginas dinámicas multinivel](/docs/cms/start-building/features/data-driven-content/hubdb/multilevel) deben crearse utilizando tablas secundarias. | `"enableChildTablePages": false` | | `columns` | Objeto | Las columnas de la tabla. Obtén más información sobre las propiedades de las columnas en las secciones [Agregar columnas de tabla](#add-table-columns) . | `See "Add table columns" section below` | Si aún no se han agregado columnas, tu solicitud de creación podría tener el siguiente aspecto: ```json theme={null} // Example request { "name": "test_table", "label": "Test Table", "useForPages": false, "allowPublicApiAccess": false, "allowChildTables": true, "enableChildTablePages": false, "columns": [] } ``` ### Agregar columnas a la tabla Cada columna en una tabla de HubDB se puede definir con las siguientes propiedades: | Campo | Tipo | Descripción | Ejemplo | | - | - | - | - | | `name` | Cadena | Obligatorio. El nombre interno de la columna. No se puede cambiar después de creada la columna. | `"name": "row_name"` | | `label` | Cadena | Opcional. La etiqueta para la columna que verán los usuarios al editar la tabla en HubSpot. | `"label": "Row label"` | | `type` | Cadena | El tipo de datos de la columna. Debe ser uno de los siguientes:
        • `TEXT`: un campo de texto.
        • `RICHTEXT`: un campo de texto que admite el formato HTML básico. No se recomienda para HTML sin procesar, ya que puede afectar si el HTML es editable en HubSpot. Editar el código en HubSpot también puede afectar la forma en que se renderiza el código.
        • `NUMBER`: un campo numérico.
        • `BOOLEAN`: representado como una casilla de verificación en HubSpot. Usar `0` para desmarcado y `1` para marcado.
        • `DATE`: almacena una fecha específica como una marca de tiempo de milisegundos establecida en la medianoche UTC.
        • `DATETIME`: almacena una fecha y una hora como una marca de tiempo de milisegundos.
        • `SELECT`: la columna solo se puede establecer en una de un conjunto de opciones. Consulta el campo `options` a continuación para las propiedades requeridas.
        • `MULTISELECT`: la columna se puede establecer en una o más de un conjunto de opciones. Consulta el campo `options` a continuación para las propiedades requeridas.
        • `LOCATION`: almacena una ubicación de latitud y longitud.
        • `IMAGE`: almacena la URL de una imagen.
        • `VIDEO`: almacena el ID del reproductor del video.
        • `FOREIGN_ID`: la columna hará referencia a una columna de otra tabla de HubDB. Además, debes definir la otra tabla de HubDB con las siguientes propiedades:
          • foreignTableId: el ID de la otra tabla de HubDB.
          • foreignColumnId: el ID de la columna en la otra tabla de HubDB.
        • `CURRENCY`: almacena el número como un valor de divisa.
        • `FILE`: almacena un archivo del archivo mánager. También deberá incluir un campo `fileType` para especificar si el campo puede almacenar todos los tipos de archivo (`FILE`) o sólo tipos de documento como PDF (`DOCUMENT`).
        | `"type": "type"` | | `options` | Objeto | : Una lista de opciones para las columnas de selección y selección múltiple. Cada opción se define con un `name` junto con un `type` igual a `option`. | `"option": [{"name":"Option 1", "type":"option"}, {"name": "Option 2", "type": "option"}]` | Usando los campos anteriores, tu solicitud para crear una nueva tabla de HubDB podría verse de la siguiente manera: ```json theme={null} // Example request { "label": "Test Table", "name": "test_table", "columns": [ { "name": "text_column", "label": "Text Column", "archived": false, "type": "TEXT" }, { "name": "number_column", "label": "Number Column", "archived": false, "type": "NUMBER" }, { "name": "multiselect", "label": "Multi Select Column", "archived": false, "type": "multiselect", "options": [ { "name": "Option 1", "type": "option" }, { "name": "Option 2", "type": "option" } ] } ], "useForPages": true, "allowChildTables": true, "enableChildTablePages": false, "allowPublicApiAccess": false } ``` Después de crear una tabla, a las columnas se les asignarán ID en orden ascendente. Al actualizar columnas existentes, incluye el campo `id` de la columna en el objeto de entrada. ### Agregar filas a la tabla Puedes agregar filas manualmente a través de la API, o puedes [importar filas desde un archivo CSV](#import-rows-from-csv). Para agregar filas a una tabla de HubDB, haz una solicitud `POST`a `/cms/v3/hubdb/tables/{tableIdOrName}/rows`. Para cada fila de la tabla, puedes incluir los siguientes campos: | Campo | Tipo | Descripción | Ejemplo | | - | - | - | - | | `values` | Objeto | : Una lista de pares clave-valor con el nombre de la columna y el valor que deseas agregarle. Si no deseas establecer un valor específico para una columna, puedes omitir el nombre de la columna de la lista de pares clave-valor. | `"values": { "text_column": "sample text", "number_column": 76}` | | `path` | Cadena | : En el caso de las tablas [habilitadas para páginas dinámicas](/docs/cms/start-building/features/data-driven-content/hubdb/overview), `path` es el sufijo de la ruta utilizado para la página creada para esta fila. | `"path": "example_url_path"` | | `name` | Cadena | : Para las tablas [habilitadas para páginas dinámicas](/docs/cms/start-building/features/data-driven-content/hubdb/overview), `name` es el título HTML utilizado para la página creada para esta fila. | `"name": "Example Title"` | | `childTableId` | Número | Al crear [páginas dinámicas de varios niveles](/docs/cms/start-building/features/data-driven-content/hubdb/multilevel), `childTableId` especifica el ID de la tabla secundaria. | `"childTableId": 123456` | Usando los campos anteriores, el cuerpo de tu solicitud puede tener un aspecto similar al siguiente: ```json theme={null} // Example request { "values": { "text_column": "sample text value", "number_column": 76, "rich_text_column": "This is a styled paragraph.", "date_column": 1591228800000, "date_time_column": 1604450520000, "boolean_column": 1, "select_column": { "name": "option 1", "type": "option" }, "multiselect_column": [ { "name": "Option 1", "type": "option" }, { "name": "Option 2", "type": "option" } ], "url_column": "https://www.hubspot.com/marketing", "video_column": 3392210008, "image_column": { "url": "https://f.hubspotusercontentqa00.net/hubfs/99992002/image3%20(1).jpg", "width": 1600, "height": 900, "type": "image" }, "foreign_id_column": [ { "id": "4364402239", "type": "foreignid" }, { "id": "4364402240", "type": "foreignid" } ] }, "path": "test_path", "name": "test_title", "childTableId": "1902373" } ``` ### Importar filas desde CSV Para importar datos a una tabla de HubDB desde un archivo CSV, realiza una solicitud `POST` a `/cms/v3/hubdb/tables/{tableIdOrName}/draft/import`. El punto de terminación de importación acepta una solicitud `multipart/form-data` `POST`: * `config`**:** un conjunto de opciones con formato JSON para la importación. * `file`**:** el archivo CSV que deseas importar. En `config`, incluye los siguientes campos como cadena JSON: | Campo | Tipo | Descripción | Ejemplo | | - | - | - | - | | `skipRows` | Número | El número de filas de encabezados que se deben omitir. El valor predeterminado de este campo es `1`, omitiendo la primera fila y tratándola como un título. Establécelo en `0` si todas las filas son datos válidos. | `"skipRows": 0` | | `separator` | Cadena | El delimitador de columna en el archivo CSV. Establecer en `","` de forma predeterminada. | `"separator": ","` | | `idSourceColumn` | Número | El índice de la columna del archivo de origen que contiene el ID de la fila (`hs_id`). Si se especifica esta columna, la importación actualizará las filas existentes en la tabla para los ID de fila coincidentes del archivo CSV. Esto es opcional y puedes ignorarlo la primera vez que importes datos a una tabla. Consulte la sección [Opciones de restablecimiento](#reset-options) a continuación para obtener información más detallada. | `"idSourceColumn": 1` | | `resetTable` | Booleano | El valor predeterminado es `false`, lo que significa que las filas de la tabla se actualizarán sin eliminar ninguna fila existente. Si se establece en `true`, las filas de la hoja de cálculo sobrescribirán los datos de la tabla, lo que significa que se eliminará cualquier fila de la tabla que no esté en la hoja de cálculo. Consulte la sección [Opciones de restablecimiento](#reset-options) a continuación para obtener información más detallada. | `"resetTable": true` | | `nameSourceColumn` | Número | Para las tablas [habilitadas para páginas dinámicas](/docs/cms/start-building/features/data-driven-content/hubdb/overview), `nameSourceColumn` especifica la columna del archivo CSV que contiene los `name` de la fila. Los números de las columnas están en orden ascendente, siendo la primera columna `1`. | `"nameSourcecolumn": 5` | | `pathSourceColumn` | Número | Para las tablas [habilitadas para páginas dinámicas](/docs/cms/start-building/features/data-driven-content/hubdb/overview), `pathSourceColumn` especifica la columna del archivo CSV que contiene los `path` de la fila. Los números de las columnas están en orden ascendente, siendo la primera columna `1`. | `"pathSourcecolumn": 6` | | `childTableSourceColumn` | Número | Especifica la columna del archivo CSV que contiene los `childTableId` de la fila. Los números de las columnas están en orden ascendente, siendo la primera columna `1`. | `"childTableSourcecolumn": 3` | | `columnMappings` | Matriz | Una lista de asignaciones de las columnas del archivo de origen a las columnas de la tabla de HubDB de destino. Cada asignación debe tener el siguiente formato: `{"source":1,"target”:"columnIdOrName"}`
        • **origen:** el índice de columna en el archivo de origen. Por ejemplo, `2` para la segunda columna.
        • **objetivo:** el ID o nombre de la columna de la tabla de HubDB. Puedes obtener el ID o el nombre de una columna [obteniendo los detalles de la tabla](#retrieve-hubdb-data).
        Si tu archivo tiene una columna`hs_id`, no deberías incluirla en `columnMappings`. En cambio, inclúyelo como `idSourceColumn` para actualizar las filas existentes. | `"columnMappings": [{"source":1, "target": 2}, {"source": 2, "target": "column_name"}]` | | `primaryKeyColumn` | Cadena | El nombre de una columna de la tabla de HubDB objetivo que se utilizará para la desduplicación. El ID de la columna no se puede utilizar para este campo. | `"primaryKeyColumn": "column_name"` | | `encoding` | Cadena | El tipo de codificación del archivo. Por ejemplo, `utf-8`, `ascii`, `iso-8859-2`, `iso-8859-5`, `iso-2022-jp`, `windows-1252`. | `"encoding": "utf-8"` | | `format` | Cadena | Solo se admiten archivos CSV. | `"format": "csv"` | Usando la tabla anterior, tu `config` JSON podría verse de la siguiente manera: ```json theme={null} // Example config JSON { "skipRows": 1, "separator": ",", "idSourceColumn": 1, "resetTable": false, "columnMappings": [ { "target": 1, "source": 2 }, { "target": 2, "source": "zip_code" } ], "primaryKeyColumn": "name", "encoding": "utf-8", "format": "csv" } ``` Si utilizas cURL, el comando podría tener el siguiente aspecto: ```shell theme={null} curl -L -X POST 'https://api.hubspotqa.com/hubdb/api/v2/tables/xxxxxx/import?portalId=xxxxxxx' \ -H 'Content-Type: multipart/form-data' \ -F 'config="{\"skipRows\":1,\"format\":\"csv\",\"separator\":\",\",\"encoding\":\"iso-8859-1\",\"columnMappings\":[{\"target\":1,\"source\":7},{\"target\":3,\"source\":8}],\"idSourceColumn\":1,\"pathSourceColumn\":null,\"nameSourceColumn\":null,\"childTableSourceColumn\":null,\"resetTable\":true}"' \ -F 'file=@"/Users/xxxxxxxxxxxxx/Downloads/filename.csv"' ``` ### Formato de fecha Hay varios formatos que puedes utilizar al importar datos a una columna de tipo fecha. **Enteros** * `yyyy/mm/dd` * `yyyy/mm/dd` * `mm/dd/yyyy` * `mm/dd/yy` Estos formatos requieren que el mes preceda al día (es decir, `dd/mm/yy` no se acepta). Los enteros pueden separarse con guiones (`-`) o barras diagonales (`/`). **Fechas relajadas** También puede importar formatos de fecha que estén menos estandarizados que las fechas basadas en números enteros. Por ejemplo:\*\* * `The 1st of March in the year 2022` * `Fri Mar 4 2022` * `March 4th '22` **Fechas relativas** HubSpot analizará los siguientes formatos de fecha en relación con el día actual:\*\* * `next Thursday` * `Today` * `tomorrow` * `3 days from now` ### Opciones de restablecimiento Al importar datos de un archivo CSV a una tabla de HubDB, puedes establecer el campo `resetTable` en `true` o `false` (por opción predeterminada) para administrar si los datos de la fila de HubDB se sobrescriben. * Si `resetTable` se establece en `true`: * Si las filas del archivo CSV no tienen una columna de ID de fila (`hs_id` o el ID de fila se especifica como `0`, esas filas se insertarán con los nuevos ID de fila generados. * Si los ID de fila del archivo CSV ya existen en la tabla objetivo, las filas existentes en la tabla se actualizarán con los nuevos valores de los archivos de entrada. * Si la tabla tiene filas pero el archivo CSV de entrada no tiene esos ID de fila, esas filas se eliminarán de la tabla objetivo. * Si los ID de fila del archivo CSV de entrada no existen en la tabla objetivo, esas filas se insertarán con los nuevos ID de fila generados y se ignorarán los ID de fila indicados en el archivo de entrada. * Si el archivo CSV de entrada no contiene la columna ID de fila, todas las filas se eliminarán de la tabla objetivo y las filas del archivo de entrada se insertarán con los nuevos ID de fila generados. * Si `resetTable` se establece en `false` (por opción predeterminada): * Si los ID de fila del archivo CSV ya existen en la tabla objetivo, las filas existentes en la tabla se actualizarán con los nuevos valores de los archivos de entrada. * Si la tabla tiene filas pero el archivo CSV de entrada no tiene esos ID de fila, esas filas *no* se eliminarán de la tabla objetivo y esas filas permanecerán sin cambios. * Si los ID de fila del archivo CSV de entrada no existen en la tabla objetivo, esas filas se insertarán con los nuevos ID de fila generados y se ignorarán los ID de fila indicados en el archivo de entrada. * Si las filas del archivo CSV no tienen una columna de ID de fila o el ID de fila se especifica como `0`, esas filas se insertarán con los nuevos ID de fila generados. ## Recuperar datos de HubDB Hay varias maneras de recuperar los datos de HubDB, dependiendo de si estás buscando detalles de la tabla o las filas de una tabla: * Para recuperar los detalles de la tabla de todas las tablas publicadas, haz una solicitud `GET` a `/cms/v3/hubdb/tables`. * Para recuperar los detalles de la tabla de una tabla publicada específica, realiza una solicitud `GET` a `/cms/v3/hubdb/tables{tableIdOrName}`. * Para recuperar todas las filas de una tabla específica, haz una solicitud `GET` a `/cms/v3/hubdb/tables{tableIdOrName}/rows`. * Para recuperar una fila específica de una tabla, haz una solicitud `GET` a `/cms/v3/hubdb/tables{tableIdOrName}/rows/{rowId}`. Cuando recuperes datos de filas, puedes filtrar y ordenar aún más los resultados. Si una tabla está configurada para [permitir el acceso público](https://knowledge.hubspot.com/website-and-landing-pages/create-and-hubdb-tables#manage-table-settings-cms-hub-professional-and-enterprise-only), puedes acceder a la versión publicada de la tabla y las filas sin ninguna autenticación especificando el ID de tu cuenta de HubSpot a través del parámetro de consulta `portalId`. ### Filtrar filas obtenidas Al recuperar datos de la tabla de HubDB, puedes aplicar filtros como parámetros de consulta para recibir datos específicos. Los parámetros de consulta de filtro se construyen de la siguiente manera: `columnName__operator`. Por ejemplo, si tienes una columna numérica denominada *bar*, puedes filtrar los resultados para incluir solo las filas en las que *bar* sea mayor que 10: `&bar__gt=10`. Todos los filtros se suman con Y (actualmente no se admiten filtros O). Al filtrar, ten en cuenta lo siguiente: * Al pasar valores para las columnas `multiselect`, los valores deben estar separados por comas (por ejemplo, `multiselect_column__contains=1,2`). * Para los filtros `datetime`, puedes utilizar fechas relativas en lugar de marcas de tiempo para especificar un valor relativo a la hora actual. Por ejemplo, `-3h` correspondería a la marca de tiempo 3 horas antes de ahora, mientras que `10s` correspondería a 10 segundos en el futuro. Las unidades de tiempo admitidas son ms (milisegundos), s (segundos), m (minutos), h (horas), d (días). La hora actual se puede utilizar especificando un valor cero: 0s A los efectos de estos filtros, la columna incorporada `hs_id` es una columna `number`, la columna `hs_created_at` es un `datetime`, y las columnas `hs_path` y `hs_name` son columnas `text`. A continuación, descubre qué operadores se pueden aplicar a qué tipos de columna: | Operador | Nombre | Descripción | | - | - | - | | `eq (or none)` | Es igual a | Todos los tipos de columna Este filtro se aplica si no se utiliza ningún operador. Cuando se utiliza con columnas de selección múltiple, devuelve filas que coinciden exactamente con los valores suministrados. | | `ne` | No es igual a | Todos los tipos de columna. | | `contains` | Contiene | Texto, texto enriquecido y selección múltiple. Cuando se utiliza con columnas de selección múltiple, devuelve filas que contienen todos los valores proporcionados. Este filtro distingue entre mayúsculas y minúsculas. | | `lt` | Menor que | Número, fecha y hora. | | `lte` | Menor que o igual a | Número, fecha y hora. | | `gt` | Mayor que | Número, fecha y hora. | | `gte` | Mayor que o igual a | Número, fecha y hora. | | `is_null` | Nulo | Todos los tipos de columna, excepto booleanos. Este filtro no requiere un valor (por ejemplo, `&exampleColumn__is_null=`). | | `not_null` | No nulo | Todos los tipos de columnas, excepto booleano. Este filtro no requiere un valor (por ejemplo, `&exampleColumn__not_null=`). | | `like` | Como | Texto y texto enriquecido. | | `not_like` | No como | Texto y texto enriquecido. | | `icontains` | Contiene | Texto y texto enriquecido. Este filtro no distingue entre mayúsculas y minúsculas. | | `startswith` | Comienza con | Texto y texto enriquecido. | | `in` | En | Número, seleccione y multiselección. Devuelve filas en las que la columna incluye al menos una de las opciones pasadas. Cuando no hay otro `sort` en el parámetro de consulta, los resultados se ordenarán en el orden en que se especifiquen los valores en el operador`in`. | ### Ordenar filas obtenidas Al recuperar datos de HubDB, puedes aplicar la ordenación como parámetro de consulta para determinar el orden de los datos obtenidos. Para ordenar los datos, agrega un parámetro de consulta `sort` y especifica el nombre de la columna: `&sort=columnName` De forma predeterminada, los datos se devolverán en el orden natural de la columna especificada. Puedes invertir la ordenación agregando un `-` al nombre de la columna: `&sort=-columnName` Puedes incluir este parámetro varias veces para ordenar por varias columnas. Además de ordenar por una columna, hay tres funciones que se pueden utilizar: * **geo\_distance(location\_column\_name, latitud, longitud):** toma el nombre de una columna de localización y las coordenadas, devuelve las filas ordenadas según la distancia entre el valor de la columna de localización especificada y las coordenadas proporcionadas. * **longitud(column\_name):** toma el nombre de una columna, devuelve las filas ordenadas por la longitud del valor de la columna (calculada como una cadena) * **random():** devuelve las filas en orden aleatorio. Estas funciones también admiten la ordenación inversa. Por ejemplo, la siguiente ordenación `geo_distance` devuelve primero los elementos que están más lejos: `sort=-geo_distance(location_column,42.37,-71.07)` ## Configurando tablas HubDB para páginas dinámicas Con CMS de HubSpot, puedes usar una tabla de HubDB como fuente de datos para [generar páginas dinámicas](/docs/cms/start-building/features/data-driven-content/hubdb/overview). Por ejemplo, puedes crear una tabla que contenga una fila para cada miembro de tu equipo ejecutivo, con columnas que contengan la información que desees mostrar en una página. Después de seleccionar esa tabla como fuente de datos dinámicos para una página, esa página generará un página de índice que muestra todas las filas como elementos de resumen, junto con páginas separadas para cada fila, similar a un página de índice de blog y páginas de publicación de blog. Para permitir que una tabla se seleccione como fuente de datos en el editor de contenido, deberás establecer `useForPage` en `true`. Opcionalmente, puedes incluir `dynamicMetaTags` para especificar qué columnas usar para los metadatos de cada página. > [!WARNING] > > \*\*Nota: \*\*cuando especifiques `dynamicMetaTags`, deberás asegurarte de que la página utilice etiquetas HubL `page_meta` en lugar de `content`. Más información en la [guía de páginas dinámicas](/docs/cms/start-building/features/data-driven-content/hubdb/overview). Por ejemplo, el código siguiente crearía una tabla que se puede usar para páginas dinámicas y especifica las tres columnas que se usarán para los metadatos de página. ```json theme={null} // Example POST request to create table { "name": "dynamic_page_table", "label": "Dynamic page table", "useForPages": true, "columns": [ { "name": "meta_description", "label": "Meta description", "archived": false, "type": "TEXT" }, { "name": "featured_image", "label": "Featured image", "archived": false, "type": "IMAGE" }, { "name": "canonical_url", "label": "Canonical URL", "archived": false, "type": "URL" } ], "dynamicMetaTags": { "DESCRIPTION": 1, "FEATURED_IMAGE_URL": 2, "LINK_REL_CANONICAL_URL": 3 } } ``` | Parámetro | Tipo | Descripción | | - | - | - | | `useForPages` | Booleano | Establecer en `true` para permitir que la tabla se utilice como fuente de datos para páginas dinámicas. | | `dynamicMetaTags` | Objeto | Especifica las columnas por ID que se utilizarán para los metadatos de cada página dinámica. Puede contener:
        • `DESCRIPTION`
        • `FEATURED_IMAGE_URL`
        • `LINK_REL_CANONICAL_URL`
        Para cualquier campo de metadatos no especificado, las páginas heredarán los valores respectivos de su página principal. | | `DESCRIPTION` | Número | El ID numérico de la columna que se utilizará para la metadescripción de cada página. | | `FEATURED_IMAGE_URL` | Número | El ID numérico de la columna que se utilizará para la URL de la imagen destacada de cada página. | | `LINK_REL_CANONICAL_URL` | Número | El ID numérico de la columna que se utilizará para la URL canónica de cada página. | ## Cambios en la v3 * Las tablas deben tener tanto `name` como `label`. Este nombre no se puede cambiar una vez creada la tabla. Los nombres solo pueden incluir letras minúsculas, dígitos y guiones bajos y no pueden comenzar con un número. Ambos `name` y `label` deben ser únicos en la cuenta. * La API admite tanto la tabla `id` como `name` las rutas URL. * `GET` Los puntos de terminación de fila devuelven la columna `name` en lugar de `id` en el campo`values`. Además, los puntos de terminación de fila `POST` / `PUT` / `PATCH` requieren una columna `name` en lugar de `id` en el campo`values`. * Los puntos de terminación de actualización de fila `PATCH` ahora aceptan actualizaciones dispersas, lo que significa que solo puedes especificar los valores de columna que necesita actualizar (mientras que tenías que especificar todos los valores de columna en las versiones anteriores). Al actualizar una columna con una lista de valores como multiselect, debes especificar la lista de todos los valores. Para eliminar el valor de una columna, debes especificar la columna con el valor como `null` en la solicitud. * Se han eliminado los puntos de terminación `get` / `update` / `delete` a una celda de fila en favor de los puntos de terminación de actualización de fila`PATCH`. * El punto de terminación de importación ahora admite un campo opcional `idSourceColumn` junto con los campos existentes en las opciones con formato JSON. Puedes utilizar este campo para especificar la columna del archivo csv que contiene los ID de fila. Para importar nuevas filas junto con los nuevos valores de las filas existentes, simplemente puedes especificar `0` como el id de fila para las nuevas filas y los id de fila válidos para las columnas existentes. Ver más detalles a continuación en la sección Importar. También puedes utilizar nombres o identificadores de columnas en el campo de destino de las asignaciones de columnas en las opciones con formato JSON. * Clonar el punto de terminación requiere un nuevo nombre y una nueva etiqueta. # Clone rows in batch Source: https://developers.hubspot.es/docs/api-reference/latest/cms/hubdb/rows/batch-clone-rows-draft specs/2026-09/cms-hubdb-v2026-09.json POST /cms/hubdb/2026-09/tables/{tableIdOrName}/rows/draft/batch/clone Clona filas de la versión en borrador de la tabla especificada, dado un conjunto de identificadores de fila. Un máximo de 100 ID de fila por llamada. > **Supported products** > **Required Scopes** # Create rows in batch Source: https://developers.hubspot.es/docs/api-reference/latest/cms/hubdb/rows/batch-create-rows-draft specs/2026-09/cms-hubdb-v2026-09.json POST /cms/hubdb/2026-09/tables/{tableIdOrName}/rows/draft/batch/create Crea filas en la versión en borrador de la tabla especificada, dada una secuencia de objetos de fila. Un máximo de 100 objetos de fila por llamada. Consulta la sección de resumen para obtener más detalles con un ejemplo. > **Supported products** > **Required Scopes** # Get a set of rows Source: https://developers.hubspot.es/docs/api-reference/latest/cms/hubdb/rows/batch-read-rows specs/2026-09/cms-hubdb-v2026-09.json POST /cms/hubdb/2026-09/tables/{tableIdOrName}/rows/batch/read Devuelve filas de la versión publicada de la tabla especificada, dado un conjunto de identificadores de fila. **Nota:** Se puede acceder a este punto de terminación sin autenticación si la tabla está configurada para permitir el acceso público. > **Supported products** > **Required Scopes** # Get a set of rows from draft table Source: https://developers.hubspot.es/docs/api-reference/latest/cms/hubdb/rows/batch-read-rows-draft specs/2026-09/cms-hubdb-v2026-09.json POST /cms/hubdb/2026-09/tables/{tableIdOrName}/rows/draft/batch/read Devuelve filas de la versión en borrador de la tabla especificada, dado un conjunto de identificadores de fila. > **Supported products** > **Required Scopes** # Replace rows in batch in draft table Source: https://developers.hubspot.es/docs/api-reference/latest/cms/hubdb/rows/batch-replace-rows-draft specs/2026-09/cms-hubdb-v2026-09.json POST /cms/hubdb/2026-09/tables/{tableIdOrName}/rows/draft/batch/replace Reemplaza múltiples filas como un lote en la versión en borrador de la tabla, con un máximo de 100 filas por llamada. Consulta el punto de terminación "PUT /tables/{tableIdOrName}/rows/{rowId}/draft" para obtener detalles sobre cómo actualizar una única fila. > **Supported products** > **Required Scopes** # Update rows in batch in draft table Source: https://developers.hubspot.es/docs/api-reference/latest/cms/hubdb/rows/batch-update-rows specs/2026-09/cms-hubdb-v2026-09.json POST /cms/hubdb/2026-09/tables/{tableIdOrName}/rows/draft/batch/update Actualiza múltiples filas como un lote en la versión en borrador de la tabla, con un máximo de 100 filas por llamada. Consulta el punto de terminación "PATCH /tables/{tableIdOrName}/rows/{rowId}/draft" para obtener detalles sobre cómo actualizar una única fila. > **Supported products** > **Required Scopes** # Clone a row Source: https://developers.hubspot.es/docs/api-reference/latest/cms/hubdb/rows/clone-row-draft specs/2026-09/cms-hubdb-v2026-09.json POST /cms/hubdb/2026-09/tables/{tableIdOrName}/rows/{rowId}/draft/clone Clona una única fila en la versión en borrador de la tabla. > **Supported products** > **Required Scopes** # Add a new row to a table Source: https://developers.hubspot.es/docs/api-reference/latest/cms/hubdb/rows/create-row specs/2026-09/cms-hubdb-v2026-09.json POST /cms/hubdb/2026-09/tables/{tableIdOrName}/rows Agrega una nueva fila a una tabla de HubDB. Las filas nuevas se agregarán a la versión en borrador de la tabla. Utiliza el punto de terminación "/publish" para aplicar estos cambios a la versión publicada. > **Supported products** > **Required Scopes** # Permanently deletes a row Source: https://developers.hubspot.es/docs/api-reference/latest/cms/hubdb/rows/delete-hubdb-draft specs/2026-09/cms-hubdb-v2026-09.json DELETE /cms/hubdb/2026-09/tables/{tableIdOrName}/rows/{rowId}/draft Elimina permanentemente una fila de la versión en borrador de una tabla. > **Supported products** > **Required Scopes** # Permanently deletes rows Source: https://developers.hubspot.es/docs/api-reference/latest/cms/hubdb/rows/delete-row-draft specs/2026-09/cms-hubdb-v2026-09.json POST /cms/hubdb/2026-09/tables/{tableIdOrName}/rows/draft/batch/purge Elimina permanentemente filas de la versión en borrador de la tabla, dado un conjunto de identificadores de fila. Un máximo de 100 ID de fila por llamada. > **Supported products** > **Required Scopes** # Get a row from the draft table Source: https://developers.hubspot.es/docs/api-reference/latest/cms/hubdb/rows/get-hubdb-draft specs/2026-09/cms-hubdb-v2026-09.json GET /cms/hubdb/2026-09/tables/{tableIdOrName}/rows/{rowId}/draft Obtén una única fila de la versión en borrador de una tabla por ID. > **Supported products** > **Required Scopes** # Get a table row Source: https://developers.hubspot.es/docs/api-reference/latest/cms/hubdb/rows/get-row specs/2026-09/cms-hubdb-v2026-09.json GET /cms/hubdb/2026-09/tables/{tableIdOrName}/rows/{rowId} Obtén una única fila de la versión publicada de una tabla por ID. **Nota:** Se puede acceder a este punto de terminación sin autenticación, si la tabla está configurada para permitir el acceso público. > **Supported products** > **Required Scopes** # Get rows for a table Source: https://developers.hubspot.es/docs/api-reference/latest/cms/hubdb/rows/get-rows specs/2026-09/cms-hubdb-v2026-09.json GET /cms/hubdb/2026-09/tables/{tableIdOrName}/rows Devuelve un conjunto de filas de la versión publicada de la tabla especificada. Los resultados de las filas se pueden filtrar y ordenar. Las opciones para filtrar y ordenar se enviarán como parámetros de consulta a la solicitud de la API. Por ejemplo, al agregar los parámetros de consulta "column1__gt=5&sort=-column1", la API devuelve las filas con valores de la columna "column1" mayores que 5 y en el orden descendente de los valores de "column1". Consulta la [sección de resumen](https://developers.hubspot.com/docs/api/cms/hubdb#filtering-and-sorting-table-rows) para obtener información detallada acerca de las opciones para filtrar y ordenar. **Nota:** Se puede acceder a este punto de terminación sin autenticación, si la tabla está configurada para permitir el acceso público. > **Supported products** > **Required Scopes** # Get rows from draft table Source: https://developers.hubspot.es/docs/api-reference/latest/cms/hubdb/rows/get-rows-draft specs/2026-09/cms-hubdb-v2026-09.json GET /cms/hubdb/2026-09/tables/{tableIdOrName}/rows/draft Devuelve filas de la versión en borrador de la tabla especificada. Los resultados de las filas se pueden filtrar y ordenar. Las opciones para filtrar y ordenar se enviarán como parámetros de consulta a la solicitud de la API. Por ejemplo, al agregar los parámetros de consulta "column1__gt=5&sort=-column1", la API devuelve las filas con valores de la columna "column1" mayores que 5 y en el orden descendente de los valores de "column1". Consulta la [sección de resumen](https://developers.hubspot.com/docs/api/cms/hubdb#filtering-and-sorting-table-rows) para obtener información detallada acerca de las opciones para filtrar y ordenar. > **Supported products** > **Required Scopes** # Replaces an existing row Source: https://developers.hubspot.es/docs/api-reference/latest/cms/hubdb/rows/update-hubdb-draft specs/2026-09/cms-hubdb-v2026-09.json PUT /cms/hubdb/2026-09/tables/{tableIdOrName}/rows/{rowId}/draft Reemplaza una única fila en la versión en borrador de la tabla. Deben especificarse todos los valores de las columnas. Si una columna tiene un valor en la tabla de destino y ese valor no se define en esta solicitud, se eliminará. Consulta el punto de terminación "Crear una fila" para obtener instrucciones sobre cómo dar formato a las definiciones de fila JSON. > **Supported products** > **Required Scopes** # Updates an existing row Source: https://developers.hubspot.es/docs/api-reference/latest/cms/hubdb/rows/update-hubdb-draft-rowId specs/2026-09/cms-hubdb-v2026-09.json PATCH /cms/hubdb/2026-09/tables/{tableIdOrName}/rows/{rowId}/draft Actualiza parcialmente una única fila en la versión en borrador de la tabla. No es necesario especificar todos los valores de las columnas. Solo se pueden especificar las columnas o campos que se deben modificar. Consulta el punto de terminación "Crear una fila" para obtener instrucciones sobre cómo dar formato a las definiciones de fila JSON. > **Supported products** > **Required Scopes** # Clone a table Source: https://developers.hubspot.es/docs/api-reference/latest/cms/hubdb/tables/clone-table-draft specs/2026-09/cms-hubdb-v2026-09.json POST /cms/hubdb/2026-09/tables/{tableIdOrName}/draft/clone Clona una tabla de HubDB existente. El "newName" y "newLabel" de la nueva tabla se pueden enviar como JSON en el cuerpo de la solicitud. Esto creará la tabla clonada como un borrador. > **Supported products** > **Required Scopes** # Create a table Source: https://developers.hubspot.es/docs/api-reference/latest/cms/hubdb/tables/create-table specs/2026-09/cms-hubdb-v2026-09.json POST /cms/hubdb/2026-09/tables Crea una nueva tabla de borrador de HubDB dado un esquema JSON. El nombre y la etiqueta de la tabla deben ser únicos para cada cuenta. > **Supported products** > **Required Scopes** # Archive a table Source: https://developers.hubspot.es/docs/api-reference/latest/cms/hubdb/tables/delete-table specs/2026-09/cms-hubdb-v2026-09.json DELETE /cms/hubdb/2026-09/tables/{tableIdOrName} Archivar (eliminar suavemente) una tabla de HubDB existente. Esto archiva tanto las versiones publicadas como las de borrador. > **Supported products** > **Required Scopes** # Delete a table version Source: https://developers.hubspot.es/docs/api-reference/latest/cms/hubdb/tables/delete-table-version specs/2026-09/cms-hubdb-v2026-09.json DELETE /cms/hubdb/2026-09/tables/{tableIdOrName}/versions/{versionId} Eliminar una versión específica de una tabla > **Supported products** > **Required Scopes** # Export a published version of a table Source: https://developers.hubspot.es/docs/api-reference/latest/cms/hubdb/tables/export-table specs/2026-09/cms-hubdb-v2026-09.json GET /cms/hubdb/2026-09/tables/{tableIdOrName}/export Exporta la versión publicada de una tabla en un formato especificado. > **Supported products** > **Required Scopes** # Export a draft table Source: https://developers.hubspot.es/docs/api-reference/latest/cms/hubdb/tables/export-table-draft specs/2026-09/cms-hubdb-v2026-09.json GET /cms/hubdb/2026-09/tables/{tableIdOrName}/draft/export Exporta la versión en borrador de una tabla al formato CSV / EXCEL. > **Supported products** > **Required Scopes** # Return all draft tables Source: https://developers.hubspot.es/docs/api-reference/latest/cms/hubdb/tables/get-hubdb-draft specs/2026-09/cms-hubdb-v2026-09.json GET /cms/hubdb/2026-09/tables/draft Devuelve los detalles de cada tabla de borrador definida en la cuenta especificada, incluyendo las definiciones de columnas. > **Supported products** > **Required Scopes** # Get details for a draft table Source: https://developers.hubspot.es/docs/api-reference/latest/cms/hubdb/tables/get-hubdb-draft-tableIdOrName specs/2026-09/cms-hubdb-v2026-09.json GET /cms/hubdb/2026-09/tables/{tableIdOrName}/draft Obtén los detalles de la versión en borrador de una tabla específica de HubDB. Esto incluirá las definiciones de las columnas de la tabla y el número de filas de la tabla. > **Supported products** > **Required Scopes** # Get details of a published table Source: https://developers.hubspot.es/docs/api-reference/latest/cms/hubdb/tables/get-table specs/2026-09/cms-hubdb-v2026-09.json GET /cms/hubdb/2026-09/tables/{tableIdOrName} Devuelve los detalles de la versión publicada de la tabla especificada. Esto incluirá las definiciones de las columnas de la tabla y el número de filas de la tabla. **Nota:** Se puede acceder a este punto de terminación sin autenticación si la tabla está configurada para permitir el acceso público. Para ello, deberás incluir el ID de la cuenta de HubSpot en un parámetro de consulta "portalId". > **Supported products** > **Required Scopes** # Get all published tables Source: https://developers.hubspot.es/docs/api-reference/latest/cms/hubdb/tables/get-tables specs/2026-09/cms-hubdb-v2026-09.json GET /cms/hubdb/2026-09/tables Devuelve los detalles de la versión publicada de cada tabla definida en una cuenta, incluyendo las definiciones de columnas. > **Supported products** > **Required Scopes** # Import data into draft table Source: https://developers.hubspot.es/docs/api-reference/latest/cms/hubdb/tables/import-table-draft specs/2026-09/cms-hubdb-v2026-09.json POST /cms/hubdb/2026-09/tables/{tableIdOrName}/draft/import Importa el contenido de un archivo CSV a una tabla de HubDB existente. Los datos siempre se importarán a la versión en borrador de la tabla. Utiliza el punto de terminación "/publish" para aplicar estos cambios a la versión publicada. Este punto de terminación acepta una solicitud POST de múltiples partes. La primera parte será un conjunto de opciones con formato JSON para la importación y puedes especificarlo con el nombre "config". La segunda parte será el archivo CSV que deseas importar y puedes especificarlo con el nombre "file". Consulta la [sección de resumen](https://developers.hubspot.com/docs/api/cms/hubdb#importing-tables) para verificar los detalles y el formato de las opciones con formato JSON para la importación. > **Supported products** > **Required Scopes** # Publish a table from draft Source: https://developers.hubspot.es/docs/api-reference/latest/cms/hubdb/tables/publish-table-draft specs/2026-09/cms-hubdb-v2026-09.json POST /cms/hubdb/2026-09/tables/{tableIdOrName}/draft/publish Publica la tabla mediante la copia de los datos y los cambios en el esquema de la tabla de la versión de borrador a la versión publicada, lo que significa que se actualizarán todas las páginas web que utilicen datos de la tabla. > **Supported products** > **Required Scopes** # Reset a table draft Source: https://developers.hubspot.es/docs/api-reference/latest/cms/hubdb/tables/reset-table-draft specs/2026-09/cms-hubdb-v2026-09.json POST /cms/hubdb/2026-09/tables/{tableIdOrName}/draft/reset Reemplaza los datos de la versión en borrador de la tabla por los valores de la versión publicada. Cualquier cambio no publicado en la versión en borrador se perderá después de realizar esta llamada. > **Supported products** > **Required Scopes** # Unpublish a table Source: https://developers.hubspot.es/docs/api-reference/latest/cms/hubdb/tables/unpublish-table specs/2026-09/cms-hubdb-v2026-09.json POST /cms/hubdb/2026-09/tables/{tableIdOrName}/unpublish Cancela la publicación de la tabla, lo que significa que las páginas web que utilicen datos de la tabla no mostrarán ningún dato. > **Supported products** > **Required Scopes** # Update an existing table Source: https://developers.hubspot.es/docs/api-reference/latest/cms/hubdb/tables/update-hubdb-draft specs/2026-09/cms-hubdb-v2026-09.json PATCH /cms/hubdb/2026-09/tables/{tableIdOrName}/draft Actualiza una tabla de HubDB existente. Puedes utilizar este punto de terminación para agregar o eliminar columnas de la tabla, así como para restaurar una tabla archivada. En las tablas que se actualicen utilizando el punto de terminación, solo se modificará la versión en borrador de la tabla. Utiliza el punto de terminación "/publish" para aplicar todos los cambios a la versión publicada. Para restaurar una tabla, incluye el parámetro de consulta "archived=true" y ""archived": false" en el cuerpo del json. **Nota:** Debes incluir todas las columnas en la entrada cuando estés agregando/eliminando/actualizando una columna. Si no incluyes una columna ya existente en la solicitud, esa columna se eliminará. > **Supported products** > **Required Scopes** # Batch create properties Source: https://developers.hubspot.es/docs/api-reference/latest/cms/media-bridge/batch/create-properties specs/2026-09/cms-media-bridge-v2026-09.json POST /media-bridge/2026-09/{appId}/properties/{objectType}/batch/create Crea varias propiedades en lote para un tipo de objeto específico dentro de una aplicación determinada. Este punto de conexión es útil para configurar varias propiedades de forma eficiente a la vez, lo que reduce la necesidad de múltiples llamadas a la API. > **Supported products** > **Required Scopes** # Batch archive properties Source: https://developers.hubspot.es/docs/api-reference/latest/cms/media-bridge/batch/delete-properties specs/2026-09/cms-media-bridge-v2026-09.json POST /media-bridge/2026-09/{appId}/properties/{objectType}/batch/archive Archiva varias propiedades para un tipo de objeto específico dentro de una aplicación determinada. Este punto de conexión es útil para gestionar grandes conjuntos de propiedades que ya no se necesitan o que deben ocultarse del uso activo. Requiere especificar el ID de la aplicación y el tipo de objeto en los parámetros de la ruta. > **Supported products** > **Required Scopes** # Batch read properties Source: https://developers.hubspot.es/docs/api-reference/latest/cms/media-bridge/batch/get-properties specs/2026-09/cms-media-bridge-v2026-09.json POST /media-bridge/2026-09/{appId}/properties/{objectType}/batch/read Obtén un lote de propiedades para un tipo de objeto específico dentro de una aplicación determinada. Este punto de conexión es útil para obtener varias propiedades de manera eficiente en una sola solicitud, especialmente cuando se trabaja con grandes conjuntos de datos o cuando se necesitan propiedades específicas para su procesamiento. > **Supported products** > **Required Scopes** # Create Event Source: https://developers.hubspot.es/docs/api-reference/latest/cms/media-bridge/events/attention-span specs/2026-09/cms-media-bridge-v2026-09.json POST /media-bridge/2026-09/events/attention-span Crea un nuevo evento de tiempo de atención en MediaBridgeService. Este punto de conexión se usa para registrar eventos de tiempo de atención, lo que puede ser útil para hacer seguimiento de la interacción del usuario con el contenido multimedia. La solicitud debe incluir un cuerpo JSON válido que cumpla con el esquema AttentionSpanEventRequest. > **Supported products** > **Required Scopes** # Create Source: https://developers.hubspot.es/docs/api-reference/latest/cms/media-bridge/events/media-played specs/2026-09/cms-media-bridge-v2026-09.json POST /media-bridge/2026-09/events/media-played Crea un evento de reproducción de contenido multimedia en la cuenta de HubSpot. Este punto de conexión se usa para registrar cuándo se ha reproducido contenido multimedia, lo que puede ser útil para hacer un seguimiento de la interacción del usuario con los recursos multimedia. > **Supported products** > **Required Scopes** # Record Media Played Percentage Source: https://developers.hubspot.es/docs/api-reference/latest/cms/media-bridge/events/media-played-percent specs/2026-09/cms-media-bridge-v2026-09.json POST /media-bridge/2026-09/events/media-played-percent Este punto de conexión te permite registrar el porcentaje de contenido multimedia que se ha reproducido. Es útil para hacer un seguimiento de la interacción del usuario con el contenido multimedia, como videos o archivos de audio, al capturar hasta qué punto se ha consumido. Estos datos se pueden usar para analíticas y para mejorar las estrategias de entrega de contenido. > **Supported products** > **Required Scopes** # API del CMS | Centro multimedia Source: https://developers.hubspot.es/docs/api-reference/latest/cms/media-bridge/guide > **Requisitos de ámbito** La API del centro multimedia permite a los integradores insertar objetos multimedia como archivos de video y audio, y datos de consumo de medios en HubSpot. También crea las siguientes características en la cuenta de HubSpot del usuario: * Módulos para insertar objetos multimedia en los editores de arrastrar y soltar de HubSpot para páginas y correos electrónicos. * Eventos de la cronología del CRM que se muestran cuando los prospectos o clientes han interactuado con videos, audio y otros tipos de medios. * Listas segmentadas para experiencias específicas y personalizadas. * Workflows para automatizar interacciones basadas en eventos de consumo de contenido multimedia. * Informes para medir el impacto de los recursos multimedia. El centro multimedia utiliza tanto [objetos personalizados](/docs/api-reference/crm-custom-objects-v3/guide) y eventos unificados, el sistema de seguimiento de eventos de HubSpot. Esto significa que puedes usar tanto la API del centro multimedia como la API de objetos personalizados para crear tu integración. ## Usar la API del centro multimedia Necesitas una [cuenta de desarrollador de HubSpot](https://developers.hubspot.es/get-started) para registrar tu aplicación del centro multimedia y configurar las definiciones iniciales de objetos multimedia antes de conectar tu aplicación a la cuenta de un usuario de HubSpot. ## Crear y personalizar las definiciones de objetos multimedia Para definir un objeto multimedia, realiza una solicitud `POST` a `/media-bridge/v1/{appId}/settings/object-definitions`. En el cuerpo de la solicitud, incluye cualquiera de los siguientes valores de tipo de medio `mediaTypes` dentro de la matriz: `VIDEO`, `AUDIO`, `DOCUMENT`, `IMAGE` o `OTHER`. Después de definir los objetos multimedia, crea y modifica las propiedades del objeto multimedia realizando una solicitud `PATCH` a `/media-bridge/v1/{appId}/schemas/{objectType}` y una solicitud `POST` a `/media-bridge/v1/{appId}/properties/{objectType}`. ## Conectar la aplicación del centro multimedia con la cuenta de un usuario de HubSpot Para conectar tu aplicación del centro multimedia con la cuenta de un usuario de HubSpot, debes crear una definición de aplicación en tu cuenta de desarrollador de HubSpot para la aplicación. Las definiciones de la aplicación incluyen: * Detalles como el logotipo y el texto que se mostrarán al usuario de HubSpot cuando tu integración intente realizar una conexión inicial a su cuenta. * Permisos que tu integración necesita en la cuenta de HubSpot del usuario. Para conectar tu aplicación del centro multimedia con la cuenta de un usuario de HubSpot: * Crea una [definición de aplicación](/docs/apps/legacy-apps/overview) en tu cuenta de desarrollador para la aplicación del centro multimedia. * Incluye los siguientes permisos al definir tu aplicación: * `media_bridge.read` * `media_bridge.write` * Utiliza la autenticación [OAuth](/docs/api-reference/auth-oauth-v1/guide) al autenticar las llamadas realizadas por tu aplicación. Consulta más información sobre los [métodos de autenticación](/docs/apps/developer-platform/build-apps/authentication/overview). Para verificar que la aplicación está instalada correctamente en la cuenta de HubSpot del cliente: * Visita `https://app.hubspot.com/media-bridge-demo/{HubID}`, y reemplaza el `{HubID}` con el ID de la cuenta. * En la esquina superior derecha, haz clic en el menú desplegable **Aplicación** y selecciona la **aplicación del centro multimedia**. * En la aplicación, puedes ver los tipos de medios compatibles de la aplicación y crear elementos multimedia de ejemplo. Una vez que la aplicación del centro multimedia se ha instalado en la cuenta de HubSpot del cliente, puedes: * [Crear objetos multimedia](#create-your-media-objects) * [Crear módulos del CMS para insertar tus objetos de medios](#create-cms-modules-to-embed-media) * [Enviar eventos multimedia](#send-your-media-events) ## Crear objetos multimedia Después de crear las definiciones de objetos multimedia e instalar tu aplicación del centro multimedia en la cuenta de un usuario, puedes usar el [token OAuth](/docs/apps/legacy-apps/authentication/working-with-oauth) para crear y modificar objetos multimedia en la cuenta. Como los objetos multimedia son objetos personalizados, usa los [endpoints de la API de objetos personalizados](/docs/api-reference/crm-custom-objects-v3/guide#tab-2) para crearlos: * Haz una solicitud `GET` a `/media-bridge/v1/{appId}/settings/object-definitions/{mediaType}` para encontrar `objectType`. * Haz una solicitud `POST` a `/crm/v3/objects/{objectType}` para crear el objeto multimedia en la cuenta del usuario. Un objeto multimedia representa un fragmento de contenido de inserción en un sistema de terceros. Una vez que se agrega un objeto multimedia al centro multimedia, se puede insertar en el contenido del CMS de HubSpot y asociarlo con eventos multimedia. Para los objetos multimedia `VIDEO` y `AUDIO`, las siguientes tablas enumeran todas las propiedades disponibles: Los campos marcados con \* son obligatorios. | Parámetro | Tipo | Descripción | | - | - | - | | `id` | Número | Un ID utilizado para identificar el contenido multimedia específico en el sistema del centro multimedia de HubSpot. Esto se autogenera por HubSpot y no pueden configurarlo los desarrolladores. | | `hs_duration` | Número | La duración del contenido multimedia en milisegundos. | | `hs_oembed_url`\* | Cadena | Una URL que debe devolver una respuesta válida oEmbed que sigue la [especificación oEmbed.](https://oembed.com/#section2) Requiere un tipo `video` o `rich` con un iframe en `html`. | | `hs_file_url` | Cadena | La URL del archivo multimedia sin formato. Esto puede utilizarse en el futuro para permitir la inserción en redes sociales. | | `hs_thumbnail_url` | Cadena | URL de una imagen utilizada como miniatura para insertar los elementos multimedia en el contenido. El tamaño ideal para esta miniatura es de 640x480 píxeles. | | `hs_poster_url` | Cadena | URL de una imagen que representa el contenido multimedia. Esta imagen debe tener las mismas dimensiones que los medios originales y se puede usar en los lugares donde se necesita un parámetro de sustitución de imagen (por ejemplo, cuando se inserta el contenido multimedia en un correo electrónico). | | `hs_external_id` | Cadena | El ID del contenido multimedia en el sistema de terceros. Esto les da a los integradores la capacidad de recuperar medios del centro multimedia según el ID que usan en su propio sistema. (Este es el endpoint de API que utiliza este mapeo) | | `hs_folder_path` | Cadena | Una ruta suministrada por el proveedor al objeto, destinada a representar la ubicación del objeto en el sistema de carpetas del tercero (si existe). HubSpot intentará representar la estructura de directorios al mostrar estos objetos al usuario, pero puede anidar los objetos y carpetas de cada proveedor dentro de una carpeta de nivel superior con el nombre del proveedor. | | `hs_title`\* | Cadena | El nombre del contenido multimedia. Esto se mostrará dentro de la interfaz de usuario de HubSpot en lugares como el selector de medios. | | `hs_details_page_link` | Cadena | Una URL que permite a un usuario ver los elementos multimedia o interactuar con ellos en el sistema del proveedor de elementos multimedia. Esto se utiliza en la interfaz de usuario de HubSpot para dar a los usuarios la capacidad de identificar el contenido multimedia sin depender solo del título. | Para los objetos multimedia `IMAGE`, las siguientes tablas muestran todas las propiedades disponibles: Los campos marcados con \* son obligatorios. | Parámetro | Tipo | Descripción | | - | - | - | | `id` | Número | Un ID utilizado para identificar el contenido multimedia específico en el sistema del centro multimedia de HubSpot. Esto se autogenera por HubSpot y no pueden configurarlo los desarrolladores. | | `hs_oembed_url`\* | Cadena | Una URL que debe devolver una respuesta válida oEmbed que sigue la [especificación oEmbed.](https://oembed.com/#section2) Requiere un tipo `video` o `rich` con un iframe en `html`. | | `hs_file_url`\* | Cadena | La URL del archivo de medios sin formato. Esto puede utilizarse en el futuro para permitir la inserción en redes sociales. | | `hs_thumbnail_url` | Cadena | URL de una imagen que se usará como miniatura al insertar contenido multimedia en ubicaciones como el selector de contenido. El tamaño ideal para esta miniatura es de 640x480 píxeles. | | `hs_poster_url` | Cadena | URL de una imagen que representa el contenido multimedia. Esta imagen debe tener las mismas dimensiones que los medios originales y se puede usar en los lugares donde se necesita un parámetro de sustitución de imagen (por ejemplo, cuando se inserta el contenido multimedia en un correo electrónico). | | `hs_external_id` | Cadena | El ID del contenido multimedia en el sistema de terceros. Esto les da a los integradores la capacidad de recuperar medios del centro multimedia según el ID que usan en su propio sistema. (Este es el endpoint de API que utiliza este mapeo) | | `hs_folder_path` | Cadena | Una ruta suministrada por el proveedor al objeto, destinada a representar la ubicación del objeto en el sistema de carpetas del tercero (si existe). HubSpot intentará representar la estructura de directorios al mostrar estos objetos al usuario, pero puede anidar los objetos y carpetas de cada proveedor dentro de una carpeta de nivel superior con el nombre del proveedor. | | `hs_title`\* | Cadena | El nombre del contenido multimedia. Esto se mostrará dentro de la interfaz de usuario de HubSpot en lugares como el selector de medios. | | `hs_details_page_link` | Cadena | Una URL que permite a un usuario ver el contenido multimedia o interactuar con ellos en el sistema del proveedor de medios. Esto se utiliza en la interfaz de usuario de HubSpot para dar a los usuarios la capacidad de identificar el contenido multimedia sin depender solo del título. | ## Crear módulos del CMS para insertar elementos multimedia Cada proveedor de aplicación del centro multimedia es responsable de crear su propio [módulo](/docs/cms/start-building/building-blocks/modules/overview) para renderizar su contenido multimedia en el CMS de HubSpot. Cuando se instala una aplicación del centro multimedia en una cuenta de HubSpot, el [campo insertar](/docs/cms/reference/fields/module-theme-fields#embed) en el módulo tiene un tipo de origen de *integración de elementos multimedia* adicional. Esto le permite al usuario seleccionar elementos multimedia de la aplicación instalada para insertarlos en la página de su sitio web. Después de que el usuario selecciona el elemento multimedia específico que se va a insertar, el contenido multimedia `oembed_url` y `oembed_response` están disponibles en HubL para renderizar fácilmente los reproductores. Adicionalmente, el `id` y el `media_type` del contenido multimedia seleccionado se almacenan para habilitar la consulta del objeto del CRM subyacente a través de la función `crm_objects` de HubL. Esto se puede usar para extraer cualquiera o todas las propiedades que son parte de un objeto multimedia. Un ejemplo de uso de la función HubL crm\_objects con un objeto multimedia donde los ID son **459** y **922**: `{% set objects = crm_objects("a123_Videos", [459,922]) %} {{ objects }}` Para buscar una imagen específica con el mismo objeto: `{% set object = crm_object("a123_Images", 459) %} {{ object }}` Las aplicaciones pueden buscar el tipo de objeto ("a123\_Videos" en el ejemplo) haciendo una solicitud `GET` a `/media-bridge/{appId}/settings/object-definitions/{mediaType}`. Los desarrolladores deben usar los endpoints de la [API del código origen del CMS](/docs/api-reference/cms-source-code-v3/guide) para insertar su código de módulo personalizado en las cuentas de los clientes una vez que los clientes se hayan conectado a través de oAuth. Una vez que el código del módulo se introduce en la cuenta del cliente, automáticamente podrán comenzar a usar el módulo del desarrollador en su contenido. ### Configurar un dominio oEmbed Para utilizar la función HubL [oEmbed](/docs/cms/reference/hubl/functions#oembed), el dominio que se utiliza para obtener la respuesta oEmbed debe registrarse haciendo una solicitud a `/media-bridge/v1/{appId}/settings/oembed-domains`. Se deben incluir los siguientes parámetros: * **Esquema:** el patrón de URL para las URL de los elementos multimedia. Este patrón de URL se usa para hacer coincidir la URL a la función HubL oEmbed con la API de oEmbed. Los valores comodín se admiten utilizando `*` (por ejemplo, `www.domain.com/*`). * **URL:** la URL de la API de oEmbed. La URL multimedia se pasa a esta URL a través de un parámetro `URL`. * **Descubrimiento (booleano):** determina si tu API oEmbed admite o no la función [Discovery](https://oembed.com/#section4) de oEmbed. Por opción predeterminada, los dominios oEmbed registrados estarán disponibles para todos los clientes que hayan instalado tu aplicación. Si tienes dominios personalizados que son únicos para cada cliente, puedes especificar en qué cuenta se debe permitir el uso de un dominio oEmbed pasando un valor `portalId` a la solicitud de API al configurar el dominio oEmbed. Esto garantizará que solo la cuenta de HubSpot especificada pueda usar ese dominio oEmbed. ## Crear un módulo personalizado Para crear un módulo personalizado: * Navega a **Marketing** > **Archivos y plantillas** > **Herramientas de diseño**. * En la parte superior izquierda, haz clic en **Archivo** > **Archivo nuevo**. * En el cuadro de diálogo, haz clic en el menú desplegable **Qué te gustaría crear hoy** y selecciona **Módulo**. * Haz clic en **Siguiente**. * Selecciona la casilla de verificación junto a cada tipo de contenido en el que se utilizará el módulo: *páginas*, *publicaciones de blog*, *páginas de índice de blogs*, *correos electrónicos* o *cotizaciones*. Los módulos utilizados en las plantillas de correo electrónico no pueden incluir CSS o JavaScript. * Selecciona si este módulo será un **módulo local** o un **módulo global**. Si creas un [módulo global](https://knowledge.hubspot.com/es/design-manager/use-global-content-across-multiple-templates), editar el contenido de este módulo actualizará toda ubicación donde se utilizó el módulo. * Introduce un **nombre de archivo** para tu módulo y haz clic en **Crear**. * En la sección *Campos* a la derecha, haz clic en el menú desplegable **Agregar campo** y selecciona **Insertar**. ![](https://lh3.googleusercontent.com/_cARgVZZLUD-nsJUIaG8XMUdSm1GRLr4Gfw96HeZ6SyXFG0t6yiiPKt5ToSe7nq8arSnG569_wg5X2XsD0XEtmEGiX9sbQxH7deUIJKGshXamME6vXrLN2oVSAt-cmrkTN2nggDsdkChDnEOxKrw5mo) * En la sección *Tipos de origen compatibles*, selecciona **Integración multimedia**. * En la sección *Contenido insertado predeterminado*, haz clic en **Seleccionar desde la \[aplicación del centro multimedia]** * En el panel derecho, selecciona el **contenido multimedia** que deseas insertar en el módulo. * Establece cualquiera de las opciones de edición, condiciones de presentación de campos y opciones de repetidor de campos. * Bajo el *nombre de la variable HubL*, haz clic en **Copiar** > **Copiar fragmento**. * Pega el fragmento en la sección *module.html*. * Para obtener una vista preliminar de cómo se verá el módulo en tu página, haz clic en **Vista preliminar**. * En la sección de la izquierda, haz clic en **Seleccionar desde la \[aplicación del centro multimedia]** y luego selecciona el **elemento multimedia** que deseas previsualizar. ## Envía tus eventos multimedia Un evento multimedia es un evento que ocurre en relación con un objeto multimedia, como un evento de reproducción. Una vez que se envía un evento multimedia a la aplicación del centro multimedia, se puede usar en informes y en las tarjetas CRM de la cronología. Hay tres tipos de eventos multimedia: * **Evento de reproducción:** representa cuándo un usuario comienza a reproducir un elemento multimedia. Este evento está disponible tanto en la cronología de los contactos como en la herramienta de informes. * **Evento de cuartil:** representa cuándo un usuario alcanzó hitos trimestrales (0%, 25%, 50%, 75%, 100%) en términos de cuántos elementos multimedia ha consumido. Este evento solo está disponible en la cronología de contactos. * **Evento de período de atención**: representa cuando un usuario haya consumido completamente un elemento multimedia o cuando el usuario haya completado su sesión. Este evento solo está disponible dentro de la herramienta de informes. Los eventos se pueden enviar haciendo una solicitud `POST` a `/media-bridge/v2/events/media-played`, `/media-bridge/v2/events/media-played-percent` y `/media-bridge/v2/events/attention-span respectively`. Para que los eventos multimedia se muestren en la cronología de contacto del usuario en HubSpot, se debe enviar un evento de reproducción a la aplicación del centro multimedia para cada sesión. Los eventos de una sola sesión se mostrarán en una tarjeta en la cronología de actividad de contacto. Cuando los eventos se envían utilizando los endpoints de eventos v2, se procesan de forma asincrónica, a diferencia de los enviados a través de los endpoints v1. Por lo tanto, recomendamos lo siguiente: * La versión v1 de los endpoints debe usarse para cualquier prueba, ya que una solicitud errónea se eliminará inmediatamente. * La versión v2 de los endpoints debe usarse en producción, ya que su naturaleza asincrónica ayudará a evitar retrasos en el cliente mientras se escribe el evento en el centro multimedia. Los eventos también se retienen y se vuelven a intentar en caso de una falla temporal en el servidor del centro multimedia. ### Conectar un evento con un registro de contacto Para conectar un evento multimedia con un registro de contacto, los integradores deben proporcionar un `contactId` o un `contactUtk`. Si solo se proporciona un `contactUtk`, se convertirá en un `contactId`. Si ambos se proporcionan en la solicitud, el `contactId` se utilizará como fuente veraz. Este parámetro permite a la aplicación del centro multimedia crear una asociación entre el registro de contacto y el evento. Una vez que un evento multimedia se ha conectado a un registro de contacto, el evento se puede usar en [informes multiobjeto](https://knowledge.hubspot.com/es/reports/create-reports-with-the-custom-report-builder). Esto permite a los clientes vincular sus eventos multimedia con los registros de contacto, así como con las empresas y negocios asociados. ### Conexión de un evento con un elemento multimedia Para asociar un evento multimedia a un elemento multimedia específico, se deben incluir en la solicitud los parámetros `mediaID` o `externalID`. Si se proporcionan ambos, el `mediaID` se utilizará como fuente veraz. > [!WARNING] > > ### Nota: > > HubSpot solo admite las asociaciones de *Eventos reproducidos* y *Eventos de cuartil* con un contenido multimedia. ### Conectar un evento con una página Para asociar un evento multimedia a una página de HubSpot, se deben incluir los siguientes parámetros en la solicitud: * Si la página está alojada en el CMS de HubSpot, se debe proporcionar el `pageId`. * Si la página no está alojada en el CMS de HubSpot, se debe incluir `pageName` y `pageUrl`. La siguiente tabla describe las propiedades compatibles para los tres eventos multimedia: | Propiedad | Tipo de evento | Descripción | | - | - | - | | `mediaBridgeObjectId` | Todos los eventos | El ID del contenido multimedia con los que se relaciona este evento. | | `externalId` | Cadena | El ID del contenido multimedia en el sistema de terceros. Esto les da a los desarrolladores la capacidad de referirse al contenido multimedia en el centro multimedia basándose en el mismo identificador que usan en su propio sistema. Esto se puede utilizar en lugar del `mediaBridgeObjectId` en eventos. Si se proporcionan tanto un `externalId` como `mediaBridgeObjectId`, se utilizará el `mediaBridgeObjectId` y el externalId se ignorará. | | `sessionId` | Todos los eventos | Un identificador único para representar una sesión de visualización. Esto puede significar cosas diferentes para diferentes proveedores y HubSpot permite que los proveedores decidan qué significa una sesión para ellos. Esto se utilizará para agrupar eventos que ocurrieron en la misma sesión. Se espera que esto lo genere el sistema del tercero. | | `contactId` | Todos los eventos | El ID del contacto en el sistema de HubSpot que consumió el contenido multimedia. Esto se puede buscar utilizando la API para [obtener contactos mediante el token de usuario (utk) de HubSpot](https://developers.hubspot.es/docs/api-reference/legacy/crm/objects/contacts/v1/get-contacts-v1-lists-all-contacts-all#get-a-contact-by-its-user-token). La API también admite el suministro de un usertoken, y se encargará de convertirlo en un ID de contacto automáticamente. | | `contactUtk` | Todos los eventos | El usertoken (utk) que identifica qué contacto consumió los medios. | | `pageId` | Todos los eventos | El ID de contenido de la página en la que se produjo un evento. | | `pageName` | Todos los eventos | El nombre o el título de la página en la que se produjo un evento. | | `pageUrl` | Todos los eventos | La URL de la página en la que se produjo un evento. | | `occurredTimestamp` | Todos los eventos | La marca de tiempo en la que ocurrió este evento, en milisegundos desde la época (epoch). | | `rawDataString / rawDataMap` | Capacidad de atención | Estos son los datos sin formato que proporcionan los datos más granulares sobre los períodos del contenido multimedia y cuántas veces cada período fue consumido por el usuario. Por ejemplo, en un video de 10 segundos donde cada segundo representa un tramo, si un visitante ve los primeros 5 segundos del video, luego lo reinicia y vuelve a ver los primeros 2 segundos, el `rawDataString` resultante sería `“0=2;1=2;2=1;3=1;4=1;5=0;6=0;7=0;8=0;9=0;”`. | | `totalPercentPlayed` | Capacidad de atención | El porcentaje del contenido multimedia que el usuario consumió. Los proveedores pueden calcular esto de manera diferente según la forma en que consideren las vistas repetidas de la misma parte del contenido multimedia. Por esta razón, la API no intentará validar totalPercentWatched con respecto a la capacidad de atención del evento. Si hace falta, HubSpot calculará a partir del mapa de capacidad de atención de la siguiente manera: número de períodos con un valor de 1 o más sobre el número total de capacidades). | | `totalSecondsPlayed` | Capacidad de atención | Los segundos que un usuario pasó consumiendo el contenido multimedia. El centro multimedia calcula esto como `totalPercentPlayed`\*`mediaDuration`. Si un proveedor desea que esto se calcule de manera diferente, puede proporcionar el valor previamente calculado cuando crea el evento | | `playedPercent` | Evento de cuartil | Un valor de porcentaje del cuartil (0, 25, 50, 75, 100) para saber cuánto de los elementos multimedia se ha consumido hasta ahora. | | `iframeUrl` | Evento de reproducción | Una URL que se puede utilizar para mostrar datos de un sistema externo utilizando un iFrame. Cuando se incluya, el evento de la cronología del contacto mostrará un enlace que abrirá una ventana modal que muestra el contenido del iFrame cuando se hace clic. | | `mediaType` | Cadena | El tipo multimedia al que pertenece el evento (por ejemplo, VIDEO o AUDIO) Esto nos permite asignar adecuadamente el evento a los objetos correctos cuando un solo proveedor admite varios tipos de elementos multimedia. | # Set up a new oEmbed domain Source: https://developers.hubspot.es/docs/api-reference/latest/cms/media-bridge/integrator-settings/configure-oembed-domain specs/2026-09/cms-media-bridge-v2026-09.json POST /media-bridge/2026-09/{appId}/settings/oembed-domains Crea un nuevo ajuste de dominio oEmbed para una aplicación específica en tu cuenta de HubSpot. Este punto de conexión te permite definir dominios que se pueden usar para fines de oEmbed, lo que facilita la integración de contenido multimedia de fuentes externas. > **Supported products** # Delete an oEmbed domain Source: https://developers.hubspot.es/docs/api-reference/latest/cms/media-bridge/integrator-settings/delete-oembed-domain specs/2026-09/cms-media-bridge-v2026-09.json DELETE /media-bridge/2026-09/{appId}/settings/oembed-domains Elimina los dominios oEmbed asociados a una aplicación específica en HubSpot. Esta operación permite gestionar y eliminar dominios que ya no se necesitan para insertar contenido multimedia en la configuración de la aplicación. > **Supported products** # Get object types for a supported media Source: https://developers.hubspot.es/docs/api-reference/latest/cms/media-bridge/integrator-settings/get-object-types specs/2026-09/cms-media-bridge-v2026-09.json GET /media-bridge/2026-09/{appId}/settings/object-definitions/{mediaType} Obtén las definiciones de objetos para un tipo de contenido multimedia específico dentro de una aplicación. Este punto de conexión te permite acceder a la configuración relacionada con las definiciones de objetos de varios tipos de contenido multimedia: video, audio, documento, otro e imagen. Es útil para entender la estructura y las propiedades asociadas con los diferentes tipos de elementos multimedia en la aplicación. > **Supported products** # Get an oEmbed domain Source: https://developers.hubspot.es/docs/api-reference/latest/cms/media-bridge/integrator-settings/get-oembed-domain specs/2026-09/cms-media-bridge-v2026-09.json GET /media-bridge/2026-09/{appId}/settings/oembed-domains/{oEmbedDomainId} Obtén los detalles de un dominio oEmbed específico para una aplicación determinada. Este punto de conexión es útil para obtener la configuración o los ajustes relacionados con los dominios oEmbed asociados a una aplicación en particular. > **Supported products** # Update the media bridge app name Source: https://developers.hubspot.es/docs/api-reference/latest/cms/media-bridge/integrator-settings/update-app-name specs/2026-09/cms-media-bridge-v2026-09.json PUT /media-bridge/2026-09/{appId}/settings Actualiza la configuración de una aplicación específica en MediaBridgeService. Este punto de conexión permite modificar la configuración asociada con el appId especificado. Es útil para actualizar la configuración específica de la aplicación y asegurarte de que se ajuste a tus requisitos actuales. > **Supported products** # Update an oEmbed domain Source: https://developers.hubspot.es/docs/api-reference/latest/cms/media-bridge/integrator-settings/update-oembed-domain specs/2026-09/cms-media-bridge-v2026-09.json PATCH /media-bridge/2026-09/{appId}/settings/oembed-domains/{oEmbedDomainId} Actualiza la configuración de un dominio oEmbed específico asociado a una aplicación determinada. Este punto de conexión te permite modificar la configuración de un dominio oEmbed, lo que puede ser útil para gestionar cómo se inserta el contenido multimedia en diferentes dominios. > **Supported products** # Create property Source: https://developers.hubspot.es/docs/api-reference/latest/cms/media-bridge/properties/create-property specs/2026-09/cms-media-bridge-v2026-09.json POST /media-bridge/2026-09/{appId}/properties/{objectType} Crea una nueva propiedad para un tipo de objeto específico dentro de una aplicación determinada en el servicio MediaBridge. Este punto de conexión permite definir nuevas propiedades que se pueden usar para almacenar información adicional relacionada con el tipo de objeto. La solicitud debe incluir los datos necesarios de la propiedad en el cuerpo de la solicitud. > **Supported products** > **Required Scopes** # Create Group Source: https://developers.hubspot.es/docs/api-reference/latest/cms/media-bridge/properties/create-property-group specs/2026-09/cms-media-bridge-v2026-09.json POST /media-bridge/2026-09/{appId}/properties/{objectType}/groups Crea un nuevo grupo de propiedades para un tipo de objeto específico dentro de una aplicación determinada. Este punto de conexión te permite organizar las propiedades en grupos para facilitar su gestión y categorización dentro de la aplicación. > **Supported products** > **Required Scopes** # Delete property Source: https://developers.hubspot.es/docs/api-reference/latest/cms/media-bridge/properties/delete-property specs/2026-09/cms-media-bridge-v2026-09.json DELETE /media-bridge/2026-09/{appId}/properties/{objectType}/{propertyName} Elimina una propiedad específica de un tipo de objeto determinado dentro de una aplicación. Esta operación es útil para eliminar propiedades que ya no se necesitan o que se crearon por error. El punto de conexión requiere que se especifique el ID de la aplicación, el tipo de objeto y el nombre de la propiedad para identificar la propiedad que se eliminará. > **Supported products** > **Required Scopes** # Delete group Source: https://developers.hubspot.es/docs/api-reference/latest/cms/media-bridge/properties/delete-property-group specs/2026-09/cms-media-bridge-v2026-09.json DELETE /media-bridge/2026-09/{appId}/properties/{objectType}/groups/{groupName} Elimina un grupo de propiedades específico para un tipo de objeto dado dentro de una aplicación. Esta operación es útil para eliminar grupos de propiedades innecesarios u obsoletos, lo que ayuda a mantener una estructura limpia y organizada dentro de las propiedades de la aplicación. > **Supported products** > **Required Scopes** # Retrieve properties Source: https://developers.hubspot.es/docs/api-reference/latest/cms/media-bridge/properties/get-properties specs/2026-09/cms-media-bridge-v2026-09.json GET /media-bridge/2026-09/{appId}/properties/{objectType} Obtén las propiedades de un tipo de objeto específico dentro de una aplicación determinada. Este punto de conexión permite filtrar las propiedades según si están archivadas y especificar cuáles incluir en la respuesta. Es útil para acceder y gestionar las propiedades asociadas a diferentes tipos de objetos en la aplicación. > **Supported products** > **Required Scopes** # Retrieve property Source: https://developers.hubspot.es/docs/api-reference/latest/cms/media-bridge/properties/get-property-details specs/2026-09/cms-media-bridge-v2026-09.json GET /media-bridge/2026-09/{appId}/properties/{objectType}/{propertyName} Obtén una propiedad específica para un tipo de objeto dado dentro de una aplicación determinada. Este punto de conexión permite acceder a los detalles de una propiedad, incluyendo su configuración y ajustes, para un tipo de objeto en particular identificado por el nombre de la propiedad. Esto puede ser útil para entender las configuraciones de las propiedades o para fines de integración. > **Supported products** > **Required Scopes** # Retrieve group Source: https://developers.hubspot.es/docs/api-reference/latest/cms/media-bridge/properties/get-property-group specs/2026-09/cms-media-bridge-v2026-09.json GET /media-bridge/2026-09/{appId}/properties/{objectType}/groups/{groupName} Obtén un grupo de propiedades específico para un tipo de objeto dado dentro de una aplicación. Este punto de conexión es útil para acceder a información detallada sobre cómo se agrupan las propiedades bajo un nombre de grupo específico para un tipo de objeto en particular en la aplicación. > **Supported products** > **Required Scopes** # List groups Source: https://developers.hubspot.es/docs/api-reference/latest/cms/media-bridge/properties/get-property-groups specs/2026-09/cms-media-bridge-v2026-09.json GET /media-bridge/2026-09/{appId}/properties/{objectType}/groups Obtén una lista de grupos de propiedades para un tipo de objeto específico dentro de una aplicación determinada. Este punto de conexión es útil para obtener información organizativa sobre las propiedades asociadas a diferentes tipos de objetos en la aplicación. > **Supported products** > **Required Scopes** # Update property Source: https://developers.hubspot.es/docs/api-reference/latest/cms/media-bridge/properties/update-property specs/2026-09/cms-media-bridge-v2026-09.json PATCH /media-bridge/2026-09/{appId}/properties/{objectType}/{propertyName} Actualiza una propiedad existente para un tipo de objeto específico dentro de una aplicación determinada. Esta operación te permite modificar los detalles de una propiedad, como su etiqueta, tipo o descripción, para que se adapte mejor a los requisitos de la aplicación. > **Supported products** > **Required Scopes** # Update group Source: https://developers.hubspot.es/docs/api-reference/latest/cms/media-bridge/properties/update-property-group specs/2026-09/cms-media-bridge-v2026-09.json PATCH /media-bridge/2026-09/{appId}/properties/{objectType}/groups/{groupName} Actualiza las propiedades de un grupo específico dentro de un tipo de objeto determinado para una aplicación específica. Esta operación permite modificar los detalles de un grupo de propiedades, como su etiqueta o el orden de visualización, en el contexto del servicio MediaBridge. > **Supported products** > **Required Scopes** # Create associations Source: https://developers.hubspot.es/docs/api-reference/latest/cms/media-bridge/schemas/create-association-definition specs/2026-09/cms-media-bridge-v2026-09.json POST /media-bridge/2026-09/{appId}/schemas/{objectType}/associations Crea nuevas asociaciones para un tipo de objeto específico dentro de una aplicación determinada. Este punto de conexión te permite definir relaciones entre diferentes tipos de objetos para mejorar la conectividad y la integración de datos en tu cuenta de HubSpot. > **Supported products** > **Required Scopes** # Create Object Definitions Source: https://developers.hubspot.es/docs/api-reference/latest/cms/media-bridge/schemas/create-object-type specs/2026-09/cms-media-bridge-v2026-09.json POST /media-bridge/2026-09/{appId}/settings/object-definitions Crea nuevas definiciones de objetos para una aplicación específica en el centro multimedia de HubSpot. Este punto de conexión se usa para definir nuevos objetos que se pueden utilizar dentro de la aplicación, lo que permite la personalización e integración de funciones relacionadas con elementos multimedia. > **Supported products** > **Required Scopes** # Define Video Association Source: https://developers.hubspot.es/docs/api-reference/latest/cms/media-bridge/schemas/create-video-association-definition specs/2026-09/cms-media-bridge-v2026-09.json POST /media-bridge/2026-09/{appId}/settings/video-association-definition Crea una definición de asociación de video para una aplicación específica del centro multimedia de HubSpot. Este punto de conexión se usa para definir cómo se asocian los videos con otros objetos dentro de la aplicación especificada. Es particularmente útil para aplicaciones que necesitan gestionar el contenido de video y sus relaciones de forma programática. > **Supported products** > **Required Scopes** # Delete association Source: https://developers.hubspot.es/docs/api-reference/latest/cms/media-bridge/schemas/delete-association-definition specs/2026-09/cms-media-bridge-v2026-09.json DELETE /media-bridge/2026-09/{appId}/schemas/{objectType}/associations/{associationId} Elimina una asociación existente entre esquemas para una aplicación específica en el servicio MediaBridge. Esta operación es útil cuando es necesario desasociar entidades que ya no están relacionadas o para limpiar asociaciones obsoletas. > **Supported products** > **Required Scopes** # Retrieve schemas Source: https://developers.hubspot.es/docs/api-reference/latest/cms/media-bridge/schemas/get-schemas specs/2026-09/cms-media-bridge-v2026-09.json GET /media-bridge/2026-09/{appId}/schemas Obtén los esquemas asociados a una aplicación específica en la cuenta de HubSpot. Este punto de conexión te permite ver los detalles del esquema, lo que puede ser útil para entender la estructura de datos y las propiedades asociadas a la aplicación. Opcionalmente, puedes filtrar los resultados para incluir solo los esquemas archivados. > **Supported products** > **Required Scopes** # Update schema Source: https://developers.hubspot.es/docs/api-reference/latest/cms/media-bridge/schemas/update-schema specs/2026-09/cms-media-bridge-v2026-09.json PATCH /media-bridge/2026-09/{appId}/schemas/{objectType} Actualiza el esquema de un tipo de objeto específico dentro de una aplicación determinada. Esta operación permite modificar los detalles del esquema existente, lo que puede ser útil para adaptarse a los cambios en los requisitos de la estructura de los datos o la lógica de los negocios. > **Supported products** > **Required Scopes** # Pages API Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/guide # Create a new A/B test variation Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/landing-pages/ab-tests/create-variation specs/2026-09/cms-pages-v2026-09.json POST /cms/pages/2026-09/landing-pages/ab-test/create-variation Crear una nueva variación de prueba A/B basada en la información proporcionada en el cuerpo de la solicitud. > **Supported products** > **Required Scopes** # End an active A/B test Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/landing-pages/ab-tests/end-ab-test specs/2026-09/cms-pages-v2026-09.json POST /cms/pages/2026-09/landing-pages/ab-test/end Finalizar una prueba A/B activa y designar un ganador. > **Supported products** > **Required Scopes** # Rerun a previous A/B test Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/landing-pages/ab-tests/rerun-ab-test specs/2026-09/cms-pages-v2026-09.json POST /cms/pages/2026-09/landing-pages/ab-test/rerun Volver a ejecutar una prueba A/B anterior. > **Supported products** > **Required Scopes** # Delete landing pages Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/landing-pages/batch/archive-landing-pages specs/2026-09/cms-pages-v2026-09.json POST /cms/pages/2026-09/landing-pages/batch/archive Elimina las landing pages especificadas por ID en el cuerpo de la solicitud. Nota: Esto no es lo mismo que la función `archive` del panel. Para realizar la acción `archive` en el panel, envía una actualización normal con el campo `archivedInDashboard` configurado como `true`. > **Supported products** > **Required Scopes** # Create landing pages Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/landing-pages/batch/create-landing-pages specs/2026-09/cms-pages-v2026-09.json POST /cms/pages/2026-09/landing-pages/batch/create Crea un lote de landing pages como se detalla en el cuerpo de la solicitud. > **Supported products** > **Required Scopes** # Retrieve landing pages Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/landing-pages/batch/read-landing-pages specs/2026-09/cms-pages-v2026-09.json POST /cms/pages/2026-09/landing-pages/batch/read Obtén un lote de landing pages como se especifica en el cuerpo de la solicitud. > **Supported products** > **Required Scopes** # Update landing pages Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/landing-pages/batch/update-landing-pages specs/2026-09/cms-pages-v2026-09.json POST /cms/pages/2026-09/landing-pages/batch/update Actualiza un lote de landing pages según lo especificado en el cuerpo de la solicitud. > **Supported products** > **Required Scopes** # Clone a landing page Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/landing-pages/clone-landing-page specs/2026-09/cms-pages-v2026-09.json POST /cms/pages/2026-09/landing-pages/clone Crea una copia de una landing page existente. > **Supported products** > **Required Scopes** # Create a landing page Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/landing-pages/create-landing-page specs/2026-09/cms-pages-v2026-09.json POST /cms/pages/2026-09/landing-pages Crea una nueva landing page. > **Supported products** > **Required Scopes** # Delete a landing page Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/landing-pages/delete-landing-page specs/2026-09/cms-pages-v2026-09.json DELETE /cms/pages/2026-09/landing-pages/{objectId} Eliminar una landing page, especificada por su ID. > **Supported products** > **Required Scopes** # Retrieve a landing page draft Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/landing-pages/drafts/get-landing-page-draft specs/2026-09/cms-pages-v2026-09.json GET /cms/pages/2026-09/landing-pages/{objectId}/draft Recupera la versión preliminar completa de una landing page, especificada por el ID de página. > **Supported products** > **Required Scopes** # Publish a landing page draft Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/landing-pages/drafts/publish-landing-page-draft specs/2026-09/cms-pages-v2026-09.json POST /cms/pages/2026-09/landing-pages/{objectId}/draft/push-live Toma los cambios del borrador de la landing page y aplícalos a la versión real. > **Supported products** > **Required Scopes** # Reset a landing page draft Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/landing-pages/drafts/reset-landing-page-draft specs/2026-09/cms-pages-v2026-09.json POST /cms/pages/2026-09/landing-pages/{objectId}/draft/reset Descarta cualquier edición y restablece el borrador para que coincida con la versión activa. > **Supported products** > **Required Scopes** # Update the draft of a landing page Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/landing-pages/drafts/update-landing-page-draft specs/2026-09/cms-pages-v2026-09.json PATCH /cms/pages/2026-09/landing-pages/{objectId}/draft Actualiza parcialmente la versión preliminar de una landing page, especificada por su ID. Solo tienes que especificar los valores de las columnas que vas a modificar. > **Supported products** > **Required Scopes** # Archive folders Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/landing-pages/folders/batch-archive-folders specs/2026-09/cms-pages-v2026-09.json POST /cms/pages/2026-09/landing-pages/folders/batch/archive Elimina un lote de carpetas como se especifica en el cuerpo de la solicitud. > **Supported products** > **Required Scopes** # Create folders Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/landing-pages/folders/batch-create-folders specs/2026-09/cms-pages-v2026-09.json POST /cms/pages/2026-09/landing-pages/folders/batch/create Crea un lote de carpetas como se detalla en el cuerpo de la solicitud. > **Supported products** > **Required Scopes** # Retrieve folders Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/landing-pages/folders/batch-read-folders specs/2026-09/cms-pages-v2026-09.json POST /cms/pages/2026-09/landing-pages/folders/batch/read Obtén un lote de carpetas de landing pages según lo identificado en el cuerpo de la solicitud. > **Supported products** > **Required Scopes** # Update folders Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/landing-pages/folders/batch-update-folders specs/2026-09/cms-pages-v2026-09.json POST /cms/pages/2026-09/landing-pages/folders/batch/update Actualiza un lote de carpetas de landing pages como se especifica en el cuerpo de la solicitud. > **Supported products** > **Required Scopes** # Create a landing page folder Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/landing-pages/folders/create-folder specs/2026-09/cms-pages-v2026-09.json POST /cms/pages/2026-09/landing-pages/folders Crea una nueva carpeta para las landing pages. > **Supported products** > **Required Scopes** # Delete a landing page folder Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/landing-pages/folders/delete-folder specs/2026-09/cms-pages-v2026-09.json DELETE /cms/pages/2026-09/landing-pages/folders/{objectId} Elimina una carpeta de landing page, especificada por su ID. > **Supported products** > **Required Scopes** # Retrieve a landing page folder Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/landing-pages/folders/get-folder specs/2026-09/cms-pages-v2026-09.json GET /cms/pages/2026-09/landing-pages/folders/{objectId} Recupera una carpeta de landing pages, especificada por su ID. > **Supported products** > **Required Scopes** # Retrieve a previous version of a folder Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/landing-pages/folders/get-folder-revision specs/2026-09/cms-pages-v2026-09.json GET /cms/pages/2026-09/landing-pages/folders/{objectId}/revisions/{revisionId} Recupera una versión anterior de una carpeta, especificada por el ID de la carpeta y el ID de revisión. > **Supported products** > **Required Scopes** # Retrieves previous versions of a folder Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/landing-pages/folders/get-folder-revisions specs/2026-09/cms-pages-v2026-09.json GET /cms/pages/2026-09/landing-pages/folders/{objectId}/revisions Recupera todas las versiones anteriores de una carpeta de landing page. > **Supported products** > **Required Scopes** # Get all landing page folders Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/landing-pages/folders/get-folders specs/2026-09/cms-pages-v2026-09.json GET /cms/pages/2026-09/landing-pages/folders Obtener la lista de landing pages. Admite paginación y filtrado. Este método sería útil para una integración que examinara estos modelos y utilizara un servicio externo para sugerir ediciones. > **Supported products** > **Required Scopes** # Restore a previous version of a folder Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/landing-pages/folders/restore-folder-revision specs/2026-09/cms-pages-v2026-09.json POST /cms/pages/2026-09/landing-pages/folders/{objectId}/revisions/{revisionId}/restore Toma una versión especificada de una carpeta de landing pages y la restaura. > **Supported products** > **Required Scopes** # Update a landing page folder Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/landing-pages/folders/update-folder specs/2026-09/cms-pages-v2026-09.json PATCH /cms/pages/2026-09/landing-pages/folders/{objectId} Actualiza parcialmente una carpeta de landing pages, especificada por el ID de la carpeta. Solo tienes que especificar los valores de los detalles que vas a modificar. > **Supported products** > **Required Scopes** # Retrieve a landing page Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/landing-pages/get-landing-page specs/2026-09/cms-pages-v2026-09.json GET /cms/pages/2026-09/landing-pages/{objectId} Recupera una landing page, especificada por su ID. > **Supported products** > **Required Scopes** # Get all landing pages Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/landing-pages/get-landing-pages specs/2026-09/cms-pages-v2026-09.json GET /cms/pages/2026-09/landing-pages Obtén una lista de landing pages en tu cuenta de HubSpot. Este punto de terminación te permite filtrar landing pages según las marcas de tiempo de creación y actualización, ordenarlas y paginar los resultados. También puedes incluir páginas archivadas o especificar ciertas propiedades para que se incluyan en la respuesta. > **Supported products** > **Required Scopes** # Add a landing page to a multi-language group Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/landing-pages/multi-language/attach-to-lang-group specs/2026-09/cms-pages-v2026-09.json POST /cms/pages/2026-09/landing-pages/multi-language/attach-to-lang-group Adjuntar una landing page a un grupo multilingüe. > **Supported products** > **Required Scopes** # Create a new language variation Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/landing-pages/multi-language/create-language-variation specs/2026-09/cms-pages-v2026-09.json POST /cms/pages/2026-09/landing-pages/multi-language/create-language-variation Crea una nueva variante de idioma a partir de una landing page existente. La variante será una copia del estado de borrador de la página de origen. Para previsualizar el contenido, puedes [obtener el borrador de la landing page de origen](/api-reference/latest/cms/pages/landing-pages/drafts/get-landing-page-draft). > **Supported products** > **Required Scopes** # Remove a landing page from a multi-language group Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/landing-pages/multi-language/detach-from-lang-group specs/2026-09/cms-pages-v2026-09.json POST /cms/pages/2026-09/landing-pages/multi-language/detach-from-lang-group Separar una landing page de un grupo multilingüe. > **Supported products** > **Required Scopes** # Set a new primary language Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/landing-pages/multi-language/set-new-lang-primary specs/2026-09/cms-pages-v2026-09.json PUT /cms/pages/2026-09/landing-pages/multi-language/set-new-lang-primary Establecer una landing page como idioma principal de un grupo multilingüe. > **Supported products** > **Required Scopes** # Update languages of multi-language group Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/landing-pages/multi-language/update-languages specs/2026-09/cms-pages-v2026-09.json POST /cms/pages/2026-09/landing-pages/multi-language/update-languages Establecer explícitamente nuevos idiomas para cada landing page en un grupo multilingüe. > **Supported products** > **Required Scopes** # Retrieve a previous version of a landing page Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/landing-pages/revisions/get-landing-page-revision specs/2026-09/cms-pages-v2026-09.json GET /cms/pages/2026-09/landing-pages/{objectId}/revisions/{revisionId} Recupera una versión anterior de una landing page, especificada por el ID de página y el ID de revisión. > **Supported products** > **Required Scopes** # Retrieve all previous versions of a landing page Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/landing-pages/revisions/get-landing-page-revisions specs/2026-09/cms-pages-v2026-09.json GET /cms/pages/2026-09/landing-pages/{objectId}/revisions Recupera todas las versiones anteriores de una landing page, especificadas por el ID de página. > **Supported products** > **Required Scopes** # Restore a previous version of a landing page Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/landing-pages/revisions/restore-landing-page-revision specs/2026-09/cms-pages-v2026-09.json POST /cms/pages/2026-09/landing-pages/{objectId}/revisions/{revisionId}/restore Restaura una versión anterior de una landing page, especificada por el ID de página y el ID de revisión. > **Supported products** > **Required Scopes** # Restore a previous version of a landing page Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/landing-pages/revisions/restore-landing-page-to-draft specs/2026-09/cms-pages-v2026-09.json POST /cms/pages/2026-09/landing-pages/{objectId}/revisions/{revisionId}/restore-to-draft Especifica una versión anterior de una landing page para establecerla como borrador. > **Supported products** > **Required Scopes** # Schedule landing page publishing Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/landing-pages/schedule-landing-page specs/2026-09/cms-pages-v2026-09.json POST /cms/pages/2026-09/landing-pages/schedule Programar la publicación de una landing page. > **Supported products** > **Required Scopes** # Update a landing page Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/landing-pages/update-landing-page specs/2026-09/cms-pages-v2026-09.json PATCH /cms/pages/2026-09/landing-pages/{objectId} Actualiza un único objeto de la landing page identificado por el id en la ruta. Solo es necesario especificar los valores de columna que se modificarán. > **Supported products** > **Required Scopes** # Create a new A/B test variation Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/website-pages/ab-tests/create-variation specs/2026-09/cms-pages-v2026-09.json POST /cms/pages/2026-09/site-pages/ab-test/create-variation Crear una nueva variación de prueba A/B basada en la información proporcionada en el cuerpo de la solicitud. > **Supported products** > **Required Scopes** # End an active A/B test Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/website-pages/ab-tests/end-ab-test specs/2026-09/cms-pages-v2026-09.json POST /cms/pages/2026-09/site-pages/ab-test/end Finalizar una prueba A/B activa y designar un ganador. > **Supported products** > **Required Scopes** # Rerun a previous A/B test Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/website-pages/ab-tests/rerun-ab-test specs/2026-09/cms-pages-v2026-09.json POST /cms/pages/2026-09/site-pages/ab-test/rerun Volver a ejecutar una prueba A/B anterior. > **Supported products** > **Required Scopes** # Delete site pages Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/website-pages/batch/archive-website-pages specs/2026-09/cms-pages-v2026-09.json POST /cms/pages/2026-09/site-pages/batch/archive Elimina un lote de páginas web como se especifica en el cuerpo de la solicitud. Ten en cuenta que esto no es lo mismo que la función `archive` del panel. Para realizar un `archive` del panel, envía una actualización normal con el campo `archivedInDashboard` definido como `true`. > **Supported products** > **Required Scopes** # Create site pages Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/website-pages/batch/create-website-pages specs/2026-09/cms-pages-v2026-09.json POST /cms/pages/2026-09/site-pages/batch/create Crea un lote de páginas web como se especifica en el cuerpo de la solicitud. > **Supported products** > **Required Scopes** # Retrieve site pages Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/website-pages/batch/read-website-pages specs/2026-09/cms-pages-v2026-09.json POST /cms/pages/2026-09/site-pages/batch/read Recupera un lote de páginas web como se especifica en el cuerpo de la solicitud. > **Supported products** > **Required Scopes** # Update site pages Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/website-pages/batch/update-website-pages specs/2026-09/cms-pages-v2026-09.json POST /cms/pages/2026-09/site-pages/batch/update Actualiza un lote de páginas web como se especifica en el cuerpo de la solicitud. > **Supported products** > **Required Scopes** # Clone a site page Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/website-pages/clone-website-page specs/2026-09/cms-pages-v2026-09.json POST /cms/pages/2026-09/site-pages/clone Crea una copia de una página web existente. > **Supported products** > **Required Scopes** # Create a site page Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/website-pages/create-website-page specs/2026-09/cms-pages-v2026-09.json POST /cms/pages/2026-09/site-pages Crear una nueva página web. > **Supported products** > **Required Scopes** # Delete a site page Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/website-pages/delete-website-page specs/2026-09/cms-pages-v2026-09.json DELETE /cms/pages/2026-09/site-pages/{objectId} Elimina una página web, especificada por su ID. > **Supported products** > **Required Scopes** # Retrieve a site page draft Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/website-pages/drafts/get-website-page-draft specs/2026-09/cms-pages-v2026-09.json GET /cms/pages/2026-09/site-pages/{objectId}/draft Recupera la versión preliminar completa de una página web, especificada por su ID. > **Supported products** > **Required Scopes** # Publish a site page draft Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/website-pages/drafts/publish-website-page-draft specs/2026-09/cms-pages-v2026-09.json POST /cms/pages/2026-09/site-pages/{objectId}/draft/push-live Toma los cambios de la versión preliminar de la página web y aplícalos a la versión activa. > **Supported products** > **Required Scopes** # Reset a site page draft Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/website-pages/drafts/reset-website-page-draft specs/2026-09/cms-pages-v2026-09.json POST /cms/pages/2026-09/site-pages/{objectId}/draft/reset Descarta cualquier edición y restablece el borrador para que coincida con la versión activa. > **Supported products** > **Required Scopes** # Update the draft of a site page Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/website-pages/drafts/update-website-page-draft specs/2026-09/cms-pages-v2026-09.json PATCH /cms/pages/2026-09/site-pages/{objectId}/draft Actualiza parcialmente la versión preliminar de una página web, especificada por el ID de página. Solo tienes que especificar los valores de los detalles que vas a modificar. > **Supported products** > **Required Scopes** # Retrieve a site page Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/website-pages/get-website-page specs/2026-09/cms-pages-v2026-09.json GET /cms/pages/2026-09/site-pages/{objectId} Recuperar una página web por su ID. > **Supported products** > **Required Scopes** # Get all site pages Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/website-pages/get-website-pages specs/2026-09/cms-pages-v2026-09.json GET /cms/pages/2026-09/site-pages Recuperar todas las páginas web. Admite paginación y filtrado. Este método sería útil para una integración que examinara estos modelos y utilizara un servicio externo para sugerir ediciones. > **Supported products** > **Required Scopes** # Add a site page to a multi-language group Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/website-pages/multi-language/attach-to-lang-group specs/2026-09/cms-pages-v2026-09.json POST /cms/pages/2026-09/site-pages/multi-language/attach-to-lang-group Adjuntar una página del sitio a un grupo multilingüe. > **Supported products** > **Required Scopes** # Create a new language variation Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/website-pages/multi-language/create-language-variation specs/2026-09/cms-pages-v2026-09.json POST /cms/pages/2026-09/site-pages/multi-language/create-language-variation Crea una nueva variante de idioma a partir de una página de sitio web existente. La variante será una copia del estado de borrador de la página de origen. Para previsualizar el contenido, puedes [obtener el borrador de la página de sitio web de origen](/api-reference/latest/cms/pages/website-pages/drafts/get-website-page-draft). > **Supported products** > **Required Scopes** # Remove a site page from a multi-language group Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/website-pages/multi-language/detach-from-lang-group specs/2026-09/cms-pages-v2026-09.json POST /cms/pages/2026-09/site-pages/multi-language/detach-from-lang-group Separar una página web de un grupo multilingüe. > **Supported products** > **Required Scopes** # Set a new primary language Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/website-pages/multi-language/set-new-lang-primary specs/2026-09/cms-pages-v2026-09.json PUT /cms/pages/2026-09/site-pages/multi-language/set-new-lang-primary Establecer una página del sitio como idioma principal de un grupo multilingüe. > **Supported products** > **Required Scopes** # Update languages of multi-language group Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/website-pages/multi-language/update-languages specs/2026-09/cms-pages-v2026-09.json POST /cms/pages/2026-09/site-pages/multi-language/update-languages Establecer explícitamente nuevos idiomas para cada página del sitio en un grupo multilingüe. > **Supported products** > **Required Scopes** # Retrieve a previous version of a site page Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/website-pages/revisions/get-website-page-revision specs/2026-09/cms-pages-v2026-09.json GET /cms/pages/2026-09/site-pages/{objectId}/revisions/{revisionId} Recupera una versión anterior de una página web por el ID de revisión. > **Supported products** > **Required Scopes** # Retrieve all previous versions of a site page Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/website-pages/revisions/get-website-page-revisions specs/2026-09/cms-pages-v2026-09.json GET /cms/pages/2026-09/site-pages/{objectId}/revisions Recupera todas las versiones anteriores de una página web, especificadas por el ID de la página. > **Supported products** > **Required Scopes** # Restore a previous version of a site page Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/website-pages/revisions/restore-website-page-revision specs/2026-09/cms-pages-v2026-09.json POST /cms/pages/2026-09/site-pages/{objectId}/revisions/{revisionId}/restore Restaura una página web a una versión anterior, especificada por el ID de página y el ID de versión. > **Supported products** > **Required Scopes** # Restore a previous version of a site page to draft Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/website-pages/revisions/restore-website-page-to-draft specs/2026-09/cms-pages-v2026-09.json POST /cms/pages/2026-09/site-pages/{objectId}/revisions/{revisionId}/restore-to-draft Toma una versión específica de una página web y la establece como la nueva versión en borrador de la página. > **Supported products** > **Required Scopes** # Schedule site page publishing Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/website-pages/schedule-website-page specs/2026-09/cms-pages-v2026-09.json POST /cms/pages/2026-09/site-pages/schedule Programar la publicación de una página web en el futuro. > **Supported products** > **Required Scopes** # Update a site page Source: https://developers.hubspot.es/docs/api-reference/latest/cms/pages/website-pages/update-website-page specs/2026-09/cms-pages-v2026-09.json PATCH /cms/pages/2026-09/site-pages/{objectId} Actualiza parcialmente una página web, especificada por su ID. Solo tienes que especificar los valores de las columnas que vas a modificar. > **Supported products** > **Required Scopes** # Get indexed properties Source: https://developers.hubspot.es/docs/api-reference/latest/cms/site-search/get-indexed-data specs/2026-09/cms-site-search-v2026-09.json GET /cms/site-search/2026-09/indexed-data/{contentId} Devuelve todos los datos indexados de un recurso (por ejemplo: página, publicación de blog, tabla de HubDB) especificados por ID. Esto es útil para determinar por qué una búsqueda personalizada no devuelve un recurso en particular. > **Supported products** > **Required Scopes** # API del CMS | Búsqueda en sitios web Source: https://developers.hubspot.es/docs/api-reference/latest/cms/site-search/guide > **[Run in Postman](https://app.getpostman.com/run-collection/5e5c4c70292db4e72738)** > **Requisitos de ámbito** # Búsqueda en sitios web La búsqueda en sitios web permite mostrar contenido relacionado con un término de búsqueda en sitios alojados en HubSpot. Además, puede devolver todos los datos indexados de un ID de documento determinado (ID de página, ID de entrada, ID de fila de HubDB, etc.). Si utilizas Google para buscar en toda la web, la búsqueda de sitios indexa un sitio web entero y produce resultados de búsqueda en una lista fácil de leer. Desde el comercio electrónico hasta los medios de comunicación, esta funcionalidad es común y útil en muchos tipos de aplicaciones. **Ejemplo de uso:** configura una página de resultados para usar un campo de búsqueda en tu sitio web alojado en HubSpot. Consulta [este artículo de la base de conocimientos](https://knowledge.hubspot.com/es/design-manager/set-up-a-results-page-to-use-a-search-field-on-your-site) para obtener más información. **Nota**: el endpoint de búsqueda se utiliza para buscar contenido en varios dominios. # Search your site Source: https://developers.hubspot.es/docs/api-reference/latest/cms/site-search/search-site specs/2026-09/cms-site-search-v2026-09.json GET /cms/site-search/2026-09/search Devuelve cualquier contenido del sitio web que coincida con los criterios de búsqueda especificados para una cuenta de HubSpot especificada. Las búsquedas se pueden filtrar por tipo de contenido, dominio o ruta de URL. Incluye opciones para ponderar resultados por novedad y popularidad, junto con la disponibilidad de idiomas. > **Supported products** > **Required Scopes** # Create a file Source: https://developers.hubspot.es/docs/api-reference/latest/cms/source-code/create-source-code-file specs/2026-09/cms-source-code-v2026-09.json POST /cms/source-code/2026-09/{environment}/content/{path} Crea un archivo en la ruta especificada en el entorno especificado. Acepta el tipo de contenido multipart/form-data. Lanza un error si ya existe un archivo en la ruta especificada. > **Supported products** > **Required Scopes** # Delete a file Source: https://developers.hubspot.es/docs/api-reference/latest/cms/source-code/delete-source-code-file specs/2026-09/cms-source-code-v2026-09.json DELETE /cms/source-code/2026-09/{environment}/content/{path} Elimina el archivo en la ruta especificada en el entorno especificado. > **Supported products** > **Required Scopes** # Extract source code in a zip file Source: https://developers.hubspot.es/docs/api-reference/latest/cms/source-code/extract/extract-source-code specs/2026-09/cms-source-code-v2026-09.json POST /cms/source-code/2026-09/extract/async Extrae un archivo zip en el sistema de archivos del desarrollador. El estado de la extracción puede comprobarse con el siguiente punto de terminación `/extract/async/tasks/taskId/status`. > **Supported products** > **Required Scopes** # Get extraction status Source: https://developers.hubspot.es/docs/api-reference/latest/cms/source-code/extract/get-extraction-status specs/2026-09/cms-source-code-v2026-09.json GET /cms/source-code/2026-09/extract/async/tasks/{taskId}/status Obtiene el estado de una extracción mediante el `taskId` devuelto por la solicitud inicial `extract/async`. > **Supported products** > **Required Scopes** # Retrieve file metadata Source: https://developers.hubspot.es/docs/api-reference/latest/cms/source-code/get-file-metadata specs/2026-09/cms-source-code-v2026-09.json GET /cms/source-code/2026-09/{environment}/metadata/{path} Obtiene el objeto de metadatos para el archivo en la ruta especificada en el entorno especificado. > **Supported products** > **Required Scopes** # Download a file Source: https://developers.hubspot.es/docs/api-reference/latest/cms/source-code/get-source-code-file specs/2026-09/cms-source-code-v2026-09.json GET /cms/source-code/2026-09/{environment}/content/{path} Descarga el contenido en bytes del archivo en la ruta especificada en el entorno especificado. > **Supported products** > **Required Scopes** # Conversaciones | Ejecutar fragmentos de código en bots Source: https://developers.hubspot.es/docs/api-reference/latest/cms/source-code/guide > **Requisitos de ámbito** Al [crear o editar un bot](https://knowledge.hubspot.com/es/articles/kcs_article/conversations/create-a-bot), puedes agregar un fragmento de código haciendo clic en «+» para [agregar una acción](https://knowledge.hubspot.com/chatflows/a-guide-to-bot-actions) como normalmente lo harías. En el panel de selección de acción, haz clic en «Ejecutar un fragmento de código» ![run-a-code-snippet-2](https://developers.hubspot.com/hs-fs/hubfs/KB%20Team/run-a-code-snippet-2.png?width=322\&name=run-a-code-snippet-2.png) A continuación, asígnale un apodo a tu acción. En el panel de edición de códigos, verás nuestra plantilla predeterminada para Node.js 10. x. Los detalles del objeto «event» y los formatos de objeto de respuesta posibles se detallan a continuación. ![run-a-code-snippet-editor](https://developers.hubspot.com/hs-fs/hubfs/KB%20Team/run-a-code-snippet-editor.png?width=388\&name=run-a-code-snippet-editor.png) El código se activará cuando se alcance la acción guardada en una conversación. Hay tres aspectos principales que debes tener en cuenta al trabajar con fragmentos de código: * La función `exports.main()` se llama cuando se ejecuta la acción del fragmento de código. * El argumento `event` es un objeto que contiene detalles para el visitante y la sesión de chat. * La función `callback()` se utiliza para pasar datos al chatbot y al usuario. Se debe llamar en la función `exports.main`. El objeto `event` contendrá los siguientes datos: ```json theme={null} //example payload { "userMessage": { // Details for the last message sent to your bot "message": "100-500", // The last message received by your bot, sent by the visitor "quickReply": { // If the visitor selected any quick reply options, this will be a list of the selected options. // Will be 'null' if no options were selected. "quickReplies":[ // A list of quick reply options selected by the visitor { "value":"100-500", "label":"100-500" } ], }, "session": { "vid": 12345, // The contact VID of the visitor, if known. "properties": { // A list of properties collected by the bot in the current session. "CONTACT": { "firstname": { "value": "John", "syncedAt": 1534362540592 }, "email": { "value": "testing@domain.com", "syncedAt": 1534362541764 }, "lastname": { "value": "Smith", "syncedAt": 1534362540592 } } }, "customState":{myCustomCounter: 1, myCustomString:"someString"} // Only present if it customState was passed in from a previous callback payload } } ``` La función `callback()` se utiliza para enviar datos al bot. El argumento debe ser un objeto con los siguientes datos: ```json theme={null} //sample payload { "botMessage": "Thanks for checking out our website!", // This is the message your bot will display to the visitor. "quickReplies": [{ value:'option', // Passed to the bot as the response on click label:'Option' // Gets displayed as the button label }], // the quickReplies object is optional "nextModuleNickname": "SuggestAwesomeProduct", // The nickname of the next module the bot should execute. If undefined, the bot will follow the default configured behavior "responseExpected": false // If true, the bot will display the returned botMessage, wait for a response, then execute this code snippet again with that new response. "customState":{myCustomCounter: 1, myCustomString:"someString"} // Optional field to pass along to the next step. } ``` ## Limitaciones Los fragmentos de código en los bots deben terminar en un lapso de 20 segundos y solo usar 128 MB de memoria. Exceder estos límites ocasionará un error. ## Bibliotecas disponibles Varias bibliotecas de Node.js están disponibles para usar dentro del fragmento de código. * [async](https://www.npmjs.com/package/async) * [lodash](https://www.npmjs.com/package/lodash) * [mongoose](https://www.npmjs.com/package/mongoose) * [mysql](https://www.npmjs.com/package/mysql) * [redis](https://www.npmjs.com/package/redis) * [request](https://www.npmjs.com/package/request) * [aws-sdk](https://www.npmjs.com/package/aws-sdk) Las bibliotecas se pueden cargar usando la función `require()` normal en la parte superior de tu código. ```js theme={null} const request = require("request"); exports.main = (event, callback) => { request("http://time.jsontest.com/", function (error, response, body) { const responseJson = { botMessage: "The current time in GMT is " + JSON.parse(body).time, responseExpected: false, }; callback(responseJson); }); }; ``` # Create or update a file Source: https://developers.hubspot.es/docs/api-reference/latest/cms/source-code/update-source-code-file specs/2026-09/cms-source-code-v2026-09.json PUT /cms/source-code/2026-09/{environment}/content/{path} Inserta un archivo en la ruta especificada en el entorno especificado. Acepta tipo de contenido multipart/form-data. > **Supported products** > **Required Scopes** # Validate the contents of a file Source: https://developers.hubspot.es/docs/api-reference/latest/cms/source-code/validate-source-code-file specs/2026-09/cms-source-code-v2026-09.json POST /cms/source-code/2026-09/{environment}/validate/{path} Valida el contenido del archivo pasado al endpoint a partir de una ruta y entorno especificados. Acepta el tipo de contenido multipart/form-data. > **Supported products** > **Required Scopes** # Create a mapping Source: https://developers.hubspot.es/docs/api-reference/latest/cms/url-mappings/create-url-mapping specs/2026-09/cms-url-mappings-v2026-09.json POST /url-mappings/2026-09/url-mappings Crea una nueva asignación de URL en tu cuenta de HubSpot. Este punto de terminación te permite definir redireccionamientos y asignaciones de URL, lo que puede ser útil para gestionar la navegación del sitio y el SEO. El cuerpo de la solicitud debe incluir todas las propiedades requeridas del esquema UrlMapping. > **Supported products** > **Required Scopes** # Delete a mapping Source: https://developers.hubspot.es/docs/api-reference/latest/cms/url-mappings/delete-url-mapping specs/2026-09/cms-url-mappings-v2026-09.json DELETE /url-mappings/2026-09/url-mappings/{id} Elimina una asignación de URL específica en tu cuenta de HubSpot usando su identificador único. Esta operación eliminará la asignación de URL de forma permanente y requiere los permisos de escritura y eliminación adecuados. > **Supported products** > **Required Scopes** # Retrieve a mapping Source: https://developers.hubspot.es/docs/api-reference/latest/cms/url-mappings/get-url-mapping specs/2026-09/cms-url-mappings-v2026-09.json GET /url-mappings/2026-09/url-mappings/{id} Obtén una asignación de URL específica usando su identificador único. Este punto de terminación es útil para obtener detalles sobre una configuración particular de asignación de URL en tu cuenta de CRM de HubSpot. Requiere el ID de la asignación de URL como un parámetro de ruta. > **Supported products** > **Required Scopes** # Retrieve mappings Source: https://developers.hubspot.es/docs/api-reference/latest/cms/url-mappings/get-url-mappings specs/2026-09/cms-url-mappings-v2026-09.json GET /url-mappings/2026-09/url-mappings Obtén una lista de asignaciones de URL de la cuenta de HubSpot. Este punto de terminación da acceso a las configuraciones de asignación de URL, las cuales puedes usar para gestionar y hacer redireccionamientos de URL dentro del CMS de HubSpot. Es útil para entender cómo se estructuran y hacen redireccionamientos las URL en tu configuración de gestión de contenido. > **Supported products** > **Required Scopes** # Create a redirect Source: https://developers.hubspot.es/docs/api-reference/latest/cms/url-redirects/create-url-redirect specs/2026-09/cms-url-redirects-v2026-09.json POST /cms/url-redirects/2026-09 Crea un nuevo redireccionamiento de URL en la cuenta de HubSpot. Este punto de terminación permite definir la URL de destino, el estilo de redireccionamiento y el prefijo de ruta para el redireccionamiento. Es útil para gestionar los redireccionamientos de URL y asegurar que los usuarios sean dirigidos a las páginas correctas. > **Supported products** > **Required Scopes** # Delete a redirect Source: https://developers.hubspot.es/docs/api-reference/latest/cms/url-redirects/delete-url-redirect specs/2026-09/cms-url-redirects-v2026-09.json DELETE /cms/url-redirects/2026-09/{urlRedirectId} Eliminar un redireccionamiento existente, de manera que ya no esté mapeado. > **Supported products** > **Required Scopes** # Retrieve redirect details Source: https://developers.hubspot.es/docs/api-reference/latest/cms/url-redirects/get-url-redirect specs/2026-09/cms-url-redirects-v2026-09.json GET /cms/url-redirects/2026-09/{urlRedirectId} Devuelve los detalles de un único redireccionamiento de URL existente por ID. > **Supported products** > **Required Scopes** # Retrieve current redirects Source: https://developers.hubspot.es/docs/api-reference/latest/cms/url-redirects/get-url-redirects specs/2026-09/cms-url-redirects-v2026-09.json GET /cms/url-redirects/2026-09 Recupera una lista de redireccionamientos de URL en tu cuenta de HubSpot. Este punto de terminación permite filtrar los redireccionamientos según sus marcas de tiempo de creación o actualización, y ordenar los resultados. Admite la paginación y puede incluir redireccionamientos archivados si se especifica. > **Supported products** > **Required Scopes** # URL redirects API Source: https://developers.hubspot.es/docs/api-reference/latest/cms/url-redirects/guide # Update a redirect Source: https://developers.hubspot.es/docs/api-reference/latest/cms/url-redirects/update-url-redirect specs/2026-09/cms-url-redirects-v2026-09.json PATCH /cms/url-redirects/2026-09/{urlRedirectId} Actualiza la configuración de un redireccionamiento de URL existente. > **Supported products** > **Required Scopes** # Retrieve all subscription status definitions Source: https://developers.hubspot.es/docs/api-reference/latest/communication-preferences/definitions/get-subscription-definitions specs/2026-09/communication-preferences-subscriptions-v2026-09.json GET /communication-preferences/2026-09/definitions Obtener una lista de definiciones de estado de suscripción de la cuenta. > **Supported products** > **Required Scopes** # Communication preferences API guide Source: https://developers.hubspot.es/docs/api-reference/latest/communication-preferences/guide # Batch retrieve subscription statuses Source: https://developers.hubspot.es/docs/api-reference/latest/communication-preferences/status/batch/get-subscriptions specs/2026-09/communication-preferences-subscriptions-v2026-09.json POST /communication-preferences/2026-09/statuses/batch/read Recuperar por lotes los estados de suscripción de un conjunto de contactos. > **Supported products** > **Required Scopes** # Get subscription preferences for a specific contact Source: https://developers.hubspot.es/docs/api-reference/latest/communication-preferences/status/get-subscription specs/2026-09/communication-preferences-subscriptions-v2026-09.json GET /communication-preferences/2026-09/statuses/{subscriberIdString} Recuperar las preferencias actuales de suscripción por correo electrónico de un contacto. > **Supported products** > **Required Scopes** # Retrieve a contact's unsubscribed status Source: https://developers.hubspot.es/docs/api-reference/latest/communication-preferences/status/get-unsubscribed-status specs/2026-09/communication-preferences-subscriptions-v2026-09.json GET /communication-preferences/2026-09/statuses/{subscriberIdString}/unsubscribe-all Comprueba si un contacto ha cancelado todas las suscripciones de correo electrónico. Si un contacto no ha cancelado la suscripción a todas las comunicaciones, la matriz de respuesta `results` estará vacía. > **Supported products** > **Required Scopes** # Update a contact's subscription status Source: https://developers.hubspot.es/docs/api-reference/latest/communication-preferences/status/update-subscription specs/2026-09/communication-preferences-subscriptions-v2026-09.json POST /communication-preferences/2026-09/statuses/{subscriberIdString} Establecer el estado de suscripción de un contacto específico. > **Supported products** > **Required Scopes** # Batch unsubscribe contacts from all subscriptions Source: https://developers.hubspot.es/docs/api-reference/latest/communication-preferences/status/batch/unsubscribe-contacts-batch specs/2026-09/communication-preferences-subscriptions-v2026-09.json POST /communication-preferences/2026-09/statuses/batch/unsubscribe-all Cancelar la suscripción de un conjunto de contactos de todas las suscripciones de correo electrónico. > **Supported products** > **Required Scopes** # Conversations SDK Source: https://developers.hubspot.es/docs/api-reference/latest/conversations/chat-configuration/chat-widget-sdk # Integrate the HubSpot mobile chat SDK into your Android app Source: https://developers.hubspot.es/docs/api-reference/latest/conversations/chat-configuration/mobile-chat-sdk/android # Integrate the HubSpot mobile chat SDK into your iOS app Source: https://developers.hubspot.es/docs/api-reference/latest/conversations/chat-configuration/mobile-chat-sdk/ios # Running code snippets in bots Source: https://developers.hubspot.es/docs/api-reference/latest/conversations/chat-configuration/working-with-chatbots # Retrieve actor Source: https://developers.hubspot.es/docs/api-reference/latest/conversations/conversations/actors/get-actor specs/2026-09/conversations-conversations-v2026-09.json GET /conversations/conversations/2026-09/actors/{actorId} Obtén información sobre un actor específico en el sistema de conversaciones usando su ID de actor único. Este punto de terminación es útil para obtener detalles sobre un actor en particular, que podría ser un agente, un bot u otra entidad que participe en las conversaciones. > **Supported products** > **Required Scopes** # Batch retrieve actors Source: https://developers.hubspot.es/docs/api-reference/latest/conversations/conversations/actors/get-actors specs/2026-09/conversations-conversations-v2026-09.json POST /conversations/conversations/2026-09/actors/batch/read Recuperar información sobre varios actores en una operación por lotes. Este punto de terminación es útil para obtener detalles sobre varios actores en una sola solicitud, lo que agiliza los procesos de recuperación de datos. > **Supported products** > **Required Scopes** # Retrieve channel account Source: https://developers.hubspot.es/docs/api-reference/latest/conversations/conversations/channel-accounts/get-channel-account specs/2026-09/conversations-conversations-v2026-09.json GET /conversations/conversations/2026-09/channel-accounts/{channelAccountId} Obtén los detalles de una cuenta de canal específica en tu cuenta de HubSpot usando el channelAccountId único. Este punto de terminación es útil para acceder a información sobre una cuenta de canal particular, incluido su estado de archivado. > **Supported products** > **Required Scopes** # List channel accounts Source: https://developers.hubspot.es/docs/api-reference/latest/conversations/conversations/channel-accounts/get-channel-accounts specs/2026-09/conversations-conversations-v2026-09.json GET /conversations/conversations/2026-09/channel-accounts Recupera una lista de las cuentas de canal asociadas a tu cuenta de HubSpot. Este punto de terminación te permite filtrar los resultados por ID de canal, ID de bandeja de entrada y otros criterios. Es útil para gestionar y revisar las cuentas de canal vinculadas a tus conversaciones. > **Supported products** > **Required Scopes** # Retrieve channel Source: https://developers.hubspot.es/docs/api-reference/latest/conversations/conversations/channels/get-channel specs/2026-09/conversations-conversations-v2026-09.json GET /conversations/conversations/2026-09/channels/{channelId} Obtén los detalles de un canal específico en tu cuenta de HubSpot usando su identificador único. Este punto de terminación es útil para acceder a información específica del canal, que puedes usar para gestionar o analizar los canales de comunicación. > **Supported products** > **Required Scopes** # List Channels Source: https://developers.hubspot.es/docs/api-reference/latest/conversations/conversations/channels/get-channels specs/2026-09/conversations-conversations-v2026-09.json GET /conversations/conversations/2026-09/channels Obtén una lista de canales en tu cuenta de HubSpot. Este punto de terminación admite paginación y clasificación, lo que te permite gestionar grandes conjuntos de datos de forma eficaz. Utiliza este punto de terminación para obtener una visión general de todos los canales disponibles. > **Supported products** > **Required Scopes** # Conversations API Source: https://developers.hubspot.es/docs/api-reference/latest/conversations/conversations/guide # Retrieve inbox Source: https://developers.hubspot.es/docs/api-reference/latest/conversations/conversations/inbox/get-inbox specs/2026-09/conversations-conversations-v2026-09.json GET /conversations/conversations/2026-09/inboxes/{inboxId} Obtén los detalles de una bandeja de entrada específica en tu cuenta de HubSpot usando su identificador único. Este punto de terminación te permite acceder a la información de la bandeja de entrada, incluyendo si está archivada. Es útil para gestionar y organizar conversaciones en diferentes bandejas de entrada. > **Supported products** > **Required Scopes** # List inboxes Source: https://developers.hubspot.es/docs/api-reference/latest/conversations/conversations/inbox/get-inboxes specs/2026-09/conversations-conversations-v2026-09.json GET /conversations/conversations/2026-09/inboxes Obtener una lista de bandejas de entrada en tu cuenta de HubSpot. Este punto de terminación te permite paginar los resultados y ordenarlos según sea necesario. También puede filtrar para incluir solo las bandejas de entrada archivadas. > **Supported products** > **Required Scopes** # Create message Source: https://developers.hubspot.es/docs/api-reference/latest/conversations/conversations/messages/create-message specs/2026-09/conversations-conversations-v2026-09.json POST /conversations/conversations/2026-09/threads/{threadId}/messages Crea un mensaje nuevo dentro de una cadena específica en tu cuenta de HubSpot. Este punto de terminación te permite agregar mensajes a cadenas de conversaciones existentes, lo que puede ser útil para continuar discusiones o proporcionar información adicional. Asegúrate de que el threadId esté correctamente especificado para dirigirte a la cadena apropiada. > **Supported products** > **Required Scopes** # Retrieve message Source: https://developers.hubspot.es/docs/api-reference/latest/conversations/conversations/messages/get-message specs/2026-09/conversations-conversations-v2026-09.json GET /conversations/conversations/2026-09/threads/{threadId}/messages/{messageId} Obtiene un mensaje específico de una cadena de conversaciones en tu cuenta de HubSpot. Este punto de terminación te permite acceder a los detalles de un mensaje identificado por su messageId dentro de una cadena identificada por threadId. Puedes especificar ciertas propiedades para incluir en la respuesta. > **Supported products** > **Required Scopes** # Retrieve message content Source: https://developers.hubspot.es/docs/api-reference/latest/conversations/conversations/messages/get-message-content specs/2026-09/conversations-conversations-v2026-09.json GET /conversations/conversations/2026-09/threads/{threadId}/messages/{messageId}/original-content Recupera el contenido original de un mensaje específico dentro de una cadena. Este punto de terminación es útil para acceder al texto sin alterar o al contenido de texto enriquecido de un mensaje, lo cual puede ser importante para auditar o revisar la comunicación inicial en una conversación. > **Supported products** > **Required Scopes** # Retrieve messages Source: https://developers.hubspot.es/docs/api-reference/latest/conversations/conversations/messages/get-messages specs/2026-09/conversations-conversations-v2026-09.json GET /conversations/conversations/2026-09/threads/{threadId}/messages Recupera mensajes de una cadenao de conversaciones específica en tu cuenta de HubSpot. punto de terminación te permite acceder a todos los mensajes asociados con una cadena dada, lo que puede ser útil para revisar el historial de conversaciones o analizar patrones de comunicación. > **Supported products** > **Required Scopes** # Delete Assignee Source: https://developers.hubspot.es/docs/api-reference/latest/conversations/conversations/threads/delete-assignee specs/2026-09/conversations-conversations-v2026-09.json DELETE /conversations/conversations/2026-09/threads/{threadId}/assignee Elimina al responsable de una cadena de conversaciones específico en tu cuenta de HubSpot. Esta operación es útil cuando quieres anular la asignación de un usuario a una cadena, dejándolo disponible para reasignación o indicando que ya no requiere un responsable específico. > **Supported products** > **Required Scopes** # Delete thread Source: https://developers.hubspot.es/docs/api-reference/latest/conversations/conversations/threads/delete-thread specs/2026-09/conversations-conversations-v2026-09.json DELETE /conversations/conversations/2026-09/threads/{threadId} Elimina una cadena de conversaciones específica en tu cuenta de HubSpot. Esta operación elimina del sistema la cadena identificada por el threadId. Utiliza este punto de terminación para gestionar y limpiar las cadenas de conversaciones que ya no necesites. > **Supported products** > **Required Scopes** # Retrieve thread Source: https://developers.hubspot.es/docs/api-reference/latest/conversations/conversations/threads/get-thread specs/2026-09/conversations-conversations-v2026-09.json GET /conversations/conversations/2026-09/threads/{threadId} Obtén los detalles de una cadena de conversación específica usando su identificador único. Este punto de terminación te permite acceder a la información de la cadena, incluyendo sus propiedades y asociaciones. Es útil para obtener los detalles de la cadena para su posterior procesamiento o visualización. > **Supported products** > **Required Scopes** # Retrieve threads Source: https://developers.hubspot.es/docs/api-reference/latest/conversations/conversations/threads/get-threads specs/2026-09/conversations-conversations-v2026-09.json GET /conversations/conversations/2026-09/threads Obtén una lista de cadenas de conversaciones de las bandejas de entrada especificadas. Este punto de terminación permite filtrar por contacto o ticket asociado, estado de la cadena y otros parámetros. Admite paginación y clasificación para ayudar a gestionar grandes conjuntos de datos de forma eficaz. > **Supported products** > **Required Scopes** # Update assignee Source: https://developers.hubspot.es/docs/api-reference/latest/conversations/conversations/threads/update-assignee specs/2026-09/conversations-conversations-v2026-09.json PUT /conversations/conversations/2026-09/threads/{threadId}/assignee Asigna un actor específico a una cadena de conversaciones en tu cuenta de HubSpot. Este punto de terminación te permite actualizar el responsable de una cadena dada, lo que puede ser útil para gestionar la distribución de la carga de trabajo entre los miembros del equipo. > **Supported products** > **Required Scopes** # Update thread Source: https://developers.hubspot.es/docs/api-reference/latest/conversations/conversations/threads/update-thread specs/2026-09/conversations-conversations-v2026-09.json PATCH /conversations/conversations/2026-09/threads/{threadId} Actualiza los detalles de una cadena de conversaciones específica en tu cuenta de HubSpot. Este punto de terminación te permite modificar el estado u otros atributos de la cadena identificada por el threadId. Es útil para gestionar el estado de las cadenas de conversaciones, como marcarlas como abiertas o cerradas. > **Supported products** > **Required Scopes** # Custom channels API guide Source: https://developers.hubspot.es/docs/api-reference/latest/conversations/custom-channels/guide # Publish a message Source: https://developers.hubspot.es/docs/api-reference/latest/conversations/custom-channels/messages/create-custom-channel specs/2026-09/conversations-custom-channels-v2026-09.json POST /conversations/custom-channels/2026-09/{channelId}/messages Publica un mensaje en tu canal personalizado > **Supported products** > **Required Scopes** # Get a message Source: https://developers.hubspot.es/docs/api-reference/latest/conversations/custom-channels/messages/get-custom-channel specs/2026-09/conversations-custom-channels-v2026-09.json GET /conversations/custom-channels/2026-09/{channelId}/messages/{messageId} Obtener los detalles de un mensaje específico enviado a través de un canal personalizado > **Supported products** > **Required Scopes** # Update a message Source: https://developers.hubspot.es/docs/api-reference/latest/conversations/custom-channels/messages/update-custom-channel specs/2026-09/conversations-custom-channels-v2026-09.json PATCH /conversations/custom-channels/2026-09/{channelId}/messages/{messageId} Actualiza el estado de un mensaje para indicar si se ha enviado correctamente, si ha fallado el envío o si se ha leído. En el caso de los mensajes fallidos, también se puede incluir el mensaje de error correspondiente. > **Supported products** > **Required Scopes** # Conversations Source: https://developers.hubspot.es/docs/api-reference/latest/conversations/guide # Generate visitor token Source: https://developers.hubspot.es/docs/api-reference/latest/conversations/visitor-identification/create-visitor-identification specs/2026-09/conversations-visitor-identification-v2026-09.json POST /visitor-identification/2026-09/tokens/create Genera un token de identificación para un visitante del sitio web que se autenticó utilizando tu propio sistema. Un token de identificación devuelto por esta API puede utilizarse para pasar información sobre tu visitante ya autenticado al widget de chat, de modo que trate al visitante como un contacto conocido. Eso permite a los agentes de asistencia reconocer al visitante y ayudarlo con mayor eficacia. > **Supported products** > **Required Scopes** # Create calls Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/calls/batch/create-calls specs/2026-09/crm-calls-v2026-09.json POST /crm/objects/2026-09/calls/batch/create Crea un lote de llamadas. La matriz "entradas" puede contener un objeto "propiedades" para definir los valores de propiedades de cada registro, junto con una matriz "asociaciones" que defina [asociaciones](https://developers.hubspot.com/docs/guides/api/crm/associations/associations-v4) con otros registros de CRM. > **Supported products** > **Required Scopes** # Archive calls Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/calls/batch/delete-calls specs/2026-09/crm-calls-v2026-09.json POST /crm/objects/2026-09/calls/batch/archive Archiva un lote de llamadas por ID. Las llamadas eliminadas pueden restaurarse en un plazo de 90 días desde su eliminación, pero la grabación de las llamadas se eliminará de forma permanente. Más información sobre [restauración de registros de actividad](https://knowledge.hubspot.com/records/restore-deleted-activity-in-a-record). > **Supported products** > **Required Scopes** # Retrieve calls Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/calls/batch/get-calls specs/2026-09/crm-calls-v2026-09.json POST /crm/objects/2026-09/calls/batch/read Recuperar un lote de llamadas por ID. > **Supported products** > **Required Scopes** # Update calls Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/calls/batch/update-calls specs/2026-09/crm-calls-v2026-09.json POST /crm/objects/2026-09/calls/batch/update Actualizar un lote de llamadas por ID > **Supported products** > **Required Scopes** # Upsert calls Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/calls/batch/upsert-calls specs/2026-09/crm-calls-v2026-09.json POST /crm/objects/2026-09/calls/batch/upsert Crea o actualiza registros identificados por un valor único de propiedad según lo especificado por el parámetro de consulta `idProperty`. El parámetro de consulta `idProperty` se refiere a una propiedad cuyos valores son únicos para el objeto. > **Supported products** > **Required Scopes** # Create a call Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/calls/create-call specs/2026-09/crm-calls-v2026-09.json POST /crm/objects/2026-09/calls Crea una llamada con las propiedades dadas y devuelve una copia del objeto, incluyendo el ID. Se proporciona documentación y ejemplos para crear objetos estándar. > **Supported products** > **Required Scopes** # Archive a call Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/calls/delete-call specs/2026-09/crm-calls-v2026-09.json DELETE /crm/objects/2026-09/calls/{callId} Mueve un objeto identificado por `{callId}` a la papelera de reciclaje. > **Supported products** > **Required Scopes** # Retrieve a call Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/calls/get-call specs/2026-09/crm-calls-v2026-09.json GET /crm/objects/2026-09/calls/{callId} Lee un objeto identificado por `{callId}`. `{callId}` se refiere al ID de objeto interno por opción predeterminada o, de manera opcional, a cualquier valor de propiedad único especificado por el parámetro de consulta `idProperty`. Controla lo que se devuelve mediante el parámetro de consulta `properties`. > **Supported products** > **Required Scopes** # Retrieve calls Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/calls/get-calls specs/2026-09/crm-calls-v2026-09.json GET /crm/objects/2026-09/calls Lee una página de llamadas. Controla lo que se devuelve a través del parámetro de consulta `properties`. > **Supported products** > **Required Scopes** # Interacciones | Llamadas Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/calls/guide > **[Run in Postman](https://app.getpostman.com/run-collection/dd75d149eaa15806754f)** > **Requisitos de ámbito** Utiliza la API de interacciones de llamadas para registrar y gestionar llamadas en los registros del CRM y en la [página de índice de llamadas](https://knowledge.hubspot.com/es/records/view-and-filter-records). Puedes registrar llamadas [en HubSpot](https://knowledge.hubspot.com/es/records/manually-log-activities-on-records) o a través de la API de llamadas. En este artículo encontrarás los métodos básicos para la gestión de llamadas a través de la API. Para ver todos los endpoints disponibles y sus requisitos, consulta la [documentación de referencia](/docs/api-reference/crm-calls-v3/guide). ## Crear una interacción de llamada Para crear una interacción de llamada, haz una solicitud `POST` a `/crm/v3/objects/calls`. En el cuerpo de la solicitud, agrega detalles de la llamada en el objeto **propiedades**. También puedes agregar el objeto **asociaciones** para asociar la llamada con un registro existente (por ejemplo, contactos o empresas). ### Propiedades A continuación, encontrarás una lista de las propiedades de llamada predeterminadas de HubSpot que puedes incluir en el objeto de propiedades. También puedes crear propiedades personalizadas utilizando la [API de propiedades](/docs/api-reference/crm-properties-v3/guide). | Campo | Descripción | | - | - | | `hs_timestamp` | Requerido. Este campo marca la hora de creación de la llamada y determina dónde se encuentra en la cronología del registro. Puedes usar una marca de tiempo Unix en milisegundos o en formato UTC. | | `hs_call_body` | La descripción de la llamada, incluidas las notas que deseas agregar. | | `hs_call_callee_object_id` | El ID del registro de HubSpot asociado con la llamada. Este será el destinatario de la llamada para llamadas `OUTBOUND`, o quien inicia la llamada para llamadas `INBOUND`. | | `hs_call_callee_object_type` | El tipo del objeto al que pertenece el registro asociado de la llamada (por ejemplo, especifica si el registro es un contacto o una empresa). Este será el objeto del destinatario para las llamadas `OUTBOUND`, o el objeto de quien inicia las llamadas para las llamadas `INBOUND`. | | `hs_call_direction` | La dirección de la llamada desde la perspectiva del usuario de HubSpot. Si el usuario es el destinatario de la llamada, la dirección debe establecerse como `INBOUND`. Si el usuario inició la llamada, la dirección debe establecerse como `OUTBOUND`. | | `hs_call_disposition` | El resultado de la llamada. Para establecer la disposición de llamada, debes usar el valor interno de GUID. Si tu cuenta configuró [resultados personalizados para las llamadas](https://knowledge.hubspot.com/es/calling/create-custom-call-and-meeting-outcomes), puedes encontrar los GUID de la disposición usando [esta API](/docs/api-reference/crm-communications-v3/guide#get-call-engagement-dispositions). Las etiquetas de resultados predeterminadas de HubSpot y sus valores internos son:
        • Ocupado: `9d9162e7-6cf3-4944-bf63-4dff82258764`
        • Conectado: `f240bbac-87c9-4f6e-bf70-924b57d47db7`
        • Dejó mensaje en directo: `a4c4c377-d246-4b32-a13b-75a56a4cd0ff`
        • Dejó mensaje de voz: `b2cf5968-551e-4856-9783-52b3da59a7d0`
        • No hay respuesta: `73a0d17f-1163-4015-bdd5-ec830791da20`
        • Número equivocado: `17b47fee-58de-441e-a44c-c6300d46f273`
        | | `hs_call_duration` | La duración de la llamada en milisegundos. | | `hs_call_from_number` | El número de teléfono desde el que se hizo la llamada. | | `hs_call_recording_url` | La URL que almacena la grabación de la llamada. Las URL a archivos .mp3 o .wav se pueden reproducir en registros del CRM. Solo se aceptarán HTTPS o URL seguras. | | `hs_call_status` | El estado de la llamada. Los estados son `BUSY`, `CALLING_CRM_USER`, `CANCELED`, `COMPLETED`, `CONNECTING`, `FAILED`, `IN_PROGRESS`, `NO_ANSWER`, `QUEUED` y `RINGING`. | | `hs_call_title` | El título de la llamada. | | `hs_call_source` | El origen de la llamada. Esto no es obligatorio, pero es necesario para aprovechar el [pipeline de grabación y transcripciones](/docs/apps/legacy-apps/extensions/calling-extensions/recordings-and-transcriptions#log-a-call-with-your-app-s-endpoint-using-the-engagements-api). Si la propiedad está configurada, debe establecerse como `INTEGRATIONS_PLATFORM`. | | `hs_call_to_number` | El número de teléfono que recibió la llamada. | | `hubspot_owner_id` | El [ID del propietario](/docs/api-reference/crm-crm-owners-v3/guide) asociado con la llamada. Este campo determina el usuario que aparece como creador de la llamada en la cronología del registro. | | `hs_activity_type` | El tipo de llamada. Las opciones se basan en los [tipos de llamadas definidos en tu cuenta de HubSpot.](https://knowledge.hubspot.com/es/meetings-tool/how-do-i-create-and-use-call-and-meeting-types) | | `hs_attachment_ids` | Los ID de los archivos adjuntos de la llamada. Los ID de varios archivos adjuntos están separados por un punto y coma. | ### Asociaciones Para crear y asociar una llamada con registros existentes, incluye el objeto asociaciones en la solicitud. Por ejemplo, para crear una llamada y asociarla con un contacto y un ticket, el cuerpo de la solicitud podría verse así: ```json theme={null} // Example request body { "properties": { "hs_timestamp": "2021-03-17T01:32:44.872Z", "hs_call_title": "Support call", "hubspot_owner_id": "11349275740", "hs_call_body": "Resolved issue", "hs_call_duration": "3800", "hs_call_from_number": "(857) 829 5489", "hs_call_to_number": "(509) 999 9999", "hs_call_recording_url": "https://api.twilio.com/2010-04-01/Accounts/AC890b8e6fbe0d989bb9158e26046a8dde/Recordings/RE3079ac919116b2d22", "hs_call_status": "COMPLETED" }, "associations": [ { "to": { "id": 500 }, "types": [ { "associationCategory": "HUBSPOT_DEFINED", "associationTypeId": 194 } ] }, { "to": { "id": 1234 }, "types": [ { "associationCategory": "HUBSPOT_DEFINED", "associationTypeId": 220 } ] } ] } ``` En el objeto asociaciones, debes incluir lo siguiente: | Campo | Descripción | | - | - | | `to` | El registro que deseas asociar con la llamada, especificado por su valor `id` único. | | `types` | El tipo de asociación entre la llamada y el registro. Incluye `associationCategory` y `associationTypeId`. Los ID de los tipos de asociación predeterminados se enumeran en [esta página](/docs/api-reference/crm-associations-v4/guide#association-type-id-values), o puedes obtener el valor de los tipos de asociación personalizados (es decir, etiquetas) a través de la [API de asociaciones](/docs/api-reference/crm-associations-v4/guide#retrieve-association-types). | Para saber más sobre la creación de llamadas por lotes, consulta la [documentación de referencia](/docs/api-reference/crm-calls-v3/guide#post-%2Fcrm%2Fv3%2Fobjects%2Fcalls%2Fbatch%2Fcreate). ## Obtener llamadas Puedes buscar llamadas individualmente o en bloque. Obtén más información sobre la obtención de lotes consultando la [documentación de referencia](/docs/api-reference/crm-calls-v3/guide#post-%2Fcrm%2Fv3%2Fobjects%2Fcalls%2Fbatch%2Fread). Para buscar una sola llamada por su ID de llamada, haz una solicitud `GET` a `/crm/v3/objects/calls/{callId}`. Puedes incluir los siguientes parámetros en la URL de la solicitud: | Parámetro | Descripción | | - | - | | `properties` | Una lista separada por comas de las [propiedades](#call-properties-1) que se devolverán. | | `associations` | Una lista separada por comas de los tipos de objetos para obtener los ID asociados. En la respuesta no aparecerán las asociaciones que no existen. Más información sobre la [API de asociaciones.](/docs/api-reference/crm-associations-v4/guide) | Para solicitar una lista de todas las llamadas, haz una solicitud `GET` a `/crm/v3/objects/calls`. Puedes incluir los siguientes parámetros en la URL de la solicitud: | Parámetro | Descripción | | - | - | | `limit` | El número máximo de resultados que se mostrarán por página. | | `properties` | Una lista separada por comas de las [propiedades](#call-properties-1) que se devolverán. | Cuando realices una solicitud exitosa, la respuesta incluirá el `callId` que puedes usar para obtener, actualizar y eliminar la llamada. ## Identificación de los mensajes de voz frente a las llamadas grabadas Para llamadas y mensajes de voz grabados, se almacena la grabación en la propiedad `hs_call_recording_url`. Si tu cuenta tiene acceso a las [llamadas entrantes](https://knowledge.hubspot.com/es/calling/receive-calls-in-hubspot), para diferenciar entre las llamadas que se completaron y grabaron frente a las llamadas entrantes con un mensaje de voz, incluye las siguientes propiedades en tu solicitud: `hs_call_status` y `hs_call_has_voicemail`. Si una llamada tiene un mensaje de voz, el valor `hs_call_status` será `missed`, y el valor `hs_call_has_voicemail` será `true`. El valor `hs_call_has_voicemail` será `false` para una llamada entrante en la que no se dejó ningún mensaje de voz o `null` si la llamada tiene un estado distinto a perdida. ## Actualizar llamadas Puedes actualizar las llamadas individualmente o en lotes. Para actualizar una sola llamada por su ID de llamada, haz una solicitud `PATCH` a `/crm/v3/objects/calls/{callId}`. En el cuerpo de la solicitud, incluye las propiedades de llamada que deseas actualizar: ```json theme={null} //Example PATCH request to https://api.hubspot.com/crm/v3/objects/calls/{callID} { "properties": { "hs_timestamp": "2021-03-17T01:32:44.872Z", "hs_call_title": "Discovery call", "hubspot_owner_id": "11349275740", "hs_call_body": " Decision maker out, will call back tomorrow", "hs_call_duration": "3800", "hs_call_from_number": "(857) 829 5489", "hs_call_to_number": "(509) 999 9999", "hs_call_recording_url": "https://api.twilio.com/2010-04-01/Accounts/AC890b8e6fbe0d989bb9158e26046a8dde/Recordings/RE3079ac919116b2d22", "hs_call_status": "COMPLETED" } }' ``` HubSpot ignorará los valores de las propiedades de solo lectura e inexistentes. Para borrar el valor de una propiedad, pasa una cadena vacía para esa propiedad en el cuerpo de la solicitud. Obtén más información sobre la actualización por lotes consultando la [documentación de referencia](/docs/api-reference/crm-calls-v3/guide#post-%2Fcrm%2Fv3%2Fobjects%2Fcalls%2Fbatch%2Fupdate). ### Asociar llamadas existentes con registros Para asociar una llamada con registros, como un contacto y sus empresas asociadas, haz una solicitud `PUT` a `/crm/v3/objects/calls/{callId}/associations/{toObjectType}/{toObjectId}/{associationTypeId}`. La URL de la solicitud contiene los siguientes campos: | Campo | Descripción | | - | - | | `callId` | El ID de la llamada. | | `toObjectType` | El tipo de objeto con el que deseas asociar la llamada (por ejemplo, contacto o empresa) | | `toObjectId` | El ID del registro con el que deseas asociar la llamada. | | `associationTypeId` | Un identificador único para indicar el tipo de asociación entre la llamada y el otro objeto. El ID se puede representar numéricamente o con palabras separadas por guion bajo (por ejemplo, `call_to_contact`). Puedes obtener el valor a través de la [API de asociaciones](/docs/api-reference/crm-associations-v3/guide). | Por ejemplo, la URL de tu solicitud puede tener un aspecto similar al siguiente: `https://api.hubspot.com/crm/v3/objects/calls/17591596434/associations/contact/104901/194` ### Eliminar una asociación Para eliminar una asociación entre una llamada y un registro, realiza una solicitud `DELETE` en la misma URL que la anterior: `/crm/v3/objects/calls/{callId}/associations/{toObjectType}/{toObjectId}/{associationTypeId}` ## Anclar una llamada en un registro Puedes [anclar una llamada](https://knowledge.hubspot.com/es/records/pin-an-activity-on-a-record) en un registro para que permanezca en la parte superior de la cronología de actividades del registro. La llamada debe estar asociada al registro antes de poder anclarla y solo se puede anclar una actividad por registro. Para anclar una llamada, incluye el `id` de las llamadas en el campo `hs_pinned_engagement_id` al crear o actualizar un registro a través de las API de objetos. Obtén más información sobre el uso de las API de [empresas](/docs/api-reference/crm-companies-v3/guide#pin-an-activity-on-a-company-record)[,contactos](/docs/api-reference/crm-contacts-v3/guide#pin-an-activity-on-a-contact-record), [negocios](/docs/api-reference/crm-deals-v3/guide#pin-an-activity-on-a-deal-record), [tickets](/docs/api-reference/crm-tickets-v3/guide#pin-an-activity-on-a-ticket-record) y [objetos personalizados](/docs/api-reference/crm-custom-objects-v3/guide). ## Eliminar llamadas Puedes eliminar llamadas individualmente o por lotes, lo que agregará la llamada a la papelera de reciclaje en HubSpot. Más tarde podrás [restaurar la llamada desde la cronología de actividades del registro](https://knowledge.hubspot.com/es/records/restore-deleted-activity-in-a-record). Para eliminar una sola llamada por su ID, haz una solicitud `DELETE` a `/crm/v3/objects/calls/{callId}`. Para saber más sobre cómo eliminar llamadas, consulta la [documentación de referencia](/docs/api-reference/crm-calls-v3/guide#delete-%2Fcrm%2Fv3%2Fobjects%2Fcalls%2F%7Bcallid%7D). # Search for calls Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/calls/search/search-calls specs/2026-09/crm-calls-v2026-09.json POST /crm/objects/2026-09/calls/search Busca llamadas filtrando por propiedades, buscando a través de asociaciones y ordenando los resultados. Más información sobre [búsqueda de CRM](https://developers.hubspot.com/docs/guides/api/crm/search#make-a-search-request). > **Supported products** > **Required Scopes** # Update a call Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/calls/update-call specs/2026-09/crm-calls-v2026-09.json PATCH /crm/objects/2026-09/calls/{callId} Realiza una actualización parcial de un objeto identificado por `{callId}` o, de manera opcional, a cualquier valor de propiedad único según lo especificado por el parámetro de consulta `idProperty`. `{callId}` se refiere al ID de objeto interno de manera predeterminada y el parámetro de consulta `idProperty` se refiere a una propiedad cuyos valores son únicos para el objeto. Se sobrescribirán los valores de propiedad especificados. Las propiedades de solo lectura y las no existentes generarán un error. Los valores de las propiedades pueden borrarse pasando una cadena vacía. > **Supported products** > **Required Scopes** # Create emails Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/emails/batch/create-emails specs/2026-09/crm-emails-v2026-09.json POST /crm/objects/2026-09/emails/batch/create Crea un lote de objetos del CRM con propiedades específicas. Este punto de terminación permite crear de forma eficiente varios objetos en una sola solicitud, lo que puede ser útil para importaciones de datos masivas o para sincronizar datos de otros sistemas. La respuesta incluye una copia de cada objeto creado, incluyendo sus ID. > **Supported products** > **Required Scopes** # Delete emails Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/emails/batch/delete-emails specs/2026-09/crm-emails-v2026-09.json POST /crm/objects/2026-09/emails/batch/archive Archiva un lote de objetos del CRM por sus ID. Este punto de terminación es útil para gestionar grandes conjuntos de objetos que necesitan ser archivados simultáneamente, agilizando el proceso de mover varios objetos al archivo. > **Supported products** > **Required Scopes** # Retrieve emails Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/emails/batch/get-emails specs/2026-09/crm-emails-v2026-09.json POST /crm/objects/2026-09/emails/batch/read Obtén un lote de objetos del CRM por sus ID internos o valores de propiedades únicos. Este punto de terminación es útil para obtener varios objetos en una sola solicitud, lo que permite una obtención eficiente de los datos. Admite el filtrado de objetos archivados si es necesario. > **Supported products** > **Required Scopes** # Update emails Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/emails/batch/update-emails specs/2026-09/crm-emails-v2026-09.json POST /crm/objects/2026-09/emails/batch/update Actualiza un lote de objetos del CRM en HubSpot usando sus identificadores únicos. Este punto de terminación permite modificar varios objetos en una sola solicitud, lo que lo hace eficiente para actualizaciones masivas. Asegúrate de que el cuerpo de la solicitud contenga las propiedades necesarias para cada objeto que quieres actualizar. > **Supported products** > **Required Scopes** # Upsert emails Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/emails/batch/upsert-emails specs/2026-09/crm-emails-v2026-09.json POST /crm/objects/2026-09/emails/batch/upsert Crea o actualiza un lote de objetos del CRM en HubSpot usando valores de propiedades únicos. Este punto de terminación permite una gestión eficiente de múltiples objetos, ya sea creando nuevas entradas o actualizando las existentes según los identificadores únicos proporcionados. > **Supported products** > **Required Scopes** # Create an email Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/emails/create-email specs/2026-09/crm-emails-v2026-09.json POST /crm/objects/2026-09/emails Crea un objeto del CRM con las propiedades especificadas y obtén una copia del objeto, incluyendo su ID. Este punto de terminación es útil para añadir nuevos objetos a tu sistema CRM con atributos predefinidos. Se proporciona documentación y ejemplos para crear objetos estándar para ayudarte con el proceso. > **Supported products** > **Required Scopes** # Delete an email Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/emails/delete-email specs/2026-09/crm-emails-v2026-09.json DELETE /crm/objects/2026-09/emails/{emailId} Mueve un objeto identificado por `{objectId}` a la papelera de reciclaje. Esta operación te permite archivar un objeto del CRM específico por su ID único para eliminarlo de su uso activo, pero reteniéndolo en el sistema para una posible recuperación o referencia. > **Supported products** > **Required Scopes** # Retrieve an email Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/emails/get-email specs/2026-09/crm-emails-v2026-09.json GET /crm/objects/2026-09/emails/{emailId} Lee un objeto identificado por `{objectId}`. Por defecto, `{objectId}` se refiere al ID de objeto interno, pero también puede ser cualquier valor de propiedad único especificado por el parámetro de consulta `idProperty`. Puedes controlar los datos devueltos especificando el parámetro de consulta `properties`. > **Supported products** > **Required Scopes** # Retrieve emails Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/emails/get-emails specs/2026-09/crm-emails-v2026-09.json GET /crm/objects/2026-09/emails Lee una página de objetos de un tipo específico en tu cuenta de HubSpot. Puedes controlar los datos que se devuelven especificando propiedades, asociaciones y si quieres incluir registros archivados. Este punto de terminación es útil para obtener una lista de objetos del CRM con detalles y asociaciones específicos. > **Supported products** > **Required Scopes** # Interacciones | Correos electrónicos Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/emails/guide > **[Run in Postman](https://app.getpostman.com/run-collection/dd75d149eaa15806754f)** > **Requisitos de ámbito** Usa la API de interacción de correo electrónico para registrar y gestionar correos en los registros del CRM. Puedes registrar las actividades de correo electrónico [en HubSpot](https://knowledge.hubspot.com/es/records/manually-log-activities-on-records) o a través de la API de correos electrónicos. En este artículo explicamos los métodos básicos de gestión de correos electrónicos a través de la API. Para ver todos los endpoints disponibles y sus requisitos, consulta [esta documentación de referencia](/docs/api-reference/crm-emails-v3/guide). ## Crear un correo electrónico Para crear una interacción de correo electrónico, haz una solicitud `POST` a `/crm/v3/objects/emails`. En el cuerpo de la solicitud, agrega los detalles del correo electrónico en un objeto **propiedades**. También puedes agregar el objeto **asociaciones** para asociar tu nuevo correo electrónico con un registro existente (por ejemplo, contactos, empresas). ### Propiedades En el objeto propiedades, puedes incluir los siguientes campos: | Campo | Descripción | | - | - | | `hs_timestamp` | Obligatorio. Este campo marca la hora de creación del correo electrónico y determina dónde se encuentra el correo en la cronología del registro. Puedes usar una marca de tiempo Unix en milisegundos o en formato UTC. | | `hubspot_owner_id` | El [ID del propietario](/docs/api-reference/crm-crm-owners-v3/guide) asociado con el correo electrónico. Este campo determina el usuario que aparece como creador del correo electrónico en la cronología del registro. | | `hs_email_direction` | La dirección con la que se envió en el correo Los valores posibles incluyen: `EMAIL`: el correo electrónico se envió desde el CRM o se envió y se registró en el CRM con la [dirección CCO.](https://knowledge.hubspot.com/es/connected-email/log-email-in-your-crm-with-the-bcc-or-forwarding-address)`INCOMING_EMAIL`: el correo electrónico era una respuesta a un correo saliente registrado. `FORWARDED_EMAIL`: el correo electrónico se [reenvió al CRM](https://knowledge.hubspot.com/es/connected-email/log-email-in-your-crm-with-the-bcc-or-forwarding-address). | | `hs_email_html` | El cuerpo de un correo electrónico si se envía desde un registro del CRM. | | `hs_email_status` | El estado de envío del correo El valor puede ser `BOUNCED`, `FAILED`, `SCHEDULED`, `SENDING` o `SENT`. | | `hs_email_subject` | La línea de asunto del correo electrónico registrado. | | `hs_email_text` | El cuerpo del correo electrónico. | | `hs_attachment_ids` | Los ID de los archivos adjuntos al correo electrónico. Los ID de varios archivos adjuntos están separados por un punto y coma. | | `hs_email_headers` | Los encabezados del correo electrónico. El valor de esta propiedad rellenará automáticamente ciertas propiedades de correo electrónico de solo lectura. Aprende a [configurar encabezados de correo electrónico.](/docs/api-reference/crm-emails-v3/guide#set-email-headers) | Obtén más información sobre la creación de interacciones por correo electrónico por lotes consultando [esta documentación de referencia](/docs/api-reference/crm-emails-v3/guide#post-%2Fcrm%2Fv3%2Fobjects%2Femails%2Fbatch%2Fcreate). ### Propiedades de solo lectura También hay algunas propiedades de correo electrónico que son de solo lectura, y que HubSpot rellena automáticamente. Las propiedades de la tabla siguiente se rellenan automáticamente a partir del valor `hs_email_headers`. | Campo | Descripción | | - | - | | `hs_email_from_email` | La dirección de correo electrónico del remitente. | | `hs_email_from_firstname` | El nombre del remitente del correo electrónico. | | `hs_email_from_lastname` | Los apellidos del remitente del correo electrónico. | | `hs_email_to_email` | Las direcciones de correo electrónico de los destinatarios del correo electrónico. | | `hs_email_to_firstname` | Los nombres de los destinatarios del correo electrónico. | | `hs_email_to_lastname` | Los apellidos del destinatario del correo electrónico. | > [!WARNING] > > **Nota:** Al obtener un encabezado de correo electrónico, puede que haya valores tanto para `From` como para `Sender`. Suelen ser los mismos, pero como `Sender` identifica la entidad que realmente envió un correo electrónico, hay escenarios en los que los valores pueden diferir. Por ejemplo, si se envía un correo electrónico desde un alias de correo electrónico, el valor `From` hará referencia a la dirección de correo electrónico real del usuario y el valor `Sender` al alias de correo. ### Definir encabezados de correo electrónico Dado que los encabezados rellenan automáticamente las propiedades de solo lectura, es posible que quieras definir manualmente los encabezados de correo electrónico. Para definir el valor `hs_email_headers`, puedes usar una cadena de escape JSON con los siguientes datos: ```json theme={null} //Example data { "from": { "email": "from@domain.com", "firstName": "FromFirst", "lastName": "FromLast" }, "to": [ { "email": "ToFirst ToLast", "firstName": "ToFirst", "lastName": "ToLast" } ], "cc": [], "bcc": [] } ``` Por ejemplo, tu solicitud para crear un correo electrónico puede verse así: ```json theme={null} //Example request body { "properties": { "hs_timestamp": "2019-10-30T03:30:17.883Z", "hubspot_owner_id": "47550177", "hs_email_direction": "EMAIL", "hs_email_status": "SENT", "hs_email_subject": "Let's talk", "hs_email_text": "Thanks for youremail", "hs_email_headers": "{\"from\":{\"email\":\"from@domain.com\",\"firstName\":\"FromFirst\",\"lastName\":\"FromLast\"},\"sender\":{\"email\":\"sender@domain.com\",\"firstName\":\"SenderFirst\",\"lastName\":\"SenderLast\"},\"to\":[{\"email\":\"ToFirst+ToLast\",\"firstName\":\"ToFirst\",\"lastName\":\"ToLast\"}],\"cc\":[],\"bcc\":[]}" } } ``` ### Asociaciones Para crear y asociar un correo electrónico con registros existentes, incluye el objeto asociaciones en tu solicitud. Por ejemplo, para crear un correo electrónico y asociarlo con un negocio y un contacto, el cuerpo de tu solicitud podría verse de la siguiente manera: ```json theme={null} // Example request body { "properties": { "hs_timestamp": "2019-10-30T03:30:17.883Z", "hubspot_owner_id": "11349275740", "hs_email_direction": "EMAIL", "hs_email_status": "SENT", "hs_email_subject": "Let's talk", "hs_email_text": "Thanks for your interest let's find a time to connect" }, "associations": [ { "to": { "id": 601 }, "types": [ { "associationCategory": "HUBSPOT_DEFINED", "associationTypeId": 210 } ] }, { "to": { "id": 602 }, "types": [ { "associationCategory": "HUBSPOT_DEFINED", "associationTypeId": 198 } ] } ] } ``` En el objeto asociaciones, debes incluir lo siguiente: | Campo | Descripción | | - | - | | `to` | El registro que quieres asociar con el correo electrónico, especificado por su valor único `id`. | | `types` | El tipo de asociación entre el correo electrónico y el registro. Incluye `associationCategory` y `associationTypeId`. Los ID de los tipos de asociación predeterminados se enumeran en [este recurso](/docs/api-reference/crm-associations-v4/guide#association-type-id-values), y también puedes obtener el valor de los tipos de asociación personalizados (es decir, etiquetas) a través de la [API de asociaciones](/docs/api-reference/crm-associations-v4/guide#retrieve-association-types). | ## Obtener correos electrónicos Puedes obtener correos electrónicos individualmente o en bloque. Obtén más información sobre la obtención de lotes consultando [esta documentación de referencia](/docs/api-reference/crm-emails-v3/guide#post-%2Fcrm%2Fv3%2Fobjects%2Femails%2Fbatch%2Fread). Para obtener un correo electrónico individual por su ID de correo electrónico, haz una solicitud `GET` a `/crm/v3/objects/emails/{emailId}`. También puedes incluir los siguientes parámetros en la URL de la solicitud: | Parámetro | Descripción | | - | - | | `properties` | Una lista separada por comas de las propiedades que se devolverán. | | `associations` | Una lista separada por comas de los tipos de objetos para obtener los ID asociados. En la respuesta no aparecerán las asociaciones especificadas que no existan. Más información sobre la [API de asociaciones.](/docs/api-reference/crm-associations-v4/guide) | Para solicitar una lista de todos los correos electrónicos, envía una solicitud `GET` a `crm/v3/objects/emails`. Puedes incluir los siguientes parámetros en la URL de la solicitud: | Parámetro | Descripción | | - | - | | `limit` | El número máximo de resultados que se mostrarán por página. | | `properties` | Una lista separada por comas de las propiedades que se devolverán. | ## Actualizar correos electrónicos Puedes actualizar los correos electrónicos individualmente o en bloque. Para actualizar un correo electrónico individual por su ID de correo, haz una solicitud `PATCH` a `/crm/v3/objects/emails/{emailId}`. En el cuerpo de la solicitud, incluye las propiedades de correo electrónico que quieres actualizar. Por ejemplo, el cuerpo de la solicitud puede tener un aspecto similar al siguiente: ```json theme={null} // Example request body { "properties": { "hs_timestamp": "2019-10-30T03:30:17.883Z", "hubspot_owner_id": "11349275740", "hs_email_direction": "EMAIL", "hs_email_status": "SENT", "hs_email_subject": "Let's talk tomorrow", "hs_email_text": "Thanks for your interest let's find a time to connect!" } } ``` HubSpot ignorará los valores de las propiedades de solo lectura e inexistentes. Para borrar el valor de una propiedad, pasa una cadena vacía para esa propiedad en el cuerpo de la solicitud. Obtén más información sobre la actualización en bloques consultando [esta documentación de referencia](/docs/api-reference/crm-emails-v3/guide#post-%2Fcrm%2Fv3%2Fobjects%2Femails%2Fbatch%2Fupdate). ### Asociar correos electrónicos existentes con registros Para asociar un correo electrónico con registros, como un contacto y sus empresas asociadas, haz una solicitud `PUT` a `/crm/v3/objects/emails/{emailId}/associations/{toObjectType}/{toObjectId}/{associationTypeId}`. La URL de la solicitud contiene los siguientes campos: | Campo | Descripción | | - | - | | `emailId` | El ID del correo electrónico. | | `toObjectType` | El tipo de objeto con el que quieres asociar el correo electrónico (por ejemplo, contacto o empresa) | | `toObjectId` | El ID del registro con el que quieres asociar el correo electrónico. | | `associationTypeId` | Un identificador único para indicar el tipo de asociación entre el correo electrónico y el otro objeto. El ID se puede representar numéricamente o con palabras separadas por guion bajo (por ejemplo, `email_to_contact`). Puedes obtener el valor a través de la [API de asociaciones](/docs/api-reference/crm-associations-v3/guide). | Por ejemplo, la URL de tu solicitud puede tener un aspecto similar al siguiente: `https://api.hubspot.com/crm/v3/objects/emails/17691787884/associations/contact/104901/198` ### Eliminar una asociación Para eliminar una asociación entre un correo electrónico y un registro, haz una solicitud `DELETE` en la misma URL que la de arriba: `/crm/v3/objects/emails/{emailId}/associations/{toObjectType}/{toObjectId}/{associationTypeId}` ## Fijar un correo electrónico a un registro Puedes [fijar un correo electrónico](https://knowledge.hubspot.com/es/records/pin-an-activity-on-a-record) a un registro para que permanezca en la parte superior de la cronología del registro. El correo electrónico ya debe estar asociado con el registro antes de fijarlo, y solo puedes fijar una actividad por registro. Para fijar un correo electrónico, incluye el `id` del correo electrónico en el campo `hs_pinned_engagement_id` al crear o actualizar un registro a través de las API de objetos. Obtén más información sobre el uso de las API de [empresas](/docs/api-reference/crm-companies-v3/guide#pin-an-activity-on-a-company-record)[, contactos](/docs/api-reference/crm-contacts-v3/guide#pin-an-activity-on-a-contact-record), [negocios](/docs/api-reference/crm-deals-v3/guide#pin-an-activity-on-a-deal-record), [tickets](/docs/api-reference/crm-tickets-v3/guide#pin-an-activity-on-a-ticket-record) y [objetos personalizados](/docs/api-reference/crm-custom-objects-v3/guide). ## Eliminar correos electrónicos Cuando eliminas un correo electrónico, este se elimina permanentemente y no se puede restaurar. Puedes eliminar correos electrónicos individualmente o en bloque. Para eliminar un correo electrónico individual por su ID de correo electrónico, haz una solicitud `DELETE` a `/crm/v3/objects/emails/{emailId}`. Obtén más información sobre cómo eliminar correos electrónicos consultando [esta documentación de referencia](/docs/api-reference/crm-emails-v3/guide#delete-%2Fcrm%2Fv3%2Fobjects%2Femails%2F%7Bemailid%7D). # Search for emails Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/emails/search/search-emails specs/2026-09/crm-emails-v2026-09.json POST /crm/objects/2026-09/emails/search Busca objetos del CRM de un tipo específico usando varios filtros y criterios. Este punto de terminación permite realizar búsquedas complejas al especificar grupos de filtros, opciones de clasificación y propiedades para incluir en la respuesta. Es útil para obtener objetos específicos basados en parámetros de búsqueda detallados. > **Supported products** > **Required Scopes** # Update an email Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/emails/update-email specs/2026-09/crm-emails-v2026-09.json PATCH /crm/objects/2026-09/emails/{emailId} Realiza una actualización parcial de un objeto identificado por "{objectId}". "{objectId}" se refiere al ID interno del objeto, por opción predeterminada, u opcionalmente a cualquier valor de propiedad único según lo especificado por el parámetro de consulta "idProperty". Se sobrescribirán los valores de propiedad especificados. Se ignorarán las propiedades de solo lectura y las no existentes. Los valores de las propiedades pueden borrarse pasando una cadena vacía. > **Supported products** > **Required Scopes** # Create meetings Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/meetings/batch/create-meetings specs/2026-09/crm-meetings-v2026-09.json POST /crm/objects/2026-09/meetings/batch/create Crea un lote de reuniones. La matriz `inputs` puede contener un objeto `properties` para definir los valores de las propiedades del registro, junto con una matriz `associations` para definir las relaciones con otros registros de objetos. > **Supported products** > **Required Scopes** # Delete meetings Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/meetings/batch/delete-meetings specs/2026-09/crm-meetings-v2026-09.json POST /crm/objects/2026-09/meetings/batch/archive Eliminar un lote de reuniones por ID. > **Supported products** > **Required Scopes** # Retrieve meetings Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/meetings/batch/get-meetings specs/2026-09/crm-meetings-v2026-09.json POST /crm/objects/2026-09/meetings/batch/read Recupera registros por ID de registro o incluye el parámetro `idProperty` para recuperar registros por propiedad de valor único personalizada. > **Supported products** > **Required Scopes** # Update meetings Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/meetings/batch/update-meetings specs/2026-09/crm-meetings-v2026-09.json POST /crm/objects/2026-09/meetings/batch/update Actualiza un lote de mensajes por ID (`objectId`) o por un valor de propiedad único (`idProperty`). Se sobrescribirán los valores de propiedades especificados. Las propiedades de solo lectura y las no existentes generarán un error. Los valores de las propiedades pueden borrarse pasando una cadena vacía. > **Supported products** > **Required Scopes** # Upsert meetings Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/meetings/batch/upsert-meetings specs/2026-09/crm-meetings-v2026-09.json POST /crm/objects/2026-09/meetings/batch/upsert Crea o actualiza registros identificados por un valor único de propiedad según lo especificado por el parámetro de consulta `idProperty`. El parámetro de consulta `idProperty` se refiere a una propiedad cuyos valores son únicos para el objeto. > **Supported products** > **Required Scopes** # Create meeting Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/meetings/create-meeting specs/2026-09/crm-meetings-v2026-09.json POST /crm/objects/2026-09/meetings Crea una reunión con las propiedades dadas y devuelve una copia del objeto, incluyendo el ID. Se proporciona documentación y ejemplos para crear reuniones estándar. > **Supported products** > **Required Scopes** # Delete meeting Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/meetings/delete-meeting specs/2026-09/crm-meetings-v2026-09.json DELETE /crm/objects/2026-09/meetings/{meetingId} Mueve un objeto identificado por `{meetingId}` a la papelera de reciclaje. > **Supported products** > **Required Scopes** # Retrieve meeting Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/meetings/get-meeting specs/2026-09/crm-meetings-v2026-09.json GET /crm/objects/2026-09/meetings/{meetingId} Lee un objeto identificado por `{meetingId}`. `{meetingId}` se refiere al ID de objeto interno por opción predeterminada o, de manera opcional, a cualquier valor de propiedad único especificado por el parámetro de consulta `idProperty`. Controla lo que se devuelve mediante el parámetro de consulta `properties`. > **Supported products** > **Required Scopes** # Retrieve meetings Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/meetings/get-meetings specs/2026-09/crm-meetings-v2026-09.json GET /crm/objects/2026-09/meetings Lee una página de reuniones. Controla lo que se devuelve a través del parámetro de consulta `properties`. > **Supported products** > **Required Scopes** # Interacciones | Reuniones Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/meetings/guide > **[Run in Postman](https://app.getpostman.com/run-collection/dd75d149eaa15806754f)** > **Requisitos de ámbito** Usa la API de interacciones de reuniones para registrar y gestionar reuniones en los registros del CRM. Puedes registrar las actividades de las reuniones [en HubSpot](https://knowledge.hubspot.com/es/records/manually-log-activities-on-records) o a través de la API de reuniones. Puedes obtener, actualizar o eliminar las interacciones con reuniones registradas manualmente en un registro, programadas mediante la [herramienta de reuniones](https://knowledge.hubspot.com/es/meetings-tool/use-meetings) o [mediante la integración con el calendario de Google Calendar u Office 365](https://knowledge.hubspot.com/es/meetings-tool/schedule-a-meeting-on-a-record). En este artículo encontrarás los métodos básicos de gestión de reuniones a través de la API. Para ver todos los endpoints disponibles y sus requisitos, consulta la [documentación de referencia](/docs/api-reference/crm-meetings-v3/guide). ## Crear una reunión Para crear una interacción con una reunión, haz una solicitud `POST` a `/crm/v3/objects/meetings`. En el cuerpo de la solicitud, agrega los detalles de la reunión en el objeto **propiedades**. También puedes agregar un objeto **asociaciones** para asociar tu nueva reunión con un registro existente (por ejemplo, contactos, empresas). ### Propiedades En el objeto propiedades, puedes incluir los siguientes campos: | Campo | Descripción | | - | - | | `hs_timestamp` | Obligatorio. Este campo marca la fecha y hora en que ocurrió la reunión. Puedes usar una marca de tiempo Unix en milisegundos o en formato UTC. Si falta el valor de la propiedad, el valor predeterminado será `hs_meeting_start_time.` | | `hs_meeting_title` | El título de la reunión. | | `hubspot_owner_id` | El [ID del propietario](/docs/api-reference/crm-crm-owners-v3/guide) asociado con la reunión. Este campo determina el usuario que aparece como creador de la reunión en la cronología del registro. | | `hs_meeting_body` | La descripción de la reunión. | | `hs_internal_meeting_notes` | Las notas internas que tomas para tu equipo durante una reunión y que no están incluidas en la descripción de la reunión para los asistentes. | | `hs_meeting_external_url` | La URL externa del evento del calendario. Por ejemplo, podría ser un enlace al calendario de Google o al de Microsoft Outlook. | | `hs_meeting_location` | Dónde se lleva a cabo la reunión. El valor podría ser una dirección física, una sala de conferencias, un enlace de videoconferencia o un número de teléfono. Esta información aparece en la invitación de calendario del asistente. | | `hs_meeting_start_time` | La fecha y hora en que comienza la reunión. El valor de esta propiedad debe coincidir con el valor de `hs_timestamp`. | | `hs_meeting_end_time` | La fecha y hora en que termina la reunión. | | `hs_meeting_outcome` | El resultado de la reunión. Los valores del resultado son programada, completada, reprogramada, sin asistencia y cancelada. | | `hs_activity_type` | El tipo de reunión. Las opciones se basan en los [tipos de reuniones definidos en tu cuenta de HubSpot.](https://knowledge.hubspot.com/es/meetings-tool/how-do-i-create-and-use-call-and-meeting-types) | | `hs_attachment_ids` | Los ID de los archivos adjuntos de la reunión. Los ID de varios archivos adjuntos están separados por un punto y coma. | ### Asociaciones Para crear y asociar una reunión con registros existentes, incluye un objeto de asociaciones en tu solicitud. Por ejemplo, para crear y asociar una reunión con contactos, tu solicitud puede ser similar a la siguiente: ```json theme={null} // Example request body { "properties": { "hs_timestamp": "2021-03-23T01:02:44.872Z", "hubspot_owner_id": "11349275740", "hs_meeting_title": "Intro meeting", "hs_meeting_body": "The first meeting to discuss options", "hs_internal_meeting_notes": "These are the meeting notes", "hs_meeting_external_url": "https://Zoom.com/0000", "hs_meeting_location": "Remote", "hs_meeting_start_time": "2021-03-23T01:02:44.872Z", "hs_meeting_end_time": "2021-03-23T01:52:44.872Z", "hs_meeting_outcome": "SCHEDULED" }, "associations": [ { "to": { "id": 101 }, "types": [ { "associationCategory": "HUBSPOT_DEFINED", "associationTypeId": 200 } ] }, { "to": { "id": 102 }, "types": [ { "associationCategory": "HUBSPOT_DEFINED", "associationTypeId": 200 } ] } ] } ``` El objeto asociaciones debe incluir: | Campo | Descripción | | - | - | | `to` | El registro que quieres asociar con la reunión, especificado por su valor `id` único. | | `types` | El tipo de asociación entre la reunión y el registro. Incluye `associationCategory`y `associationTypeId`. Los ID de los tipos de asociación predeterminados se enumeran en [este recurso](/docs/api-reference/crm-associations-v4/guide#association-type-id-values), y también puedes obtener el valor de los tipos de asociación personalizados (es decir, etiquetas) a través de la [API de asociaciones](/docs/api-reference/crm-associations-v4/guide#retrieve-association-types). | Obtén más información sobre la creación de reuniones por lotes consultando [esta documentación de referencia](/docs/api-reference/crm-meetings-v3/guide#post-%2Fcrm%2Fv3%2Fobjects%2Fmeetings%2Fbatch%2Fcreate). ## Obtener reuniones Puedes obtener la información de reuniones individualmente o en bloque. Obtén más información sobre la obtención de lotes consultando [esta documentación de referencia](/docs/api-reference/crm-meetings-v3/guide#post-%2Fcrm%2Fv3%2Fobjects%2Fmeetings%2Fbatch%2Fread). Para obtener la información de una reunión individual por su ID, haz una solicitud `GET` a `/crm/v3/objects/meetings/{meetingId}`. También puedes incluir los siguientes parámetros en la URL de la solicitud: | Parámetro | Descripción | | - | - | | `properties` | Una lista separada por comas de las propiedades que se devolverán. | | `associations` | Una lista separada por comas de los objetos de los que quieres obtener los ID de registro asociados. | Para solicitar una lista de todas las reuniones, haz una solicitud `GET` a `crm/v3/objects/meetings`. Puedes incluir los siguientes parámetros en la URL de la solicitud: | Parámetro | Descripción | | - | - | | `limit` | El número máximo de resultados que se mostrarán por página. | | `properties` | Una lista separada por comas de las propiedades que se devolverán. | ## Actualizar reuniones Puedes actualizar las reuniones individualmente o en bloque. Para actualizar una reunión individual por su ID de reunión, haz una solicitud `PATCH` a `/crm/v3/objects/meetings/{meetingId}`. En el cuerpo de la solicitud, incluye las propiedades de la reunión que deseas actualizar. Por ejemplo, el cuerpo de la solicitud puede tener un aspecto similar a este: ```json theme={null} //Example PATCH request to https://api.hubspot.com/crm/v3/objects/meetings/{meetingId} { "properties": { "hs_timestamp": "2019-10-30T03:30:17.883Z", "hubspot_owner_id": "11349275740", "hs_meeting_title": "Intro meeting", "hs_meeting_body": "The first meeting to discuss options", "hs_internal_meeting_notes": "These are the meeting notes", "hs_meeting_external_url": "https://Zoom.com/0000", "hs_meeting_location": "Remote", "hs_meeting_start_time": "2021-03-23T01:02:44.872Z", "hs_meeting_end_time": "2021-03-23T01:52:44.872Z", "hs_meeting_outcome": "SCHEDULED" } }' ``` HubSpot ignorará los valores de las propiedades de solo lectura e inexistentes. Para borrar el valor de una propiedad, pasa una cadena vacía para esa propiedad en el cuerpo de la solicitud. Obtén más información sobre la actualización en bloque consultando [esta documentación de referencia](/docs/api-reference/crm-meetings-v3/guide#post-%2Fcrm%2Fv3%2Fobjects%2Fmeetings%2Fbatch%2Fupdate). ### Asociar reuniones existentes con registros Para asociar una reunión con registros, como un contacto y sus empresas asociadas, haz una solicitud `PUT` a `/crm/v3/objects/meetings/{meetingId}/associations/{toObjectType}/{toObjectId}/{associationTypeId}`. La URL de la solicitud contiene los siguientes campos: | Campo | Descripción | | - | - | | `meetingId` | El ID de la reunión. | | `toObjectType` | El tipo de objeto con el que quieres asociar la reunión (por ejemplo, un contacto o una empresa) | | `toObjectId` | El ID del registro con el que quieres asociar la reunión. | | `associationTypeId` | El ID del tipo de asociación entre la reunión y el otro tipo de objeto. Puedes obtener este valor a través de la [API de asociaciones](/docs/api-reference/crm-associations-v3/guide). | Por ejemplo, la URL de tu solicitud puede tener un aspecto similar al siguiente: `https://api.hubspot.com/crm/v3/objects/meetings/17612479134/associations/contact/104901/200` ### Eliminar una asociación Para eliminar una asociación entre una reunión y un registro, haz una solicitud `DELETE` en la misma URL que la anterior: `/crm/v3/objects/meetings/{meetingId}/associations/{toObjectType}/{toObjectId}/{associationTypeId}` ## Fijar una reunión a un registro Puedes [fijar una reunión](https://knowledge.hubspot.com/es/records/pin-an-activity-on-a-record) a un registro para que permanezca en la parte superior de la cronología del registro. La reunión ya debe estar asociada con el registro antes de fijarla, y solo puedes fijar una actividad por registro. Para fijar una reunión, incluye el `id` de la reunión en el campo `hs_pinned_engagement_id` al crear o actualizar un registro a través de las API de objetos. Obtén más información sobre el uso de las API de [empresas](/docs/api-reference/crm-companies-v3/guide#pin-an-activity-on-a-company-record), [contactos](/docs/api-reference/crm-contacts-v3/guide#pin-an-activity-on-a-contact-record), [negocios](/docs/api-reference/crm-deals-v3/guide#pin-an-activity-on-a-deal-record), [tickets](/docs/api-reference/crm-tickets-v3/guide#pin-an-activity-on-a-ticket-record), y [objetos personalizados](/docs/api-reference/crm-custom-objects-v3/guide). ## Eliminar reuniones Puedes eliminar reuniones individualmente o por lotes, lo que agregará la reunión a la papelera de reciclaje en HubSpot. Más tarde podrás [restaurar la reunión desde la cronología del registro.](https://knowledge.hubspot.com/es/records/restore-deleted-activity-in-a-record) Para eliminar una reunión individual por su ID de reunión, haz una solicitud `DELETE` a `/crm/v3/objects/meetings/{meetingId}`. Para saber más sobre la eliminación por lotes, consulta [esta documentación de referencia](/docs/api-reference/crm-meetings-v3/guide#delete-%2Fcrm%2Fv3%2Fobjects%2Fmeetings%2F%7Bmeetingid%7D). # Search for meetings Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/meetings/search/search-meetings specs/2026-09/crm-meetings-v2026-09.json POST /crm/objects/2026-09/meetings/search Busca reuniones filtrando por propiedades, buscando en asociaciones y ordenando los resultados. > **Supported products** > **Required Scopes** # Update meeting Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/meetings/update-meeting specs/2026-09/crm-meetings-v2026-09.json PATCH /crm/objects/2026-09/meetings/{meetingId} Realiza una actualización parcial de un objeto identificado por `{meetingId}` o, de manera opcional, a cualquier valor de propiedad único según lo especificado por el parámetro de consulta `idProperty`. `{meetingId}` se refiere al ID de objeto interno de manera predeterminada y el parámetro de consulta `idProperty` se refiere a una propiedad cuyos valores son únicos para el objeto. Se sobrescribirán los valores de propiedad especificados. Las propiedades de solo lectura y las no existentes generarán un error. Los valores de las propiedades pueden borrarse pasando una cadena vacía. > **Supported products** > **Required Scopes** # Create notes Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/notes/batch/create-notes specs/2026-09/crm-notes-v2026-09.json POST /crm/objects/2026-09/notes/batch/create Para crear varias notas en una sola solicitud, proporciona las propiedades necesarias para cada nota. Esta operación devuelve las notas creadas con sus identificadores únicos. > **Supported products** > **Required Scopes** # Delete notes Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/notes/batch/delete-notes specs/2026-09/crm-notes-v2026-09.json POST /crm/objects/2026-09/notes/batch/archive Archiva varias notas por sus ID en una sola solicitud. Esta operación mueve las notas especificadas a la papelera de reciclaje, lo que las vuelve inaccesibles desde consultas regulares. > **Supported products** > **Required Scopes** # Retrieve notes Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/notes/batch/get-notes specs/2026-09/crm-notes-v2026-09.json POST /crm/objects/2026-09/notes/batch/read Recupera registros por ID de registro o incluye el parámetro `idProperty` para recuperar registros por propiedad de valor único personalizada. > **Supported products** > **Required Scopes** # Update notes Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/notes/batch/update-notes specs/2026-09/crm-notes-v2026-09.json POST /crm/objects/2026-09/notes/batch/update Para actualizar varias notas, utiliza sus ID internos o valores de propiedad únicos. Esta operación permite modiificar las propiedades de varias notas en una sola solicitud, lo que agiliza el proceso de gestión de datos de notas en lote. > **Supported products** > **Required Scopes** # Upsert notes Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/notes/batch/upsert-notes specs/2026-09/crm-notes-v2026-09.json POST /crm/objects/2026-09/notes/batch/upsert Crea o actualiza registros identificados por un valor único de propiedad según lo especificado por el parámetro de consulta `idProperty`. El parámetro de consulta `idProperty` se refiere a una propiedad cuyos valores son únicos para el objeto. > **Supported products** > **Required Scopes** # Create note Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/notes/create-note specs/2026-09/crm-notes-v2026-09.json POST /crm/objects/2026-09/notes Crea una nota con las propiedades dadas y devuelve una copia del objeto, incluyendo el ID. Se proporciona documentación y ejemplos para crear notas estándar. > **Supported products** > **Required Scopes** # Delete a note Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/notes/delete-note specs/2026-09/crm-notes-v2026-09.json DELETE /crm/objects/2026-09/notes/{noteId} Mueve un objeto identificado por `{noteId}` a la papelera de reciclaje. > **Supported products** > **Required Scopes** # Retrieve note Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/notes/get-note specs/2026-09/crm-notes-v2026-09.json GET /crm/objects/2026-09/notes/{noteId} Lee un objeto identificado por `{noteId}`. `{noteId}` se refiere al ID de objeto interno por opción predeterminada o, de manera opcional, a cualquier valor de propiedad único especificado por el parámetro de consulta `idProperty`. Controla lo que se devuelve mediante el parámetro de consulta `properties`. > **Supported products** > **Required Scopes** # Retrieve a note Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/notes/get-notes specs/2026-09/crm-notes-v2026-09.json GET /crm/objects/2026-09/notes Lee una página de notas. Controla lo que se devuelve a través del parámetro de consulta `properties`. > **Supported products** > **Required Scopes** # Interacciones | Notas Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/notes/guide > **[Run in Postman](https://app.getpostman.com/run-collection/dd75d149eaa15806754f)** > **Requisitos de ámbito** Puedes añadir notas en los registros del CRM para incluir información a la cronología del registro o asociar archivos adjuntos. Por ejemplo, si necesitas hacer seguimiento de una conversación offline que tuviste con un contacto, puedes agregar una nota a su registro de contacto con detalles y documentos relacionados con la conversación. Los demás usuarios de la cuenta podrán ver esa nota y hacer referencia a ella. Puedes [gestionar las notas en HubSpot](https://knowledge.hubspot.com/es/records/manually-log-activities-on-records) o a través de la API de notas. En este artículo encontrarás los métodos básicos de gestión de notas a través de la API. Puedes ver todos los endpoints disponibles en la [documentación de referencia](/docs/api-reference/crm-notes-v3/guide). ## Crear una nota Para crear una nota, haz una solicitud `POST` a `/crm/v3/objects/notes`. En el cuerpo de la solicitud, agrega detalles de la nota en el objeto **propiedades**. También puedes agregar el objeto **asociaciones** para asociar la nueva nota con un registro existente (por ejemplo, contactos o empresas). ### Propiedades En el objeto propiedades, puedes incluir los siguientes campos: | Campo | Descripción | | - | - | | `hs_timestamp` | Requerido. Este campo marca la hora de creación de la nota y determina dónde se encuentra la nota en la cronología del registro. Puedes usar una marca de tiempo Unix en milisegundos o en formato UTC. | | `hs_note_body` | El contenido del texto de la nota está limitado a 65.536 caracteres. | | `hubspot_owner_id` | El [ID del propietario](/docs/api-reference/crm-crm-owners-v3/guide) asociado con la nota. Este campo determina el usuario que aparece como creador de la nota en la cronología del registro. | | `hs_attachment_ids` | Los ID de los archivos adjuntos a la nota. Los ID de varios archivos adjuntos deben estar separados por un punto y coma. | ### Asociaciones Para crear y asociar una nota con registros existentes, incluye un objeto de asociaciones en la solicitud. Por ejemplo, para crear una nota y asociarla con una empresa y un negocio, el cuerpo de la solicitud podría ser similar a la siguiente: ```json theme={null} // Example POST request to https://api.hubspot.com/crm/v3/objects/notes { "properties": { "hs_timestamp": "2021-11-12T15:48:22Z", "hs_note_body": "Spoke with decision maker Carla. Attached the proposal and draft of contract.", "hubspot_owner_id": "14240720", "hs_attachment_ids": "24332474034;24332474044" }, "associations": [ { "to": { "id": 301 }, "types": [ { "associationCategory": "HUBSPOT_DEFINED", "associationTypeId": 190 } ] }, { "to": { "id": 401 }, "types": [ { "associationCategory": "HUBSPOT_DEFINED", "associationTypeId": 214 } ] } ] } ``` El objeto asociaciones, debe incluir lo siguiente: | Campo | Descripción | | - | - | | `to` | El registro que quieres asociar con la nota, especificado por el valor de `id` único. | | `types` | El tipo de asociación entre la nota y el registro. Incluye `associationCategory` y `associationTypeId`. Los ID de los tipos de asociación predeterminados se enumeran en [esta página](/docs/api-reference/crm-associations-v4/guide#association-type-id-values), o puedes obtener el valor de los tipos de asociación personalizados (es decir, etiquetas) a través de la [API de asociaciones](/docs/api-reference/crm-associations-v4/guide#retrieve-association-types). | Más información sobre la creación de notas por lotes en la [documentación de referencia](/docs/api-reference/crm-notes-v3/guide#post-%2Fcrm%2Fv3%2Fobjects%2Fnotes%2Fbatch%2Fcreate). ## Buscar notas Puedes buscar notas individualmente o por lotes. Para buscar una nota individual, haz una solicitud `GET` a `/crm/v3/objects/notes/{noteId}`. Para obtener una lista de todas las notas, haz una solicitud `GET` a `/crm/v3/objects/notes`. En estos endpoints, puedes incluir los siguientes parámetros de consulta en la URL de la solicitud: | Parámetro | Descripción | | - | - | | `properties` | Una lista separada con comas de las propiedades que estarán en la respuesta. Si la nota solicitada no tiene un valor en la propiedad, no aparecerá en la respuesta. | | `associations` | Una lista separada por comas de los tipos de objetos para obtener los ID asociados. En la respuesta no aparecerán las asociaciones especificadas que no existan. Encuentra más información sobre la [API de asociaciones](/docs/api-reference/crm-associations-v4/guide). | Por ejemplo, para obtener las notas con el contenido del texto y cualquier ID de contacto asociado, la URL de la solicitud puede ser similar a este: `https://api.hubapi.com/crm/v3/objects/notes?limit=10&properties=hs_note_body&associations=contact&archived=false`. Obtén más información sobre cómo obtener un lote de notas por el ID interno o el valor de propiedad único en la [documentación de referencia](/docs/api-reference/crm-notes-v3/guide#post-%2Fcrm%2Fv3%2Fobjects%2Fnotes%2Fbatch%2Fread). ## Actualizar notas Puedes actualizar las notas individualmente o por lotes. Para actualizar una nota individual por su ID, haz una solicitud `PATCH` a `/crm/v3/objects/notes/{noteId}`. En el cuerpo de la solicitud, incluye las propiedades de nota que deseas actualizar: ```json theme={null} // Example PATCH request to https://api.hubspot.com/crm/v3/objects/notes/{noteID} { "properties": { "hs_note_body": "Spoke with decision maker Carla.", "hs_attachment_ids": "24332474034;24332474044" } } ``` HubSpot ignorará los valores de las propiedades de solo lectura e inexistentes. Para borrar el valor de una propiedad, pasa una cadena vacía para esa propiedad en el cuerpo de la solicitud. Más información sobre la actualización de notas por lotes en la [documentación de referencia](/docs/api-reference/crm-notes-v3/guide#post-%2Fcrm%2Fv3%2Fobjects%2Fnotes%2Fbatch%2Fupdate). ### Asociar notas existentes con registros Para asociar una nota con otros registros del CRM, como un contacto, haz una solicitud `PUT` a `/crm/v3/objects/notes/{noteId}/associations/{toObjectType}/{toObjectId}/{associationTypeId}`. La URL de la solicitud contiene los siguientes campos: | Campo | Descripción | | - | - | | `noteId` | El ID de la nota. | | `toObjectType` | El tipo de objeto con el que quieres asociar la nota (por ejemplo, contacto o empresa) | | `toObjectId` | El ID del registro con el que quieres asociar la nota. | | `associationTypeId` | Un identificador único para indicar el tipo de asociación entre la nota y el otro objeto. El ID se puede representar de forma numérica o con palabras separadas por un guion bajo (por ejemplo, `note_to_contact`). Puedes obtener el valor a través de la [API de asociaciones](/docs/api-reference/crm-associations-v3/guide). | Por ejemplo, la URL de la solicitud puede verse similar al siguiente: `https://api.hubspot.com/crm/v3/objects/notes/17147287858/associations/contact/581751/202` ### Eliminar una asociación Para eliminar una asociación entre una nota y un registro, haz una solicitud `DELETE` a la misma URL que la anterior: `/crm/v3/objects/notes/{noteId}/associations/{toObjectType}/{toObjectId}/{associationTypeId}` ## Anclar una nota a un registro Puedes [anclar una nota](https://knowledge.hubspot.com/es/records/pin-an-activity-on-a-record) en un registro para que permanezca en la parte superior de la cronología del registro. La nota debe estar asociada al registro antes de poder anclarla, y solo se puede anclar una actividad por registro. Para anclar una nota, incluye el `id` de la nota en el campo `hs_pinned_engagement_id` al crear o actualizar un registro a través de las API de objetos. Obtén más información sobre el uso de las API de [empresas](/docs/api-reference/crm-companies-v3/guide#pin-an-activity-on-a-company-record)[, contactos](/docs/api-reference/crm-contacts-v3/guide#pin-an-activity-on-a-contact-record), [negocios](/docs/api-reference/crm-deals-v3/guide#pin-an-activity-on-a-deal-record), [tickets](/docs/api-reference/crm-tickets-v3/guide#pin-an-activity-on-a-ticket-record) y [objetos personalizados](/docs/api-reference/crm-custom-objects-v3/guide). ## Eliminar notas Puedes eliminar notas individualmente o por lotes, lo que agregará la nota a la papelera de reciclaje en HubSpot. Más tarde podrás [restaurar la nota desde la cronología del registro](https://knowledge.hubspot.com/es/records/restore-deleted-activity-in-a-record). Para eliminar una sola nota usando su ID, haz una solicitud `DELETE` a `/crm/v3/objects/notes/{noteId}`. Más información sobre la eliminación de notas en la [documentación de referencia](/docs/api-reference/crm-notes-v3/guide#delete-%2Fcrm%2Fv3%2Fobjects%2Fnotes%2F%7Bnoteid%7D). # Search for notes Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/notes/search/search-notes specs/2026-09/crm-notes-v2026-09.json POST /crm/objects/2026-09/notes/search Para ejecutar una búsqueda de notas, utiliza filtros, opciones de ordenamiento y otros parámetros de consulta para refinar los resultados. Este punto de terminación permite que consultas complejas ubiquen notas específicas dentro del sistema del CRM. > **Supported products** > **Required Scopes** # Update note Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/notes/update-note specs/2026-09/crm-notes-v2026-09.json PATCH /crm/objects/2026-09/notes/{noteId} Realiza una actualización parcial de un objeto identificado por `{noteId}` o, de manera opcional, a cualquier valor de propiedad único según lo especificado por el parámetro de consulta `idProperty`. `{noteId}` se refiere al ID de objeto interno de manera predeterminada y el parámetro de consulta `idProperty` se refiere a una propiedad cuyos valores son únicos para el objeto. Se sobrescribirán los valores de propiedad especificados. Las propiedades de solo lectura y las no existentes generarán un error. Los valores de las propiedades pueden borrarse pasando una cadena vacía. > **Supported products** > **Required Scopes** # Create postal mail Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/postal-mail/batch/create-postal-mail specs/2026-09/crm-postal-mail-v2026-09.json POST /crm/objects/2026-09/postal_mail/batch/create Crea un lote de objetos del CRM de un tipo específico en HubSpot. Este punto de conexión permite crear varios objetos en una sola solicitud, lo que puede ser útil para importar datos de manera eficiente o sincronizar con sistemas externos. El cuerpo de la solicitud debe incluir las propiedades de cada objeto que se va a crear. > **Supported products** > **Required Scopes** # Archive postal mail Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/postal-mail/batch/delete-postal-mail specs/2026-09/crm-postal-mail-v2026-09.json POST /crm/objects/2026-09/postal_mail/batch/archive Archiva un lote de objetos del CRM por sus ID. Este punto de conexión es útil para mover varios objetos a la papelera de reciclaje en una sola solicitud, lo que puede ayudar a optimizar la gestión de datos y los procesos de limpieza. > **Supported products** > **Required Scopes** # Retrieve postal mail Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/postal-mail/batch/get-postal-mail specs/2026-09/crm-postal-mail-v2026-09.json POST /crm/objects/2026-09/postal_mail/batch/read Obtén un lote de objetos del CRM por sus ID internos o valores de propiedades únicos. Este punto de conexión es útil para obtener varios objetos en una sola solicitud, lo que permite una obtención eficiente de los datos. Se puede especificar si se quieren incluir objetos archivados en la respuesta. > **Supported products** > **Required Scopes** # Set default association Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/postal-mail/batch/update-postal-mail specs/2026-09/crm-postal-mail-v2026-09.json PUT /crm/objects/2026-09/{fromObjectType}/{fromObjectId}/associations/default/{toObjectType}/{toObjectId} Crea el tipo de asociación predeterminado entre dos tipos de objeto específicos en el CRM. Este punto de conexión es útil para establecer una relación genérica entre diferentes objetos del CRM, como contactos y empresas, o negocios y tickets. > **Supported products** > **Required Scopes** # Update postal mail Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/postal-mail/batch/update-postal-mail-objectType specs/2026-09/crm-postal-mail-v2026-09.json POST /crm/objects/2026-09/postal_mail/batch/update Actualiza un lote de objetos del CRM en tu cuenta de HubSpot. Este punto de conexión te permite modificar varios objetos a la vez al proporcionar sus propiedades. Es útil para actualizaciones masivas, lo que garantiza la coherencia y la eficiencia en la gestión de datos del CRM. > **Supported products** > **Required Scopes** # Upsert postal mail Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/postal-mail/batch/upsert-postal-mail specs/2026-09/crm-postal-mail-v2026-09.json POST /crm/objects/2026-09/postal_mail/batch/upsert Crea o actualiza un lote de objetos del CRM por valores de propiedad única. Este punto de conexión te permite gestionar eficientemente múltiples objetos en una sola solicitud, asegurando que cada objeto se cree o actualice según los identificadores únicos proporcionados. > **Supported products** > **Required Scopes** # Create postal mail Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/postal-mail/create-postal-mail specs/2026-09/crm-postal-mail-v2026-09.json POST /crm/objects/2026-09/postal_mail Crea un objeto del CRM con las propiedades especificadas y devuelve una copia del objeto, incluyendo su ID. Este punto de conexión es útil para agregar nuevos registros a tu sistema del CRM con todos los detalles necesarios. Se proporciona documentación y ejemplos para crear objetos estándar. > **Supported products** > **Required Scopes** # Archive postal mail Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/postal-mail/delete-postal-mail specs/2026-09/crm-postal-mail-v2026-09.json DELETE /crm/objects/2026-09/postal_mail/{postalMailId} Mueve un objeto identificado por `{objectId}` a la papelera de reciclaje. Esta operación te permite archivar un objeto específico del CRM por su ID, eliminándolo de su uso activo, pero conservándolo para una posible restauración futura. > **Supported products** > **Required Scopes** # Get all postal mail Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/postal-mail/get-postal-mail specs/2026-09/crm-postal-mail-v2026-09.json GET /crm/objects/2026-09/postal_mail Lee una página de objetos de un tipo específico en tu cuenta de HubSpot. Puedes controlar los datos que se devuelven especificando qué propiedades incluir a través del parámetro de consulta `properties`. Este punto de conexión es útil para obtener una lista de objetos con atributos específicos para su posterior procesamiento o análisis. > **Supported products** > **Required Scopes** # Get postal mail Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/postal-mail/get-postal-mail-objectId specs/2026-09/crm-postal-mail-v2026-09.json GET /crm/objects/2026-09/postal_mail/{postalMailId} Lee un objeto identificado por `{objectId}` en el `{objectType}` especificado. Por opción predeterminada, `{objectId}` se refiere al ID de objeto interno, pero puede especificar una propiedad única usando el parámetro de consulta `idProperty`. Puedes controlar los datos devueltos usando el parámetro de consulta `properties` para especificar qué propiedades incluir en la respuesta. > **Supported products** > **Required Scopes** # Postal Mail API Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/postal-mail/guide # Search for postal mail Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/postal-mail/search/search-postal-mail specs/2026-09/crm-postal-mail-v2026-09.json POST /crm/objects/2026-09/postal_mail/search Busca objetos del CRM de un tipo específico usando varios filtros y criterios. Este punto de conexión permite hacer consultas complejas para obtener objetos que coincidan con tus condiciones especificadas. Es útil para encontrar objetos específicos basados en sus propiedades o asociaciones. > **Supported products** > **Required Scopes** # Update postal mail Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/postal-mail/update-postal-mail specs/2026-09/crm-postal-mail-v2026-09.json PATCH /crm/objects/2026-09/postal_mail/{postalMailId} Realiza una actualización parcial de un objeto identificado por "{objectId}". "{objectId}" se refiere al ID interno del objeto, por opción predeterminada, u opcionalmente a cualquier valor de propiedad único según lo especificado por el parámetro de consulta "idProperty". Se sobrescribirán los valores de propiedad especificados. Se ignorarán las propiedades de solo lectura y las no existentes. Los valores de las propiedades pueden borrarse pasando una cadena vacía. > **Supported products** > **Required Scopes** # Update postal mail Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/postal-mail/update-postal-mail-objectId specs/2026-09/crm-postal-mail-v2026-09.json PATCH /crm/objects/2026-09/postal_mail/{postalMailId} Realiza una actualización parcial de un objeto identificado por "{objectId}". "{objectId}" se refiere al ID interno del objeto, por opción predeterminada, u opcionalmente a cualquier valor de propiedad único según lo especificado por el parámetro de consulta "idProperty". Se sobrescribirán los valores de propiedad especificados. Se ignorarán las propiedades de solo lectura y las no existentes. Los valores de las propiedades pueden borrarse pasando una cadena vacía. > **Supported products** > **Required Scopes** # Create a recurring task Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/task-series/create-tasks-series specs/2026-09/crm-tasks-series-v2026-09.json POST /crm/task-series/2026-09 Crea una nueva serie de tareas en el CRM de HubSpot. Este punto de terminación te permite iniciar una serie de tareas proporcionando las propiedades necesarias y los detalles de la serie. Es útil para automatizar secuencias de tareas repetitivas dentro de tus workflows del CRM. > **Supported products** > **Required Scopes** # Retrieve recurring task Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/task-series/get-tasks-series specs/2026-09/crm-tasks-series-v2026-09.json GET /crm/task-series/2026-09/{taskId} Obtén los detalles de una serie de tareas específica usando su identificador único. Este punto de conexión te permite acceder a las propiedades y la información de la serie asociada con el taskId especificado. Es útil para obtener información detallada sobre una serie de tareas, incluyendo las propiedades personalizadas. > **Supported products** > **Required Scopes** # Task series API Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/task-series/guide # Update recurring task Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/task-series/update-tasks-series specs/2026-09/crm-tasks-series-v2026-09.json PATCH /crm/task-series/2026-09/{taskId} Actualiza los detalles de una serie de tareas específica en tu cuenta de HubSpot. Este punto de terminación te permite modificar las propiedades y configuraciones de la serie para la tarea identificada por el taskId. Úsalo para ajustar la programación de tareas o actualizar la información relacionada con ellas. > **Supported products** > **Required Scopes** # HubSpot CRM embed Source: https://developers.hubspot.es/docs/api-reference/latest/crm/embed # CRM Search API Source: https://developers.hubspot.es/docs/api-reference/latest/crm/search-the-crm # Understanding the CRM APIs Source: https://developers.hubspot.es/docs/api-reference/latest/crm/understanding-the-crm # Using Object APIs Source: https://developers.hubspot.es/docs/api-reference/latest/crm/using-object-apis # Stop recurring task Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/task-series/delete-tasks-series specs/2026-09/crm-tasks-series-v2026-09.json DELETE /crm/task-series/2026-09/{taskId} Elimina una serie de tareas específica de tu cuenta de HubSpot usando su identificador único. Esta operación elimina la serie de tareas de forma permanente y no se puede deshacer. Asegúrate de tener los permisos necesarios para realizar esta acción. > **Supported products** > **Required Scopes** # Create tasks Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/tasks/batch/create-tasks specs/2026-09/crm-tasks-v2026-09.json POST /crm/objects/2026-09/tasks/batch/create Para crear varias tareas en una sola solicitud, proporciona un lote de propiedades de tarea y asociaciones. Este punto de terminación permite la creación eficiente de tareas al procesar varias tareas juntas. > **Supported products** > **Required Scopes** # Delete tasks Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/tasks/batch/delete-tasks specs/2026-09/crm-tasks-v2026-09.json POST /crm/objects/2026-09/tasks/batch/archive Para archivar un lote de tareas por sus ID, muévelas a la papelera de reciclaje. Esta operación requiere que se proporcione una lista de los ID de las tareas en el cuerpo de la solicitud. > **Supported products** > **Required Scopes** # Retrieve tasks Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/tasks/batch/get-tasks specs/2026-09/crm-tasks-v2026-09.json POST /crm/objects/2026-09/tasks/batch/read Recupera registros por ID de registro o incluye el parámetro `idProperty` para recuperar registros por propiedad de valor único personalizada. > **Supported products** > **Required Scopes** # Update tasks Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/tasks/batch/update-tasks specs/2026-09/crm-tasks-v2026-09.json POST /crm/objects/2026-09/tasks/batch/update Para actualizar varias tareas en una sola solicitud, utiliza sus ID internos o valores de propiedad únicos. Esta operación permite modiificar las propiedades de cada tarea en el lote, lo que garantiza una de gestión eficiente de datos de tareas. > **Supported products** > **Required Scopes** # Upsert tasks Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/tasks/batch/upsert-tasks specs/2026-09/crm-tasks-v2026-09.json POST /crm/objects/2026-09/tasks/batch/upsert Crea o actualiza registros identificados por un valor único de propiedad según lo especificado por el parámetro de consulta `idProperty`. El parámetro de consulta `idProperty` se refiere a una propiedad cuyos valores son únicos para el objeto. > **Supported products** > **Required Scopes** # Create a task Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/tasks/create-task specs/2026-09/crm-tasks-v2026-09.json POST /crm/objects/2026-09/tasks Crea una tarea con las propiedades dadas y devuelve una copia del objeto, incluyendo el ID. Se proporciona documentación y ejemplos para crear tareas estándar. > **Supported products** > **Required Scopes** # Delete a task Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/tasks/delete-task specs/2026-09/crm-tasks-v2026-09.json DELETE /crm/objects/2026-09/tasks/{taskId} Mueve un objeto identificado por `{taskId}` a la papelera de reciclaje. > **Supported products** > **Required Scopes** # Retrieve a task Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/tasks/get-task specs/2026-09/crm-tasks-v2026-09.json GET /crm/objects/2026-09/tasks/{taskId} Lee un objeto identificado por `{taskId}`. `{taskId}` se refiere al ID de objeto interno por opción predeterminada o, de manera opcional, a cualquier valor de propiedad único especificado por el parámetro de consulta `idProperty`. Controla lo que se devuelve mediante el parámetro de consulta `properties`. > **Supported products** > **Required Scopes** # Retrieve tasks Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/tasks/get-tasks specs/2026-09/crm-tasks-v2026-09.json GET /crm/objects/2026-09/tasks Lee una página de tareas. Controla lo que se devuelve a través del parámetro de consulta `properties`. > **Supported products** > **Required Scopes** # Tasks API Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/tasks/guide # Search for tasks Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/tasks/search/search-tasks specs/2026-09/crm-tasks-v2026-09.json POST /crm/objects/2026-09/tasks/search Ejecuta una búsqueda de tareas basada en los criterios proporcionados, incluyendo filtros, propiedades y opciones de ordenación. Esta acción permite recuperar tareas que coincidan con condiciones específicas o valores de propiedad. > **Supported products** > **Required Scopes** # Subtasks Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/tasks/subtasks-guide # Update a task Source: https://developers.hubspot.es/docs/api-reference/latest/crm/activities/tasks/update-task specs/2026-09/crm-tasks-v2026-09.json PATCH /crm/objects/2026-09/tasks/{taskId} Realiza una actualización parcial de un objeto identificado por `{taskId}` o, de manera opcional, a cualquier valor de propiedad único según lo especificado por el parámetro de consulta `idProperty`. `{taskId}` se refiere al ID de objeto interno de manera predeterminada y el parámetro de consulta `idProperty` se refiere a una propiedad cuyos valores son únicos para el objeto. Se sobrescribirán los valores de propiedad especificados. Las propiedades de solo lectura y las no existentes generarán un error. Los valores de las propiedades pueden borrarse pasando una cadena vacía. > **Supported products** > **Required Scopes** # Associate records (default) Source: https://developers.hubspot.es/docs/api-reference/latest/crm/associations/associate-records/batch/create-associations specs/2026-09/crm-associations-v2026-09.json POST /crm/associations/2026-09/{fromObjectType}/{toObjectType}/batch/associate/default Crear el tipo de asociación predeterminado (más genérico) entre dos tipos de objetos. > **Supported products** > **Required Scopes** # Associate records (labeled) Source: https://developers.hubspot.es/docs/api-reference/latest/crm/associations/associate-records/batch/create-associations-labeled specs/2026-09/crm-associations-v2026-09.json POST /crm/associations/2026-09/{fromObjectType}/{toObjectType}/batch/create Crear por lotes asociaciones de los objetos > **Supported products** > **Required Scopes** # Delete specific labels Source: https://developers.hubspot.es/docs/api-reference/latest/crm/associations/associate-records/batch/delete-association-labels specs/2026-09/crm-associations-v2026-09.json POST /crm/associations/2026-09/{fromObjectType}/{toObjectType}/batch/labels/archive Elimina por lotes etiquetas de asociación específicas de los objetos. Eliminar una asociación sin etiqueta también eliminará todas las asociaciones etiquetadas entre esos dos objetos. > **Supported products** > **Required Scopes** # Remove associations Source: https://developers.hubspot.es/docs/api-reference/latest/crm/associations/associate-records/batch/delete-associations specs/2026-09/crm-associations-v2026-09.json POST /crm/associations/2026-09/{fromObjectType}/{toObjectType}/batch/archive Eliminar asociaciones por lotes para objetos > **Supported products** > **Required Scopes** # Retrieve associations Source: https://developers.hubspot.es/docs/api-reference/latest/crm/associations/associate-records/batch/get-associations specs/2026-09/crm-associations-v2026-09.json POST /crm/associations/2026-09/{fromObjectType}/{toObjectType}/batch/read Lee por lotes las asociaciones de los objetos a un tipo de objeto específico. El campo "después" en un objeto de paginación devuelto se puede agregar junto con el "id" para recuperar la siguiente página de asociaciones de ese objectId. El campo "enlace" está obsoleto y se debe ignorar. Nota: El campo "paginación" solo estará presente si hay más páginas y, en caso contrario, estará ausente. > **Supported products** > **Required Scopes** # Remove association between records Source: https://developers.hubspot.es/docs/api-reference/latest/crm/associations/associate-records/delete-association specs/2026-09/crm-associations-v2026-09.json DELETE /crm/objects/2026-09/{objectType}/{objectId}/associations/{toObjectType}/{toObjectId} Elimina todas las asociaciones entre dos registros. > **Supported products** > **Required Scopes** # API del CRM | Asociaciones v4 Source: https://developers.hubspot.es/docs/api-reference/latest/crm/associations/associate-records/guide > **[Run in Postman](https://app.getpostman.com/run-collection/26126890-ebc9dd6f-bbd4-412b-b688-3553b6507c49)** > **Requisitos de ámbito** # Asociaciones v4 > [!WARNING] > > Para la versión anterior, consulta la documentación de la [API de asociaciones v3](/docs/api-reference/crm-associations-v3/guide). Las asociaciones representan las relaciones entre objetos y actividades en el CRM. Pueden existir asociaciones de registros entre registros de diferentes objetos (por ejemplo, contacto con empresa), así como de un mismo objeto (por ejemplo, empresa con empresa). Puedes usar los puntos de terminación de asociaciones para crear, obtener, actualizar o eliminar asociaciones entre registros o entre registros y actividades. Los puntos de terminación del esquema de asociaciones te permiten ver los tipos de asociaciones admitidos en tu cuenta, así como crear tus propios tipos de asociaciones y asignar etiquetas a las relaciones de los registros. Se admiten etiquetas de asociación entre contactos, empresas, negocios, tickets y objetos personalizados, y se pueden [usar en herramientas de HubSpot](https://knowledge.hubspot.com/object-settings/create-and-use-association-labels#use-association-labels-in-hubspot-tools), como listas y workflows. Obtén más información sobre las API de objetos, registros, propiedades y asociaciones en la guía [Comprender el CRM](/docs/guides/crm/understanding-the-crm). > [!NOTE] > > **Nota**: La API de asociaciones v4 es compatible con la versión 9.0.0 o posterior del cliente NodeJS HubSpot. ## Tipos de asociaciones definidos por HubSpot HubSpot proporciona un conjunto de tipos de asociaciones predefinidos (por ejemplo, contacto con empresa sin etiqueta), pero los administradores de cuentas pueden [definir sus propias etiquetas de asociación](https://knowledge.hubspot.com/object-settings/create-and-use-association-labels) para proporcionar información adicional de las relaciones entre los registros (por ejemplo, mánager y empleado). Existen dos tipos de asociaciones definidas por HubSpot: * **Principal:** la empresa principal con la que está asociado el otro registro. Las asociaciones principales se pueden utilizar en herramientas de HubSpot, como [listas y workflows](https://knowledge.hubspot.com/object-settings/create-and-use-association-labels#use-associations-in-hubspot-tools). En los registros con varias empresas asociadas, esta API permite cambiar cuál empresa se considera la principal. * **Sin etiqueta:** un tipo de asociación agregado cuando se asocia cualquier contacto, empresa, negocio, ticket o registro de objeto personalizado. Este tipo indica que existe una asociación y siempre se devolverá en las respuestas con un valor de **etiqueta** de `null`. Cuando un registro tiene una asociación principal o una etiqueta de asociación personalizada, esos tipos se enumerarán junto con el tipo de asociación sin etiqueta. Puedes ver todos los tipos de asociaciones definidos por HubSpot en [esta sección](#association-type-id-values). ## Etiquetas individuales vs. emparejadas Hay dos tipos de [etiquetas de asociación](https://knowledge.hubspot.com/object-settings/create-and-use-association-labels) que puedes usar para describir las relaciones entre registros: * **Individual:** una etiqueta que se aplica a ambos registros en la relación. Por ejemplo, *Amigo* o *Colega*. * **Emparejadas**: un par de etiquetas para cuando se utilizan diferentes palabras para describir cada lado de la relación de los registros asociados. Por ejemplo, *Padre* e *Hijo* o *Empleador* y *Empleado*. Para crear etiquetas emparejadas, debes incluir el campo `inverseLabel` en la solicitud para darle un nombre a la segunda etiqueta en el par. ## Crear tipos de asociaciones Puedes crear tipos de asociaciones personalizadas [en HubSpot](https://knowledge.hubspot.com/object-settings/create-and-use-association-labels) o a través del punto de terminación de la API del esquema de asociaciones. Puedes crear hasta 10 tipos de asociaciones entre cada par de objetos (por ejemplo, contactos y empresas, contactos y contactos). Para crear un tipo de asociación a través de la API, haz una solicitud `POST` a `/crm/v4/associations/{fromObjectType}/{toObjectType}/labels` e incluye lo siguiente: * **nombre**: el nombre interno del tipo de asociación. Este valor no puede incluir guiones ni comenzar con un carácter numérico. * **etiqueta**: el nombre de la [etiqueta de asociación tal como se muestra en HubSpot](https://knowledge.hubspot.com/object-settings/create-and-use-association-labels). * **inverseLabel** (solo etiquetas emparejadas): el nombre de la segunda etiqueta del par de etiquetas. Por ejemplo, tu solicitud podría tener un aspecto similar al siguiente: ```json theme={null} ///Example request body - Single label { "label": "Partner", "name": "partner" } ``` ```json theme={null} ///Example request body - Paired labels { "label": "Manager", "inverseLabel": "Employee", "name": "manager_employee" } ``` ## Obtener tipos de asociaciones Para ver los tipos de asociaciones entre objetos específicos, haz una solicitud `GET` a `/crm/v4/associations/{fromObjectType}/{toObjectType}/labels`. Recibirás una matriz en la que cada elemento contiene: * **categoría:** si el tipo de asociación fue creado por HubSpot (`HUBSPOT_DEFINED`) o por un usuario (`USER_DEFINED`). * **typeId:** el ID numérico de ese tipo de asociación. Se utiliza para [definir una etiqueta al asociar registros](#associate-with-label). Consulta [esta lista](#association-type-id-values) para ver todos los valores `typeId` definidos por HubSpot. * **etiqueta:** la etiqueta alfanumérica. Será `null` para el tipo de asociación sin etiqueta. También puedes encontrar estos valores en HubSpot en la [configuración de asociaciones](https://knowledge.hubspot.com/object-settings/create-and-use-association-labels#association-label-api-details). ## Asociar registros ### Asociar registros sin etiquetas Puedes crear una asociación sin etiqueta predeterminada entre dos registros o configurar asociaciones sin etiqueta para registros en bloque. Para configurar una asociación individual predeterminada entre dos registros, haz una solicitud `PUT` a `/crm/v4/objects/{fromObjectType}/{fromObjectId}/associations/default/{toObjectType}/{toObjectId}` En la URL de la solicitud, incluye: * `fromObjectType`**:** el ID del objeto que estás asociando. Para encontrar los valores de ID, consulta esta [lista de ID de tipos de objetos,](/docs/guides/crm/understanding-the-crm#object-type-id) o, para contactos, empresas, negocios, tickets y notas, puedes usar el nombre del objeto (por ejemplo, `contact`, `company`). * `fromObjectId`**:** el ID del registro que se asociará. * `toObjectType`**:** el ID del objeto con el que estás asociando el registro. Para encontrar los valores de ID, consulta esta [lista de ID de tipos de objetos,](/docs/guides/crm/understanding-the-crm#object-type-id) o, para contactos, empresas, negocios, tickets y notas, puedes usar el nombre del objeto (por ejemplo, `contact`, `company`). * `toObjectId`**:** el ID del registro con el que se va a hacer la asociación Por ejemplo, para asociar un registro de contacto cuyo ID es 12345 con un registro de empresa cuyo ID es `67891`, la URL de tu solicitud sería: `/crm/v4/objects/contact/12345/associations/default/company/67891`. Para configurar asociaciones predeterminadas en bloque, haz una solicitud `POST` a `crm/v4/associations/{fromObjectType}/{toObjectType}/batch/associate/default`. En el cuerpo de la solicitud, incluye valores `objectId` para los registros que quieres asociar. > [!WARNING] > > **Nota**: El número de asociaciones que puede tener un registro depende [del objeto y de tu suscripción a HubSpot.](https://legal.hubspot.com/hubspot-product-and-services-catalog#TechnicalLimits:~:text=CRM%20Record%20Association%20Limits) ### Asociar registros con etiquetas Para asociar dos registros y definir una etiqueta para describir la asociación, haz una solicitud `PUT` a `/crm/v4/objects/{objectType}/{objectId}/associations/{toObjectType}/{toObjectId}`. En el cuerpo de la solicitud, incluye `associationCategory` y `associationTypeId` para indicar el tipo de asociación que quieres crear. Si estás creando asociaciones sin etiqueta, puedes usar los puntos de terminación predeterminados descritos en la [sección anterior](#associate-records-without-a-label) que no requieren `associationCategory` ni `associationTypeId`. Si estás creando asociaciones con una etiqueta, puedes consultar esta [lista de ID de tipos predeterminados](#association-type-id-values) o tendrás que obtener los tipos de asociaciones personalizados entre esos objetos. > [!NOTE] > > **Nota**: En cuanto a las relaciones de etiquetas multiobjeto y emparejadas, asegúrate de usar el `typeId` que se refiere a la dirección correcta (por ejemplo, contacto a empresa vs. empresa a contacto, empleado a mánager vs. mánager a empleado). Por ejemplo, para asociar un contacto con un negocio usando una etiqueta personalizada: 1\. Haz una solicitud `GET` a `/crm/v4/associations/contact/deal/labels`. 2\. En la respuesta, fíjate en los valores `typeId` y `category` de la etiqueta. El ID será un número (por ejemplo, `36`), y la categoría siempre será `USER_DEFINED` para las etiquetas personalizadas. 3\. Haz una solicitud `PUT` a `/crm/v4/objects/contact/{objectId}/associations/deal/{toObjectId}`con el siguiente cuerpo: ```json theme={null} /// Example request body [ { "associationCategory": "USER_DEFINED", "associationTypeId": 36 } ] ``` ## Definir y gestionar límites de asociaciones Puedes definir [límites](https://knowledge.hubspot.com/object-settings/set-limits-for-record-associations) para el número de registros asociados entre objetos o la frecuencia con la que se puede utilizar una etiqueta para describir asociaciones. También hay [límites técnicos y límites basados en tu suscripción de HubSpot](https://legal.hubspot.com/hubspot-product-and-services-catalog). ### Crear o actualizar límites de asociaciones Puedes crear límites de asociaciones nuevos o actualizar los existentes entre los objetos. * Para crear límites, haz una solicitud `POST` a `crm/v4/associations/definitions/configurations/{fromObjectType}/{toObjectType}/batch/create`. * Para actualizar los límites existentes, haz una solicitud `POST` a `crm/v4/associations/definitions/configurations/{fromObjectType}/{toObjectType}/batch/update`. En el cuerpo de la solicitud, incluye `inputs` con lo siguiente: | Parámetro | Descripción | | - | - | | `category` | La categoría de la asociación para la que estás fijando un límite, ya sea `HUBSPOT_DEFINED` o `USER_DEFINED`. | | `typeId` | El ID numérico del tipo de asociación para la que quieres fijar un límite. Consulta [esta lista](#association-type-id-values) de valores `typeId` predeterminados u [obtén el valor](#retrieve-association-types) de las etiquetas personalizadas. | | `maxToObjectIds` | El número máximo de asociaciones permitido para el tipo de asociación. | Por ejemplo, para fijar límites para que un negocio se pueda asociar con un máximo de cinco contactos con un solo contacto con la etiqueta *punto de contacto* en un negocio, tu solicitud debería lucir así: ```json theme={null} //Example request POST crm/v4/associations/definitions/configurations/deal/contact/batch/create { "inputs": [ { "category": "HUBSPOT_DEFINED", "typeId": 3, "maxToObjectIds": 5 }, { "category": "USER_DEFINED", "typeId": 35, "maxToObjectIds": 1 } ] } ``` ### Obtener límites de asociaciones * Para leer todos los límites de asociaciones definidos, haz una solicitud `GET` a `/crm/v4/associations/definitions/configurations/all`. Se devolverán los límites de asociaciones definidos en todos los objetos. * Para leer límites de asociaciones entre dos objetos específicos, haz una solicitud `GET` a `/crm/v4/associations/definitions/configurations/{fromObjectType}/{toObjectType}`. En ambas solicitudes, la respuesta devolverá los valores de las asociaciones para `category`, `typeId`, `maxToObjectIds` y `label`. Por ejemplo, si se obtienen los límites entre negocios y contactos, la respuesta sería similar a: ```json theme={null} //Example response GET crm/v4/associations/definitions/configurations/deal/contact { "results": [ { "category": "HUBSPOT_DEFINED", "typeId": 3, "userEnforcedMaxToObjectIds": 5, "label": null } ] } ``` ### Eliminar límites de asociaciones Para eliminar límites de asociaciones específicos, haz una solicitud `POST` a `/crm/v4/associations/definitions/configurations/{fromObjectType}/{toObjectType}/batch/purge`. En el cuerpo de la solicitud, incluye los valores `category` y `typeId` de los tipos de asociaciones para los cuáles quieres eliminar los límites. Por ejemplo, para eliminar el límite *Punto de contacto* entre negocios y contactos, la solicitud luciría de esta forma: ```json theme={null} //Example request POST crm/v4/associations/definitions/configurations/deal/contact/batch/purge { "inputs": [ { "category": "USER_DEFINED", "typeId": 35 } ] } ``` Si se hace correctamente, recibirás una respuesta 204 y el límite incluido volverá al valor predeterminado del sistema (es decir, Muchos contactos pueden tener la etiqueta *Punto de contact*). ## Informes sobre alto uso de asociaciones Existen límites técnicos [en cuanto al número de asociaciones que puede tener un registro](https://legal.hubspot.com/hubspot-product-and-services-catalog). Puedes usar la API de asociaciones para obtener un informe de los registros que se están aproximando al máximo límite de asociaciones o que ya lo alcanzaron. Para obtener el informe, haz una solicitud `POST` a `crm/v4/associations/usage/high-usage-report/{userID}`. El archivo incluye registros que usan el 80% o más de su límite de asociaciones. Por ejemplo, si se puede asociar una empresa con hasta 50.000 contactos, la empresa se incluirá en el archivo si tiene 40.000 o más registros asociados. El archivo se enviará al correo del usuario cuyo ID se incluyó en la URL de la solicitud. Descubre cómo obtener ID de usuario con la [API de usuarios](/docs/api-reference/settings-user-provisioning-v3/guide). ## Valores de ID de tipos de asociaciones Las siguientes tablas incluyen los valores `associationTypeId` definidos por HubSpot que especifican el tipo de asociación. Los tipos de asociaciones varían dependiendo de los objetos incluidos y de la dirección de la asociación (por ejemplo, contacto a empresa es diferente de empresa a contacto). Si creas objetos personalizados o etiquetas de asociaciones personalizadas, los tipos de asociaciones relacionados tendrán valores `typeId` únicos que deberás [obtener](#retrieve-association-type) o localizar en la [configuración de asociaciones de HubSpot](https://knowledge.hubspot.com/object-settings/create-and-use-association-labels#association-label-api-details). > [!WARNING] > > **Nota**: Los tipos de asociaciones de empresas predeterminadas incluyen un tipo de asociación sin etiqueta y un tipo de asociación principal. Si un registro tiene más de una empresa asociada, solo una puede ser la empresa principal. Las otras asociaciones pueden ser sin etiqueta o tener etiquetas de asociación personalizadas. #### Contacto a objeto | ID de tipo | Tipo de asociación | | - | - | | `449` | Contacta a contacto | | `279` | Contacto a empresa | | `1` | Contacto a empresa (principal) | | `4` | Contacto a negocio | | `15` | Contacto a ticket | | `193` | Contacto a llamada | | `197` | Contacto a correo | | `199` | Contacto a reunión | | `201` | Contacto a nota | | `203` | Contacto a tarea | | `82` | Contacto a comunicación (mensaje SMS, de WhatsApp o de LinkedIn) | | `454` | Contacto a correo postal | | `587` | Contacto a carrito | | `508` | Contacto a pedido | | `178` | Contacto a factura | | `388` | Contacto a pago | | `296` | Contacto a suscripción | #### Empresa a objeto | ID de tipo | Tipo de asociación | | - | - | | `450` | Empresa a empresa | | `14` | Empresa secundaria a empresa principal | | `13` | Empresa principal a empresa secundaria | | `280` | Empresa a contacto | | `2` | Empresa a contacto (principal) | | `342` | Empresa a negocio | | `6` | Empresa a negocio (principal) | | `340` | Empresa a ticket | | `25` | Empresa a ticket (principal) | | `181` | Empresa a llamada | | `185` | Empresa a correo | | `187` | Empresa a reunión | | `189` | Empresa a nota | | `191` | Empresa a tarea | | `88` | Empresa a comunicación (mensaje SMS, de WhatsApp o de LinkedIn) | | `460` | Empresa a correo postal | | `180` | Empresa a factura | | `510` | Empresa a pedido | | `390` | Empresa a pago | | `298` | Empresa a suscripción | #### Negocio a objeto | ID de tipo | Tipo de asociación | | - | - | | `451` | Negocio a negocio | | `3` | Negocio a contacto | | `341` | Negocio a empresa | | `5` | Negocio a empresa (principal) | | `27` | Negocio a ticket | | `205` | Negocio a llamada | | `209` | Negocio a correo | | `211` | Negocio a reunión | | `213` | Negocio a nota | | `215` | Negocio a tarea | | `86` | Negocio a comunicación (mensaje SMS, de WhatsApp o de LinkedIn) | | `458` | Negocio a correo postal | | `313` | Negocio a división del negocio | | `19` | Negocio a elemento de pedido | | `176` | Negocio a factura | | `511` | Negocio a pedido | | `392` | Negocio a pago | | `630` | Negocio a producto | | `63` | Negocio a cotización | | `300` | Negocio a suscripción | #### Ticket a objeto | ID de tipo | Tipo de asociación | | - | - | | `452` | Ticket a ticket | | `16` | Ticket a contacto | | `339` | Ticket a empresa | | `26` | Ticket a empresa (principal) | | `28` | Ticket a negocio | | `219` | Ticket a llamada | | `223` | Ticket a correo | | `225` | Ticket a reunión | | `227` | Ticket a nota | | `229` | Ticket a tarea | | `84` | Ticket a comunicación (mensaje SMS, de WhatsApp o de LinkedIn) | | `456` | Ticket a correo postal | | `32` | Ticket a cadena | | `278` | Ticket a conversación | | `526` | Ticket a pedido | ### Lead a objeto | ID de tipo | Tipo de asociación | | - | - | | `578` | Lead a contacto principal | | `596` | Lead a llamada | | `598` | Lead a correo | | `600` | Lead a reunión | | `602` | Lead a comunicación | | `608` | Lead a contacto | | `610` | Lead a empresa | | `646` | Lead a tarea | #### Llamada a objeto | ID de tipo | Tipo de asociación | | - | - | | `194` | Llamada a contacto | | `182` | Llamada a empresa | | `206` | Llamada a negocio | | `220` | Llamada a ticket | #### Correo a objeto | ID de tipo | Tipo de asociación | | - | - | | `198` | Correo a contacto | | `186` | Correo a empresa | | `210` | Correo a negocio | | `224` | Correo a ticket | #### Reunión a objeto | ID de tipo | Tipo de asociación | | - | - | | `200` | Reunión a contacto | | `188` | Reunión a empresa | | `212` | Reunión a negocio | | `226` | Reunión a ticket | #### Nota a objeto | ID de tipo | Tipo de asociación | | - | - | | `202` | Nota a contacto | | `190` | Nota a empresa | | `214` | Nota a negocio | | `228` | Nota a ticket | #### Correo postal a objeto | ID de tipo | Tipo de asociación | | - | - | | `453` | Correo postal a contacto | | `459` | Correo postal a empresa | | `457` | Correo postal a negocio | | `455` | Correo postal a ticket | #### Cotización a objeto | ID de tipo | Tipo de asociación | | - | - | | `69` | Cotización a contacto | | `71` | Cotización a empresa | | `64` | Cotización a negocio | | `67` | Cotización a elemento de pedido | | `286` | Cotización a plantilla de cotización | | `362` | Cotización a descuento | | `364` | Cotización a tarifa | | `366` | Cotización a impuestos | | `702` | Contacto firmante (para firmas electrónicas) | | `733` | Cotización a carrito | | `408` | Cotización a factura | | `731` | Cotización a pedido | | `398` | Cotización a pago | | `304` | Cotización a suscripción | #### Tarea a objeto | ID de tipo | Tipo de asociación | | - | - | | `204` | Tarea a contacto | | `192` | Tarea a empresa | | `216` | Tarea a negocio | | `230` | Tarea a ticket | #### Comunicación (mensaje SMS, de WhatsApp o de LinkedIn) a objeto | ID de tipo | Tipo de asociación | | - | - | | `81` | Comunicación (mensaje SMS, de WhatsApp o de LinkedIn) a contacto | | `87` | Comunicación (mensaje SMS, de WhatsApp o de LinkedIn) a empresa | | `85` | Comunicación (mensaje SMS, de WhatsApp o de LinkedIn) a negocio | | `83` | Comunicación (mensaje SMS, de WhatsApp o de LinkedIn) a ticket | ### Pedido a objeto | ID de tipo | Tipo de asociación | | - | - | | `593` | Pedido a carrito | | `507` | Pedido a contacto | | `509` | Pedido a empresa | | `512` | Pedido a negocio | | `519` | Pedido a descuento | | `521` | Pedido a código de descuento | | `518` | Pedido a factura | | `513` | Pedido a elemento de pedido | | `523` | Pedido a pago | | `730` | Pedido a cotización | | `516` | Pedido a suscripción | | `726` | Pedido a tarea | | `525` | Pedido a ticket | ### Carrito a objeto | ID de tipo | Tipo de asociación | | - | - | | `586` | Carrito a contacto | | `588` | Carrito a descuento | | `590` | Carrito a elemento de pedido | | `592` | Carrito a pedido | | `732` | Carrito a cotización | | `728` | Carrito a tarea | | `594` | Carrito a ticket | ## Asociaciones v1 (anterior) Si estás usando la API de asociaciones v1, consulta la tabla que aparece abajo para obtener más información sobre qué ID usar al asociar registros. | Tipo de asociación | ID | | - | - | | Contacto a empresa | 1 | | Empresa a contacto (predeterminado) | 2 | | Empresa a contacto (todas las etiquetas) | 280 | | Negocio a contacto | 3 | | Contacto a negocio | 4 | | Negocio a empresa | 5 | | Empresa a negocio | 6 | | Empresa a interacción | 7 | | Interacción a empresa | 8 | | Contacto a interacción | 9 | | Interacción a contacto | 10 | | Negocio a interacción | 11 | | Interacción a negocio | 12 | | Empresa principal a empresa secundaria | 13 | | Empresa secundaria a empresa principal | 14 | | Contacto a ticket | 15 | | Ticket a contacto | 16 | | Ticket a interacción | 17 | | Interacción a ticket | 18 | | Negocio a elemento de pedido | 19 | | Elemento de pedido a negocio | 20 | | Empresa a ticket | 25 | | Ticket a empresa | 26 | | Negocio a ticket | 27 | | Ticket a negocio | 28 | # Report high usage Source: https://developers.hubspot.es/docs/api-reference/latest/crm/associations/associate-records/report-high-usage specs/2026-09/crm-associations-v2026-09.json POST /crm/associations/2026-09/usage/high-usage-report/{userId} Solicita un informe de todos los objetos del portal que tengan un alto uso de asociaciones > **Supported products** > **Required Scopes** # Associate records (default) Source: https://developers.hubspot.es/docs/api-reference/latest/crm/associations/associate-records/update-association specs/2026-09/crm-associations-v2026-09.json PUT /crm/objects/2026-09/{fromObjectType}/{fromObjectId}/associations/default/{toObjectType}/{toObjectId} Crear el tipo de asociación predeterminado (más genérico) entre dos tipos de objetos. > **Supported products** > **Required Scopes** # Associate records (labeled) Source: https://developers.hubspot.es/docs/api-reference/latest/crm/associations/associate-records/update-association-labeled specs/2026-09/crm-associations-v2026-09.json PUT /crm/objects/2026-09/{objectType}/{objectId}/associations/{toObjectType}/{toObjectId} Establece etiquetas de asociación entre dos registros. > **Supported products** > **Required Scopes** # Configure associations Source: https://developers.hubspot.es/docs/api-reference/latest/crm/associations/associations-schema/guide # Create association label Source: https://developers.hubspot.es/docs/api-reference/latest/crm/associations/associations-schema/labels/create-associations-label specs/2026-09/crm-associations-schema-v2026-09.json POST /crm/associations/2026-09/{fromObjectType}/{toObjectType}/labels Crear una nueva etiqueta que describa la relación entre dos tipos de objetos del CRM especificados. Esto puede ayudar a categorizar y administrar las asociaciones de manera más efectiva. > **Supported products** > **Required Scopes** # Batch create labels Source: https://developers.hubspot.es/docs/api-reference/latest/crm/associations/associations-schema/labels/create-associations-label-batch specs/2026-09/crm-associations-schema-v2026-09.json POST /crm/associations/2026-09/definitions/configurations/{fromObjectType}/{toObjectType}/batch/create Configura por lotes límites de asociación entre dos tipos de objetos. > **Supported products** > **Required Scopes** # Delete association label Source: https://developers.hubspot.es/docs/api-reference/latest/crm/associations/associations-schema/labels/delete-associations-label specs/2026-09/crm-associations-schema-v2026-09.json DELETE /crm/associations/2026-09/{fromObjectType}/{toObjectType}/labels/{associationTypeId} Eliminar una etiqueta específica de la asociación entre dos tipos de objetos del CRM. > **Supported products** > **Required Scopes** # Retrieve association labels Source: https://developers.hubspot.es/docs/api-reference/latest/crm/associations/associations-schema/labels/get-associations-label specs/2026-09/crm-associations-schema-v2026-09.json GET /crm/associations/2026-09/{fromObjectType}/{toObjectType}/labels Recuperar todas las etiquetas que describen las relaciones entre dos tipos de objetos del CRM especificados. Estas etiquetas proporcionan contexto sobre la naturaleza de las asociaciones. > **Supported products** > **Required Scopes** # Update association label Source: https://developers.hubspot.es/docs/api-reference/latest/crm/associations/associations-schema/labels/update-associations-label specs/2026-09/crm-associations-schema-v2026-09.json PUT /crm/associations/2026-09/{fromObjectType}/{toObjectType}/labels Actualizar una etiqueta existente que describa la relación entre dos tipos de objetos del CRM especificados. Esto permite modificar las etiquetas de asociación existentes para reflejar mejor la naturaleza de la relación. > **Supported products** > **Required Scopes** # Configure association limits Source: https://developers.hubspot.es/docs/api-reference/latest/crm/associations/associations-schema/limits/create-associations-limits specs/2026-09/crm-associations-schema-v2026-09.json POST /crm/associations/2026-09/definitions/configurations/{fromObjectType}/{toObjectType}/batch/create Configura por lotes límites de asociación entre dos tipos de objetos. > **Supported products** > **Required Scopes** # Remove association limits Source: https://developers.hubspot.es/docs/api-reference/latest/crm/associations/associations-schema/limits/delete-associations-limits specs/2026-09/crm-associations-schema-v2026-09.json POST /crm/associations/2026-09/definitions/configurations/{fromObjectType}/{toObjectType}/batch/purge Elimina por lotes los límites que se hayan definido para tipos de asociación entre dos tipos de objetos. > **Supported products** > **Required Scopes** # Retrieve association limits Source: https://developers.hubspot.es/docs/api-reference/latest/crm/associations/associations-schema/limits/get-all-associations-limits specs/2026-09/crm-associations-schema-v2026-09.json GET /crm/associations/2026-09/definitions/configurations/{fromObjectType}/{toObjectType} Obtén los detalles de configuración de las asociaciones entre dos tipos de objetos del CRM específicos. Usa este punto de terminación para entender los límites que se han fijado para tipos de asociaciones específicos. > **Supported products** > **Required Scopes** # Retrieve all association limits Source: https://developers.hubspot.es/docs/api-reference/latest/crm/associations/associations-schema/limits/get-associations-limits specs/2026-09/crm-associations-schema-v2026-09.json GET /crm/associations/2026-09/definitions/configurations/all Obtén todos los límites de asociaciones configurados entre objetos, que incluyen detalles sobre cómo se asocian entre sí los diferentes tipos de objetos del CRM. > **Supported products** > **Required Scopes** # Update association limits Source: https://developers.hubspot.es/docs/api-reference/latest/crm/associations/associations-schema/limits/update-associations-limits specs/2026-09/crm-associations-schema-v2026-09.json POST /crm/associations/2026-09/definitions/configurations/{fromObjectType}/{toObjectType}/batch/update Actualiza por lotes los límites de asociación que se hayan configurado entre dos tipos de objetos. > **Supported products** > **Required Scopes** # Associations overview Source: https://developers.hubspot.es/docs/api-reference/latest/crm/associations/overview # Fetch object type enablement status Source: https://developers.hubspot.es/docs/api-reference/latest/crm/crm-data-model/get-object-library specs/2026-09/crm-object-library-v2026-09.json GET /crm/object-library/2026-09/enablement Para todos los tipos de objetos que admiten habilitación, devuelve si están habilitados o deshabilitados > **Supported products** > **Required Scopes** # Is object type is enabled Source: https://developers.hubspot.es/docs/api-reference/latest/crm/crm-data-model/get-object-library-objectTypeId specs/2026-09/crm-object-library-v2026-09.json GET /crm/object-library/2026-09/enablement/{objectTypeId} Saber si el tipo de objeto está habilitado > **Supported products** > **Required Scopes** # Object Activation API Source: https://developers.hubspot.es/docs/api-reference/latest/crm/crm-data-model/guide # Start an export Source: https://developers.hubspot.es/docs/api-reference/latest/crm/exports/create-export specs/2026-09/crm-exports-v2026-09.json POST /crm/exports/2026-09/export/async Comienza exportando los datos de CRM del portal como se especifica en el cuerpo de la solicitud. > **Supported products** > **Required Scopes** # Retrieve export details Source: https://developers.hubspot.es/docs/api-reference/latest/crm/exports/get-export specs/2026-09/crm-exports-v2026-09.json GET /crm/exports/2026-09/export/{exportId} Obtener información detallada sobre una exportación específica del CRM, que incluye su estado actual y propiedades. > **Supported products** > **Required Scopes** # Retrieve export status Source: https://developers.hubspot.es/docs/api-reference/latest/crm/exports/get-export-status specs/2026-09/crm-exports-v2026-09.json GET /crm/exports/2026-09/export/async/tasks/{taskId}/status Devuelve el estado de la solicitud con el ID de tarea, incluyendo la URL del archivo resultante si el estado de la exportación es COMPLETE (COMPLETADO) > **Supported products** > **Required Scopes** # Exportaciones Source: https://developers.hubspot.es/docs/api-reference/latest/crm/exports/guide > **Requisitos de ámbito** Utiliza la API de exportaciones para exportar registros y datos de propiedades desde tu cuenta de HubSpot, obtén una URL para descargar un archivo de exportación o ver el estado de una exportación. En HubSpot, también puedes [exportar registros](https://knowledge.hubspot.com/es/import-and-export/export-records) o [ver un historial de exportaciones anteriores en tu cuenta.](https://knowledge.hubspot.com/es/import-and-export/view-a-log-of-your-users-exports-in-your-account) ## Iniciar una exportación Para iniciar una exportación, haz una solicitud `POST` a `/crm/v3/exports/export/async`. El cuerpo de la solicitud debe especificar información como el formato del archivo, el objeto y las propiedades que deseas exportar y el tipo de exportación que estás completando (por ejemplo, exportar una vista de objeto o una lista). También puedes filtrar los datos de propiedades que se exportarán en función de operadores específicos. Tanto para las exportaciones de vistas como de listas, puedes incluir los siguientes campos en tu solicitud: | Parámetro | Descripción | | - | - | | `exportType` | El tipo de exportación, ya sea `VIEW` (para exportar una vista de una página de índice de objetos) o `LIST` (para exportar una lista). | | `format` | El formato del archivo. Las opciones incluyen `XLSX`, `CSV`, o `XLS`. | | `exportName` | El nombre de la exportación. | | `language` | El idioma del archivo de exportación. Las opciones incluyen `DE`, `EN`, `ES`, `FI`, `FR`, `IT`, `JA`, `NL`, `PL`, `PT`, o `SV`. Puedes encontrar más información sobre los [idiomas compatibles aquí](https://knowledge.hubspot.com/es/help-and-resources/hubspot-language-offerings). | | `objectType` | El nombre o el ID del objeto que estás exportando. Para objetos estándar, puedes utilizar los nombres de los objetos (por ejemplo `CONTACT`), pero para objetos personalizados, debes utilizar el valor `objectTypeId`. Puedes obtener este valor haciendo una solicitud `GET` a `/crm/v3/schemas`. | | `associatedObjectType` | Los nombres o identificadores de los objetos asociados que hay que incluir en la exportación. Puedes exportar hasta cuatro objetos asociados por solicitud. Para los objetos asociados, la exportación contendrá los ID de registro asociados de ese objeto. Si solo exportas un objeto asociado o ajustas el campo `includePrimaryDisplayPropertyForAssociatedObjects` a `true`, también se exportarán los valores de la propiedad de visualización principal de los registros (por ejemplo, `name` para las empresas). | | `objectProperties` | Una lista de las propiedades que quieres incluir en tu exportación. De forma predeterminada, los nombres y valores de las propiedades se muestran con las etiquetas legibles por humanos, pero puedes solicitar los nombres y valores internos utilizando el parámetro `exportInternalValuesOptions`. | | `includePrimaryDisplayPropertyForAssociatedObjects` | Incluye este campo con el valor `true` para exportar los valores de la propiedad de visualización principal de todos los registros asociados (por ejemplo, `name` para empresas). Si solo vas a exportar un objeto asociado (indicado por el campo `associatedObjectType`), este se ajusta de forma predeterminada a `true`. Si exportas más de un objeto asociado, el valor se ajusta de forma predeterminada a `false`. | | `includeLabeledAssociations` | Incluye este campo con el valor `true` para exportar [etiquetas de asociación](https://developers.hubspot.es/docs/api-reference/latest/crm/associations/associate-records/guide#create-and-manage-association-types) que describan la relación entre los registros asociados. | | `exportInternalValuesOptions` | Incluye esta matriz para exportar los valores internos de los nombres y los valores de las propiedades. En la matriz, incluye `NAMES` para exportar los nombres internos de las propiedades (que se muestran como encabezados de las columnas) o `VALUES` para exportar los valores internos de las propiedades (por ejemplo, valores numéricos de las etapas de pipeline personalizadas o marcas de tiempo en lugar de fechas legibles por humanos). | | `overrideAssociatedObjectsPerDefinitionPerRowLimit` | Incluye este campo con el valor `true` para anular el [límite](https://developers.hubspot.es/docsguides/api/crm/exports#limits) predeterminado de 1000 asociaciones por fila. | ### Exportar una vista Si estás exportando una [vista de la página de índice](https://knowledge.hubspot.com/es/records/view-and-filter-records), el valor `exportType` debe ser `VIEW`, y puedes incluir el siguiente campo para filtrar y ordenar los registros que estás exportando: | Parámetro | Descripción | | - | - | | `publicCrmSearchRequest` | Indica qué datos deben ser exportados según ciertos valores de propiedad y consultas de búsqueda. Puedes incluir lo siguiente dentro del objeto: `filters`: las propiedades y los valores de la propiedad por los que se pueden filtrar los registros. `sorts`: el orden de los valores de una propiedad, ya sea ascendente `ASC`, o descendente, `DES`. `query`: una cadena para buscar los valores de los registros. | Por ejemplo, para exportar una vista de contactos y registros de empresas asociados, filtrados por la propiedad `email` y con los valores internos de los nombres y valores de las propiedades, tu solicitud sería similar a la siguiente: **JSON** ```json theme={null} ///Example request body { "exportType": "VIEW", "exportName": "All contacts", "format": "xlsx", "language": "DE", "objectType": "CONTACT", "exportInternalValuesOptions": ["NAMES", "VALUES"], "objectProperties": ["email", "firstname", "lastname"], "associatedObjectType": "COMPANY", "publicCrmSearchRequest": { "filters": [ { "value": "hello@test.com", "propertyName": "email", "operator": "EQ" } ], "query": "hello", "sorts": [ { "propertyName": "email", "order": "ASC" } ] } } ``` ### Exportar una lista Si estás exportando una [lista](https://knowledge.hubspot.com/es/segments/create-active-or-static-lists), el valor `exportType` debe ser `LIST`, pero también debes especificar la lista que estás exportando con el siguiente campo: | Parámetro | Descripción | | - | - | | `listId` | El [ID de lista ILS](https://knowledge.hubspot.com/es/segments/troubleshoot-lists#ils-list) de la lista a exportar. Puedes encontrar el valor del ID de lista ILS a través de los detalles de listas en HubSpot. Navega a **Contactos** > **Listas**, coloca el cursor sobre la **lista** en la tabla, luego haz clic en **Detalles**. En el panel derecho, haz clic en **Copiar** **ID de lista** junto a los valores del ID de lista ILS. Las listas de contactos tienen dos valores de ID diferentes, pero debes usar el valor de ID de lista ILS en la solicitud. | Por ejemplo, para exportar una lista con los correos electrónicos de contactos, tu solicitud puede verse de la siguiente manera: **JSON** ```json theme={null} ///Example request body { "exportType": "LIST", "listId": 1234567, "exportName": "Marketing email contacts", "format": "xlsx", "language": "EN", "objectType": "CONTACT", "objectProperties": ["email"] } ``` ## Buscar exportaciones Cuando completes correctamente una exportación, el `id` de las exportaciones se devolverá en la respuesta. Para buscar una exportación de tu cuenta de HubSpot, haz una solicitud `GET` a `/crm/v3/exports/export/async/tasks/{exportId}/status`. Al buscar exportaciones, también se devolverá el `status` de la exportación. Los estados incluyen `COMPLETE`, `PENDING`, `PROCESSING` o `CANCELED`. Para las exportaciones con un estado `COMPLETE`, se devuelve una URL que puedes utilizar para descargar el archivo exportado. La URL de descarga expirará cinco minutos después de que se complete la solicitud. Una vez expirada, puedes realizar otra solicitud `GET` para generar una nueva URL única. > [!WARNING] > > ### Nota: > > Antes de que expire, se puede acceder a la URL de descarga de una exportación sin autorización adicional. Para proteger tus datos, procede con cautela al compartir una URL o al integrar con HubSpot a través de esta API. ## Límites Se aplican los siguientes límites: * Puedes realizar hasta treinta exportaciones en un plazo de 24 horas, y solo una exportación a la vez. Las exportaciones adicionales se pondrán en espera hasta que se complete la exportación anterior. * Si estás realizando una exportación grande, es posible que recibas varios archivos en un archivo zip. Se esperan varios archivos al exportar archivos CSV o XLSX con más de 1.000.000 de filas y archivos XLS con más de 65.535 filas. Los archivos CSV también se comprimen automáticamente si el archivo pesa más de 2 MB, aunque tenga menos de 1.000.000 de filas. * De forma predeterminada, el número de asociaciones por fila está limitado a 1.000 asociaciones. Si quieres anular este límite, incluye el campo `overrideAssociatedObjectsPerDefinitionPerRowLimit` con el valor `true`. # Calling extensions SDK Source: https://developers.hubspot.es/docs/api-reference/latest/crm/extensions/calling-extensions/calling-sdk # Create new channel connection settings for a specific app. Source: https://developers.hubspot.es/docs/api-reference/latest/crm/extensions/calling-extensions/channel-connection-settings/create-channel-connection-settings specs/2026-09/crm-calling-extensions-v2026-09.json POST /crm/extensions/calling/2026-09/{appId}/settings/channel-connection Establish new channel connection settings for the specified app. > **Supported products** # Remove the channel connection settings for a specific app. Source: https://developers.hubspot.es/docs/api-reference/latest/crm/extensions/calling-extensions/channel-connection-settings/delete-channel-connection-settings specs/2026-09/crm-calling-extensions-v2026-09.json DELETE /crm/extensions/calling/2026-09/{appId}/settings/channel-connection Delete the channel connection settings associated with the specified app. > **Supported products** # Retrieve the channel connection settings for a specific app. Source: https://developers.hubspot.es/docs/api-reference/latest/crm/extensions/calling-extensions/channel-connection-settings/get-channel-connection-settings specs/2026-09/crm-calling-extensions-v2026-09.json GET /crm/extensions/calling/2026-09/{appId}/settings/channel-connection Access the current channel connection settings for the specified app. > **Supported products** # Update the channel connection settings for a specific app. Source: https://developers.hubspot.es/docs/api-reference/latest/crm/extensions/calling-extensions/channel-connection-settings/update-channel-connection-settings specs/2026-09/crm-calling-extensions-v2026-09.json PATCH /crm/extensions/calling/2026-09/{appId}/settings/channel-connection Modify the existing channel connection settings for the specified app. > **Supported products** # Submit details of an inbound call to the CRM. Source: https://developers.hubspot.es/docs/api-reference/latest/crm/extensions/calling-extensions/inbound/create-inbound-call specs/2026-09/crm-calling-extensions-v2026-09.json POST /crm/extensions/calling/2026-09/inbound-call This endpoint allows you to submit information about an inbound call to the CRM system. The request must include details such as the external call ID, call status, and involved phone numbers. This operation helps in logging and managing inbound call data within the CRM. > **Supported products** > **Required Scopes** # CRM API | Receive calls in HubSpot when using calling apps Source: https://developers.hubspot.es/docs/api-reference/latest/crm/extensions/calling-extensions/receive-incoming-calls # Mark a call recording as ready for retrieval. Source: https://developers.hubspot.es/docs/api-reference/latest/crm/extensions/calling-extensions/recording/call-recording-ready specs/2026-09/crm-calling-extensions-v2026-09.json POST /crm/extensions/calling/2026-09/recordings/ready This endpoint is used to mark a call recording as ready. It requires the engagementId to identify the specific recording. > **Supported products** > **Required Scopes** # Call recordings and transcripts Source: https://developers.hubspot.es/docs/api-reference/latest/crm/extensions/calling-extensions/recordings-and-transcriptions # Create new calling extension settings for a specific app. Source: https://developers.hubspot.es/docs/api-reference/latest/crm/extensions/calling-extensions/settings/create-calling-extension specs/2026-09/crm-calling-extensions-v2026-09.json POST /crm/extensions/calling/2026-09/{appId}/settings Create new settings for the calling extension associated with the specified appId. > **Supported products** # Delete the calling extension settings for a specific app. Source: https://developers.hubspot.es/docs/api-reference/latest/crm/extensions/calling-extensions/settings/delete-calling-extension specs/2026-09/crm-calling-extensions-v2026-09.json DELETE /crm/extensions/calling/2026-09/{appId}/settings Remove the calling extension settings associated with the specified appId. This action cannot be undone. > **Supported products** # Retrieve the calling extension settings for a specific app. Source: https://developers.hubspot.es/docs/api-reference/latest/crm/extensions/calling-extensions/settings/get-calling-extensions specs/2026-09/crm-calling-extensions-v2026-09.json GET /crm/extensions/calling/2026-09/{appId}/settings Retrieve the current settings of the calling extension for the specified appId. > **Supported products** # Update the calling extension settings for a specific app. Source: https://developers.hubspot.es/docs/api-reference/latest/crm/extensions/calling-extensions/settings/update-calling-extension specs/2026-09/crm-calling-extensions-v2026-09.json PATCH /crm/extensions/calling/2026-09/{appId}/settings Modify existing calling extension settings for the specified appId. Only the fields provided in the request will be updated. > **Supported products** # Set up third-party calling in help desk Source: https://developers.hubspot.es/docs/api-reference/latest/crm/extensions/calling-extensions/third-party-calling # Third-party transcripts Source: https://developers.hubspot.es/docs/api-reference/latest/crm/extensions/calling-extensions/third-party-transcripts # Create a new card Source: https://developers.hubspot.es/docs/api-reference/latest/crm/extensions/crm-cards/create-crm-card specs/2026-09/crm-public-app-crm-cards-v2026-09.json POST /crm/extensions/cards-dev/2026-09/{appId} Define una nueva tarjeta que se activará en una cuenta cuando se instale esta aplicación. > **Supported products** # Delete a card Source: https://developers.hubspot.es/docs/api-reference/latest/crm/extensions/crm-cards/delete-crm-card specs/2026-09/crm-public-app-crm-cards-v2026-09.json DELETE /crm/extensions/cards-dev/2026-09/{appId}/{cardId} Elimina permanentemente una definición de tarjeta con el ID especificado. Una vez eliminada, las solicitudes de recuperación de datos para esta tarjeta ya no se enviarán a tu servicio. Esto no se puede deshacer. > **Supported products** # Get a card. Source: https://developers.hubspot.es/docs/api-reference/latest/crm/extensions/crm-cards/get-crm-card specs/2026-09/crm-public-app-crm-cards-v2026-09.json GET /crm/extensions/cards-dev/2026-09/{appId}/{cardId} Devuelve la definición de una tarjeta con el ID especificado. > **Supported products** # Get all cards Source: https://developers.hubspot.es/docs/api-reference/latest/crm/extensions/crm-cards/get-crm-cards specs/2026-09/crm-public-app-crm-cards-v2026-09.json GET /crm/extensions/cards-dev/2026-09/{appId} Devuelve una lista de tarjetas para una aplicación determinada. > **Supported products** # Get sample card detail response Source: https://developers.hubspot.es/docs/api-reference/latest/crm/extensions/crm-cards/get-sample-response specs/2026-09/crm-public-app-crm-cards-v2026-09.json GET /crm/extensions/cards-dev/2026-09/sample-response Devuelve un ejemplo de respuesta de detalles de tarjeta. Esta es la carga que contiene los detalles de una tarjeta que se mostrarán a un usuario. Una aplicación debe enviar esto en respuesta a la solicitud de recuperación de datos. > **Supported products** # API del CRM | Tarjetas del CRM Source: https://developers.hubspot.es/docs/api-reference/latest/crm/extensions/crm-cards/guide > **[Run in Postman](https://app.getpostman.com/run-collection/26126890-b4ebfe97-5852-4a5d-a9be-d171474df3b1)** En una [aplicación pública](/docs/apps/legacy-apps/public-apps/overview), puedes crear tarjetas del CRM personalizadas para mostrar información de otros sistemas en los registros de contactos, empresas, negocios y tickets de HubSpot. Cada aplicación puede incluir hasta 25 tarjetas del CRM. > [!NOTE] > > A partir del 16 de junio de 2025, las funcionalidades de las tarjetas clásicas del CRM, descritas en este artículo, dejarán de recibir soporte y quedarán oficialmente obsoletas el 31 de octubre de 2026. Más información sobre este cambio en el [registro de cambios para desarrolladores](https://community.hubspot.com/t5/Developer-Announcements/Deprecating-Support-for-Classic-Legacy-CRM-Cards/m-p/1153039#M1048). > > Las tarjetas clásicas del CRM son diferentes de las tarjetas de aplicación que puedes [crear como extensiones de la interfaz de usuario con proyectos](https://developers.hubspot.es/docs/guides/crm/ui-extensions/create). Las nuevas tarjetas de aplicación ofrecen más flexibilidad, personalización e interactividad utilizando un conjunto de herramientas más moderno basado en React. Si tu aplicación incluye actualmente una tarjeta del CRM clásica, aprende cómo [migrarla al marco de proyectos](/docs/apps/developer-platform/build-apps/overview) para utilizar las tarjetas de aplicación más recientes. **Ejemplo de uso:** estás creando una integración para el mercado de aplicaciones de tu software de seguimiento de errores. Quieres poder mostrar los errores detectados en los registros de contacto para que los representantes del servicio de asistencia puedan consultarlos cuando trabajen con los clientes. Tu aplicación puede definir una tarjeta personalizada que muestre esta información directamente en el registro de contacto de HubSpot. ![CRM\_Card\_1](https://cdn2.hubspot.net/hubfs/53/CRM_Card_1.png) Las tarjetas se pueden definir como parte de la configuración de características de tu aplicación. Una vez que la aplicación esté instalada y un usuario vea los registros del CRM, HubSpot hace una solicitud a la aplicación, extrae los datos pertinentes y los muestra en una tarjeta en la página del registro. Las aplicaciones también pueden especificar las medidas específicas que el usuario puede tomar en función de esta información. Por ejemplo, tu aplicación podría incluir la instrucción de abrir un modal para mostrar la interfaz del usuario de la aplicación en HubSpot. ![diagrama de flujo de datos de la tarjeta crm](https://www.hubspot.es/hubfs/Knowledge_Base_2023-24-25/crm-card-diagram.png) ## Permisos necesarios Para crear tarjetas del CRM personalizadas, tu aplicación debe solicitar los permisos de OAuth necesarios a fin de modificar los registros del CRM donde aparecerá tu tarjeta. Por ejemplo, para que una tarjeta del CRM aparezca en los registros de contactos, la aplicación debe tener los permisos `crm.objects.contacts.read` y `crm.objects.contacts.write`. Si más tarde necesitas retirar los permisos de los objetos del CRM de tu aplicación, primero deberás eliminar todas las tarjetas existentes de esos tipos de objetos. Consulta la documentación de OAuth para [obtener más detalles sobre los permisos](/docs/apps/legacy-apps/authentication/working-with-oauth) y la configuración de la URL de autorización para tu aplicación. ## Crear una tarjeta del CRM Puedes crear tarjetas del CRM para tu aplicación usando la API o modificando la aplicación en tu cuenta de desarrollador. Para obtener más información sobre la configuración de una tarjeta mediante la API, consulta [esta documentación de referencia](/docs/api-reference/crm-public-app-crm-cards-v3/guide). Para crear una tarjeta del CRM utilizando la interfaz del usuario de HubSpot: * En tu cuenta de desarrollador de HubSpot, navega a **Aplicaciones** en la barra de navegación principal. * Selecciona la **aplicación** a la que quieres agregar una tarjeta. * En el menú de la barra lateral izquierda, selecciona **Tarjetas del CRM**. * En la parte superior derecha, haz clic en **Crear tarjeta del CRM**. ![private-app-create-crm-card](https://www.hubspot.es/hubfs/Knowledge_Base_2023/private-app-create-crm-card.png) A continuación, obtén más información sobre las opciones de configuración en cada pestaña. > [!NOTE] > > Las extensiones de la interfaz del usuario creadas mediante proyectos de desarrolladores ofrecen formas más flexibles de mostrar los datos y facilitar la interacción del usuario, lo que incluye la visualización de contenido externo en marcos. Si es posible usar una aplicación privada con tu integración, consulta la [guía rápida sobre extensiones de la interfaz del usuario](/docs/apps/developer-platform/build-apps/overview), o consulta los [proyectos de ejemplo de HubSpot](https://developers.hubspot.es/docs/guides/crm/ui-extensions/sample-extensions/overview) para saber qué puedes hacer. ## Solicitud de datos Cuando un usuario de HubSpot ve un registro del CRM en el que está activada una tarjeta del CRM, HubSpot hará una solicitud a la integración para obtener los datos. Esta solicitud se envía a la URL de destino especificada, que incluye un conjunto de parámetros de consulta predeterminados, junto con parámetros adicionales que contienen los datos de las propiedades según lo especificado en la configuración de la tarjeta. ![private-app-create-crm-card-data-request-tab](https://www.hubspot.es/hubfs/Knowledge_Base_2023/private-app-create-crm-card-data-request-tab.png) * En el campo *URL de obtención de los datos*, introduce la **URL** de donde extraerás los datos. En la API, esta URL se agrega al campo `targetUrl`. * En la sección *Tipos de registros de destino*, haz clic para activar los **interruptores** y seleccionar en qué registros del CRM aparecerá la tarjeta. A continuación, utiliza los menús desplegables **Propiedades enviadas desde HubSpot** para seleccionar las **propiedades de HubSpot** que se incluirán como parámetros de consulta en la URL de la solicitud. En la API, cada tipo de registro y sus propiedades correspondientes se agregan como objetos en la serie `objectTypes`. ```json theme={null} { "title": "New CRM Card", "fetch": { "targetUrl": "https://www.example.com/demo-fetch", "objectTypes": [ { "name": "contacts", "propertiesToSend": [ "firstname", "email", "lastname" ] } ] } ... } ``` ### Solicitud de ejemplo La configuración anterior daría como resultado que HubSpot envíe una solicitud `GET` de la siguiente manera: ```shell theme={null} https://www.example.com/demo-fetch?userId=12345&userEmail=loggedinuser@hubspot.com&associatedObjectId=53701&associatedObjectType=CONTACT&portalId=987654&firstname=Tim&email=timrobinson@itysl.com&lastname=Robinson ``` | Parámetro | Tipo | Descripción | | - | - | - | | `userId` | Predeterminado | El ID del usuario de HubSpot que subió el registro del CRM. | | `userEmail` | Predeterminado | La dirección de correo electrónico del usuario que subió el registro del CRM. | | `associatedObjectId` | Predeterminado | El ID del registro del CRM que se subió. | | `associatedObjectType` | Predeterminado | El tipo de registro del CRM que se subió (por ejemplo, contacto, empresa, negocio). | | `portalId` | Predeterminado | El ID de la cuenta de HubSpot donde se subió el registro del CRM. | | `firstname` | Personalizado | El nombre del contacto, como se especifica en el menú desplegable *Propiedades enviadas desde HubSpot* (en la aplicación) y la serie del parámetro `propertiesToSend` (API). | | `email` | Personalizado | La dirección de correo del contacto, como se especifica en el menú desplegable *Propiedades enviadas desde HubSpot* (en la aplicación) y en la serie del parámetro `propertiesToSend` (API). | | `lastname` | Personalizado | El apellido del contacto, como se especifica en el menú desplegable *Propiedades enviadas desde HubSpot* (en la aplicación) y en la serie del parámetro `propertiesToSend` (API). | > [!WARNING] > > ### Nota: > > Una conexión debe realizarse antes de tres segundos y las solicitudes expirarán a los cinco segundos. ### Ejemplo de respuesta A continuación se muestra un ejemplo de respuesta que el elemento de integración podría proporcionar a la solicitud anterior. ```json theme={null} { "results": [ { "objectId": 245, "title": "API-22: APIs working too fast", "link": "http://example.com/1", "created": "2016-09-15", "priority": "HIGH", "project": "API", "description": "Customer reported that the APIs are just running too fast. This is causing a problem in that they're so happy.", "reporter_type": "Account Manager", "status": "In Progress", "ticket_type": "Bug", "updated": "2016-09-28", "actions": [ { "type": "IFRAME", "width": 890, "height": 748, "uri": "https://example.com/edit-iframe-contents", "label": "Edit", "associatedObjectProperties": [] }, { "type": "IFRAME", "width": 890, "height": 748, "uri": "https://example.com/reassign-iframe-contents", "label": "Reassign", "associatedObjectProperties": [] }, { "type": "ACTION_HOOK", "httpMethod": "PUT", "associatedObjectProperties": [], "uri": "https://example.com/tickets/245/resolve", "label": "Resolve" }, { "type": "CONFIRMATION_ACTION_HOOK", "confirmationMessage": "Are you sure you want to delete this ticket?", "confirmButtonText": "Yes", "cancelButtonText": "No", "httpMethod": "DELETE", "associatedObjectProperties": ["protected_account"], "uri": "https://example.com/tickets/245", "label": "Delete" } ] }, { "objectId": 988, "title": "API-54: Question about bulk APIs", "link": "http://example.com/2", "created": "2016-08-04", "priority": "HIGH", "project": "API", "reported_by": "ksmith@hubspot.com", "description": "Customer is not able to find documentation about our bulk Contacts APIs.", "reporter_type": "Support Rep", "status": "Resolved", "ticket_type": "Bug", "updated": "2016-09-23", "properties": [ { "label": "Resolved by", "dataType": "EMAIL", "value": "ijones@hubspot.com" }, { "label": "Resolution type", "dataType": "STRING", "value": "Referred to documentation" }, { "label": "Resolution impact", "dataType": "CURRENCY", "value": "94.34", "currencyCode": "GBP" } ], "actions": [ { "type": "IFRAME", "width": 890, "height": 748, "uri": "https://example.com/edit-iframe-contents", "label": "Edit" }, { "type": "CONFIRMATION_ACTION_HOOK", "confirmationMessage": "Are you sure you want to delete this ticket?", "confirmButtonText": "Yes", "cancelButtonText": "No", "httpMethod": "DELETE", "associatedObjectProperties": ["protected_account"], "uri": "https://example.com/tickets/245", "label": "Delete" } ] } ], "settingsAction": { "type": "IFRAME", "width": 890, "height": 748, "uri": "https://example.com/settings-iframe-contents", "label": "Settings" }, "primaryAction": { "type": "IFRAME", "width": 890, "height": 748, "uri": "https://example.com/create-iframe-contents", "label": "Create Ticket" } } ``` | Propiedad | Tipo | Descripción | | - | - | - | | `results` | Matriz | Una serie de hasta cinco [propiedades de la tarjeta](#card-properties) válidas. Si hay más propiedades disponibles para un objeto del CRM específico, tu aplicación puede establecer un enlace a ellos. | | `objectId` | Número | Un ID único para el objeto. | | `title` | Cadena | El título de el objeto. | | `link` | Cadena | La URL que el usuario puede seguir para obtener más detalles sobre el objeto. Esta propiedad es opcional, pero si ningún objeto tiene un enlace, deberías proporcionar un valor `null`. | | `created` | Cadena | Una [propiedad personalizada](#card-properties), según como se define en la configuración de la tarjeta, que indica la fecha de creación del objeto. | | `priority` | Cadena | Una [propiedad personalizada](#card-properties), según como se define en la configuración de la tarjeta, que indica el nivel de prioridad del ticket externo. | | `actions` | Matriz | Una lista de las [acciones](#action-types) que un usuario puede realizar. | | `properties` | Propiedades | Una lista de propiedades personalizadas que no se definen en la configuración de la tarjeta. Puedes usar esta lista para mostrar las propiedades únicas de un objeto específico. Estas propiedades se mostrarán en el orden en que se proporcionan, pero después de las propiedades definidas en la configuración de la tarjeta. | | `settingsAction` | Objeto | Una acción del elemento iframe que permite a los usuarios cambiar la configuración de la aplicación. | | `primaryAction` | Objeto | La acción principal de un tipo de registro, normalmente es una acción de creación. | | `secondaryActions` | Matriz | Una lista de acciones que se muestran en la tarjeta. | ### Solicitar firmas Para garantizar que las solicitudes provienen realmente de HubSpot, se incluye el encabezado indicado abajo. Este encabezado contendrá un hash del secreto para tu aplicación y los detalles de la solicitud. `X-HubSpot-Signature: ` Para verificar esta firma, lleva a cabo los siguientes pasos: 1. Crea una cadena que concatene lo siguiente: `` + `` + `` + ` (if present)`. 2. Crea un hash SHA-256 de la cadena resultante. 3. Compara el valor del hash a la firma. Si son iguales, la solicitud ha pasado la validación. Si los valores no coinciden, la solicitud puede haber sido manipulada en tránsito o alguien puede estar falsificando solicitudes en tu endpoint. Más información sobre cómo [validar solicitudes de HubSpot](/docs/apps/legacy-apps/authentication/validating-requests). ## Propiedades de la tarjeta En la pestaña *Propiedades de la tarjeta*, define las propiedades personalizadas que deseas que HubSpot muestre en la tarjeta del CRM. Una vez definida, la integración puede rellenar estas propiedades incluyéndolas en la respuesta. * Haz clic en **Agregar propiedad** a fin de agregar una nueva propiedad para que la tarjeta la muestre. La carga útil que proporciones en respuesta a la llamada de obtención de datos debe contener los valores de todas estas propiedades. * En el panel derecho, establece el nombre único, la etiqueta de presentación y el tipo de datos de la propiedad. Puedes seleccionar entre los siguientes tipos: *Divisa*, *Fecha*, *Fecha y hora*, *Correo electrónico*, *Enlace*, *Numérico*, *Estado* y *Cadena*. Más información sobre el [uso de los tipos de propiedades de extensión](/docs/apps/legacy-apps/extensions/overview). * Haz clic en **Agregar** para guardar la propiedad. ![private-app-create-crm-card-card-properties-tab](https://www.hubspot.es/hubfs/Knowledge_Base_2023/private-app-create-crm-card-card-properties-tab.png) Cuando HubSpot envía su solicitud de datos, la integración puede proporcionar valores para estas propiedades en su respuesta junto con otros valores en cada objeto del parámetro `results`. Además de las propiedades configuradas en esta pestaña, la integración también puede incluir sus propias propiedades personalizadas sin necesidad de definirlas en la configuración de la tarjeta. Por ejemplo, en la respuesta que se muestra abajo, los parámetros `created` y `priority` se definen en la pestaña *Propiedades de la tarjeta*, mientras que la serie del parámetro `properties` envía sus propias definiciones y valores de propiedad. Estas propiedades específicas del objeto deben definirse por cada objeto. ```json theme={null} { "objectId": 988, "title": "API-54: Question about bulk APIs", "link": "http://example.com/2", "created": "2016-08-04", "priority": "HIGH", "properties": [ { "label": "Resolved by", "dataType": "EMAIL", "value": "ijones@hubspot.com" }, { "label": "Resolution type", "dataType": "STRING", "value": "Referred to documentation" }, { "label": "Resolution impact", "dataType": "CURRENCY", "value": "94.34", "currencyCode": "GBP" } ], "actions": [ ... ] } ``` Al enviar propiedades personalizadas, el campo `dataType` de cada propiedad puede establecerse en uno de los siguientes: `CURRENCY`, `DATE`, `DATETIME`, `EMAIL`, `LINK`, `NUMERIC`, `STATUS`, `STRING`. Dependiendo del tipo de propiedad, es posible que la integración necesite campos adicionales. A continuación, encontrarás más información sobre cada tipo de propiedad. ### Propiedades de divisa Las propiedades con el atributo `CURRENCY` deben incluir un valor `currencyCode`, que debe ser un código [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217#Active_codes) válido. Esto garantizará que el usuario vea el símbolo de divisa y el formato de número correctos. ```json theme={null} { "results": [ { "properties": [ { "label": "Resolution impact", "dataType": "CURRENCY", "value": "94.34", "currencyCode": "GBP" } ] } ] } ``` ### Propiedades de fecha Las propiedades `DATE` deben tener el formato `yyyy-mm-dd`. Estas propiedades se mostrarán en un formato que coincida con la configuración regional del usuario. Si necesitas incluir una marca de tiempo, debes utilizar una propiedad `DATETIME`. ```json theme={null} { "results": [ { "properties": [ { "label": "Date", "dataType": "DATE", "value": "2023-10-13" } ] } ] } ``` ### Propiedades de fecha y hora Las propiedades con el atributo `DATETIME` indican una hora específica y deben proporcionarse en milisegundos desde el tiempo en Epoch. Estas propiedades se mostrarán en un formato que coincida con la configuración regional del usuario. ```json theme={null} { "results": [ { "properties": [ { "label": "Timestamp", "dataType": "DATETIME", "value": "1697233678777" } ] } ] } ``` ### Propiedades de correo electrónico Las propiedades con el atributo `EMAIL` corresponden a valores que contienen una dirección de correo electrónico. Estas propiedades se mostrarán como enlaces mailto. ```json theme={null} { "results": [ { "properties": [ { "label": "Email address", "dataType": "EMAIL", "value": "hobbes.baron@gmail.com" } ] } ] } ``` ### Propiedades de enlace Las propiedades con el atributo `LINK` muestran hipervínculos y se abren en una nueva ventana. Puedes especificar un valor `linkLabel`; si no está, se mostrará la URL misma. ```json theme={null} { "results": [ { "properties": [ { "label": "Link property", "dataType": "LINK", "value": "https://www.hubspot.com", "linkLabel": "Test link" } ] } ] } ``` ### Propiedades numéricas Las propiedades con el atributo `NUMERIC` muestran números. ```json theme={null} { "results": [ { "properties": [ { "label": "Number", "dataType": "NUMERIC", "value": "123.45" } ] } ] } ``` ### Propiedades de estado Las propiedades con el atributo `STATUS` se muestran como indicadores de color. Para definir una propiedad de estado, la integración necesita un valor `optionType` que indique los posibles estados. Los estados incluyen: * `DEFAULT`: Gris * `SUCCESS`: Verde * `WARNING`: Amarillo * `DANGER`: Rojo * `INFO`: Azul ```json theme={null} { "results": [ { "properties": [ { "label": "Status", "dataType": "STATUS", "value": "Errors occurring", "optionType": "DANGER" } ] } ] } ``` ### Propiedades de cadena Las propiedades con el atributo `STRING` muestran texto. ```json theme={null} { "results": [ { "properties": [ { "label": "First name", "dataType": "STRING", "value": "Tim Robinson" } ] } ] } ``` ## Acciones personalizadas En la pestaña *Acciones personalizadas*, puedes definir las URL de base que se solicitarán cuando un usuario haga clic en un botón de acción. Puedes incluir varias URL de acción para varias acciones en tu tarjeta del CRM. Las acciones de las tarjetas deben llamar al endpoint que se especifique en esta pestaña. ![Pestaña de acciones personalizadas para una tarjeta del CRM de una aplicación privada](https://www.hubspot.es/hubfs/Knowledge_Base_2023/private-app-create-crm-card-custom-actions-tab.png) Los ganchos de acción y las solicitudes de confirmación de los ganchos incluirán un encabezado `X-HubSpot-Signature` para verificar la solicitud. Las solicitudes de acción con el elemento iframe no incluirán una firma para la solicitud. Consulta la sección [Solicitar firmas](#request-signatures) para obtener más información. Las URL de acciones se acceden mediante el campo `uri` en una acción. De manera similar a la [solicitud de búsqueda de datos,](#data-request) los ganchos de acción incluirán un conjunto predeterminado de parámetros de consulta. Puedes incluir otros parámetros de consulta incluyendo un campo `associatedObjectProperties` en la acción. La respuesta será diferente según el tipo de acción. A continuación, encontrarás más información sobre los tipos de acción. ### Tipos de acción #### Acciones con el elemento iframe Las acciones con el elemento `IFRAME` abrirán un modal con un elemento iframe que apunta a la URL proporcionada. No se envía ninguna firma de solicitud cuando el iframe se abre desde la interfaz del CRM. Esto se debe a que la URL del iframe se incluye en la solicitud de obtención de datos original y no se necesitan solicitudes de proxy adicionales. ```json theme={null} { "type": "IFRAME", "width": 890, "height": 748, "uri": "https://example.com/iframe-contents", "label": "Edit", "associatedObjectProperties": ["some_crm_property"] } ``` Cuando el usuario haya terminado de completar una acción en el iframe, el modal debe cerrarse y devolver al usuario al registro del CRM donde comenzó. Para cerrar la ventana modal, la integración puede usar el parámetro `window.postMessage` para indicar al CRM que el usuario ha terminado. Se admiten los siguientes mensajes: * `{"action": "DONE"}`: el usuario ha completado correctamente la acción. * `{"action": "CANCEL"}`: el usuario ha cancelado la acción. ```json theme={null} window.parent.postMessage(JSON.stringify({"action": "DONE"}), "*"); ``` #### Acciones de gancho de acción Las acciones de tipo `ACTION_HOOK` envían una solicitud del lado del servidor al elemento de la integración. La única interfaz que el usuario ve para esta acción es un mensaje que indica el éxito o el fallo de la operación. Este tipo de acción es útil para operaciones simples que no requieren más información por parte del usuario. Se incluirá un encabezado `X-HubSpot-Signature` en la solicitud de verificación. Encuentra más información sobre [solicitar firmas](#request-signatures). ```json theme={null} { "type": "ACTION_HOOK", "httpMethod": "POST", "uri": "https://example.com/action-hook", "label": "Example action", "associatedObjectProperties": ["some_crm_property"] } ``` El parámetro `httpMethod` se puede establecer con `GET`, `POST`, `PUT`, `DELETE` o `PATCH`. Si utilizas `GET` o `DELETE`, los valores `associatedObjectProperties` se agregarán a la URL de la solicitud como parámetros de consulta. Si usas las otras funciones, las propiedades se enviarán en el cuerpo de la solicitud. ```json theme={null} window.parent.postMessage(JSON.stringify({"action": "DONE"}), "*"); ``` #### Acciones de confirmación Las acciones de tipo `CONFIRMATION_ACTION_HOOK` se comportan igual que las acciones `ACTION_HOOK`, excepto que se muestra un cuadro de diálogo de confirmación al usuario antes de ejecutar la solicitud del lado del servidor. Se incluirá un encabezado `X-HubSpot-Signature` en la solicitud de verificación. Encuentra más información sobre [solicitar firmas](#request-signatures). ```json theme={null} { "type": "CONFIRMATION_ACTION_HOOK", "httpMethod": "POST", "uri": "https://example.com/action-hook", "label": "Example action", "associatedObjectProperties": ["some_crm_property"], "confirmationMessage": "Are you sure you want to run example action?", "confirmButtonText": "Yes", "cancelButtonText": "No" } ``` El parámetro `httpMethod` se puede establecer con `GET`, `POST`, `PUT`, `DELETE` o `PATCH`. Si utilizas `GET` o `DELETE`, los valores `associatedObjectProperties` se agregarán a la URL de la solicitud como parámetros de consulta. Si usas las otras funciones, las propiedades se enviarán en el cuerpo de la solicitud. ## Eliminar una tarjeta del CRM Una vez creada, puedes eliminar una tarjeta del CRM desde la configuración de la aplicación: * En tu cuenta de desarrollador de HubSpot, navega a **Aplicaciones** en la barra de navegación principal. * Haz clic en el **nombre** de la aplicación de la que quieres borrar una tarjeta. * En el menú de la barra lateral izquierda, selecciona **Tarjetas del CRM**. * Pasa el cursor sobre la tarjeta y haz clic en **Eliminar**. ![delete-a-classic-crm-card-from-within-app-settings](https://www.hubspot.es/hubfs/Knowledge_Base_2023-24-25/public-app-delete-crm-card.png) * En el cuadro de diálogo, confirma la eliminación haciendo clic en **Eliminar esta tarjeta**. # Migrate CRM card views Source: https://developers.hubspot.es/docs/api-reference/latest/crm/extensions/crm-cards/migrate-crm-card specs/2026-09/crm-public-app-crm-cards-v2026-09.json POST /crm/extensions/cards-dev/2026-09/{appId}/views/migrate Cambia una tarjeta del CRM anterior por una tarjeta de aplicación en las vistas. Consulta la documentación de "Migrar una tarjeta del CRM anterior a una tarjeta de aplicación" para obtener más información. > **Supported products** # Update a card Source: https://developers.hubspot.es/docs/api-reference/latest/crm/extensions/crm-cards/update-crm-card specs/2026-09/crm-public-app-crm-cards-v2026-09.json PATCH /crm/extensions/cards-dev/2026-09/{appId}/{cardId} Actualiza una definición de tarjeta con nuevos detalles. > **Supported products** # Create a transcript Source: https://developers.hubspot.es/docs/api-reference/latest/crm/extensions/transcriptions/create-transcript specs/2026-09/crm-transcriptions-v2026-09.json POST /crm/extensions/calling/2026-09/transcripts Crea una nueva transcripción para una llamada en tu cuenta de HubSpot. Este punto de conexión te permite enviar los detalles de la transcripción de una llamada, incluyendo el ID de interacción y las expresiones, para que se almacenen y gestionen en HubSpot. Esto es útil para integrar los datos de transcripción de llamadas en tus workflows del CRM. > **Supported products** > **Required Scopes** # Delete a transcript Source: https://developers.hubspot.es/docs/api-reference/latest/crm/extensions/transcriptions/delete-transcript specs/2026-09/crm-transcriptions-v2026-09.json DELETE /crm/extensions/calling/2026-09/transcripts/{transcriptId} Elimina la transcripción de una llamada específica de tu cuenta de HubSpot usando su identificador único. Esta operación es útil para gestionar y limpiar datos de transcripciones que ya no se necesitan. > **Supported products** > **Required Scopes** # Retrieve a transcript Source: https://developers.hubspot.es/docs/api-reference/latest/crm/extensions/transcriptions/get-transcript specs/2026-09/crm-transcriptions-v2026-09.json GET /crm/extensions/calling/2026-09/transcripts/{transcriptId} Recupera la transcripción de una llamada específica por su identificador único. Este punto de conexión le permite acceder a los detalles de una transcripción, incluyendo sus marcas de tiempo de creación y actualización, el ID de interacción, la fuente y las expresiones de la transcripción. Es útil para revisar y analizar las interacciones de llamadas almacenadas en su cuenta de HubSpot. > **Supported products** > **Required Scopes** # Transcribe inbound call Source: https://developers.hubspot.es/docs/api-reference/latest/crm/extensions/transcriptions/transcribe-inbound specs/2026-09/crm-transcriptions-v2026-09.json POST /crm/extensions/calling/2026-09/inbound-call Este punto de conexión procesa las llamadas entrantes al aceptar una solicitud con los detalles de la llamada. Requiere una carga útil JSON con información como el ID externo de la llamada, el estado final y los números de teléfono involucrados. Esta operación es útil para integrar datos de llamadas de terceros en HubSpot, lo que permite un seguimiento y una gestión fluidos de las llamadas entrantes. > **Supported products** > **Required Scopes** # Delete settings Source: https://developers.hubspot.es/docs/api-reference/latest/crm/extensions/video-conferencing-extension/delete-video-conferencing-extension specs/2026-09/crm-video-conferencing-extension-v2026-09.json DELETE /crm/extensions/videoconferencing/2026-09/settings/{appId} Elimina la configuración de la extensión de video conferencias para tu aplicación. > **Supported products** # Get settings Source: https://developers.hubspot.es/docs/api-reference/latest/crm/extensions/video-conferencing-extension/get-video-conferencing-extension specs/2026-09/crm-video-conferencing-extension-v2026-09.json GET /crm/extensions/videoconferencing/2026-09/settings/{appId} Busca la configuración de la extensión de video conferencias para tu aplicación > **Supported products** # Extensión de videoconferencia Source: https://developers.hubspot.es/docs/api-reference/latest/crm/extensions/video-conferencing-extension/guide > **[Run in Postman](https://app.getpostman.com/run-collection/26126890-8f5582df-b553-403f-b001-6fe4cbafe4e4)** # Extensión de videoconferencia Con la API de videoconferencias, puedes configurar una [aplicación pública](/docs/apps/legacy-apps/public-apps/overview) para dar a los usuarios de HubSpot la capacidad de agregar un enlace a una videoconferencia al [crear una reunión](https://knowledge.hubspot.com/meetings-tool/create-and-edit-scheduling-pages#overview), similar a la integración con [Google Meet](https://knowledge.hubspot.com/integrations/use-hubspots-integration-with-google-meet) y con [Zoom](https://knowledge.hubspot.com/integrations/use-hubspots-integration-with-zoom). El uso de esta API implicará lo siguiente: 1. Debes configurar tu aplicación pública con los webhooks de la extensión de videoconferencias. Tendrás que configurar tu aplicación con las URI que HubSpot usará para notificarte cuando se estén creando, actualizando o eliminando reuniones. 2. Debes ajustar un back-end personalizado para gestionar la creación de reuniones y actualizar los webhooks. 3. Si fuera necesario, debes hacer ajustes en tu back-end para gestionar los webhooks de verificación de la identidad del usuario. Todas las solicitudes a la API de videoconferencias deben autenticarse usando la clave de la API de desarrollador de tu cuenta. Puedes incluir la clave en un parámetro `hapikey` de consulta al final de la URL de la solicitud. Puedes [encontrar la clave de la API de desarrollador](/docs/apps/legacy-apps/public-apps/overview#developer-api-keys) en tu cuenta de desarrollador. ## Requisitos previos Antes de comenzar, asegúrate de haber creado una [cuenta de desarrollador](/docs/getting-started/account-types#developer-accounts) y una [aplicación pública](/docs/apps/legacy-apps/public-apps/overview) dentro de ella. ## Configurar URLs de webhooks Para que HubSpot sepa dónde enviar notificaciones cuando se creen, actualicen o eliminen reuniones, primero debes configurar las URL de los webhooks de la extensión. Para ello, envía una solicitud `PUT` a `/crm/v3/extensions/videoconferencing/settings/{appId}?hapikey=YOUR_HUBSPOT_DEVELOPER_API_KEY`. En el cuerpo de la solicitud, deberás incluir el campo `createMeetingUrl` para definir la URL que HubSpot enviará a las cargas útiles de creación de reuniones del webhook. Opcionalmente, puedes incluir URLs de webhooks adicionales. Estos valores pueden actualizarse posteriormente usando la misma URL de solicitud. ```json theme={null} // Example request { "createMeetingUrl": "https://example.com/create-meeting", "updateMeetingUrl": "https://example.com/update-meeting", "deleteMeetingUrl": "https://example.com/delete-meeting" } ``` | Campo | Tipo | Descripción | | - | - | - | | `createMeetingUrl` | Cadena | La URL que HubSpot notificará cuando se cree una nueva reunión. Esta incluirá una carga útil JSON con los detalles de la reunión. La URL debe usar el protocolo `https`. | | `updateMeetingUrl` | Cadena | La URL que HubSpot notificará cuando se actualice una reunión existente. Esta acción incluirá una carga útil JSON con los detalles actualizados de la reunión. La URL debe usar el protocolo `https`. | | `deleteMeetingUrl` | Cadena | La URL que HubSpot notificará cuando se elimine una reunión existente. Incluirá un `conferenceId` de las reuniones eliminadas. La URL debe usar el protocolo `https`. | | `userVerifyUrl` | Cadena | La URL que HubSpot utilizará para verificar que un usuario está en el sistema externo de videoconferencia. | **Respuesta de ejemplo:** ```json theme={null} // Example 200 response { "createMeetingUrl": "https://example.com/create-meeting", "updateMeetingUrl": "https://example.com/update-meeting", "deleteMeetingUrl": "https://example.com/delete-meeting" } ``` ### Recuperar URLs de webhooks Para recuperar URLs de webhook configuradas para una aplicación existente, haz una solicitud `GET` a `/crm/v3/extensions/videoconferencing/settings/{appId}`. La respuesta incluirá las URL de webhooks configuradas en ese momento. ```json theme={null} // Example 200 response { "createMeetingUrl": "https://example.com/create-meeting", "updateMeetingUrl": "https://example.com/update- meeting", "deleteMeetingUrl": "https://example.com/delete-meeting", "userVerifyUrl": "https://example.com/user-verify" } ``` ## Cargas útiles de webhooks Una vez que se configuran las URL de los webhook, HubSpot enviará cargas útiles a esas URL cuando ocurra un evento de creación, actualización o eliminación de reuniones. > [!NOTE] > > Todos los webhooks enviados por HubSpot están firmados por HMAC usando el secreto de tu aplicación. Puedes obtener más información a este respecto en la [documentación de seguridad de webhooks](/docs/api-reference/webhooks-webhooks-v3/guide#security) (el resto de la página no hace referencia a estos webhooks de la extensión de videoconferencia). ### Webhook de creación de reuniones Cuando se crea una reunión, HubSpot enviará una solicitud a la URL especificada en el campo `createMeetingUrl`. La carga útil de la solicitud incluye información sobre la cuenta de HubSpot, el usuario asociado de HubSpot y los detalles de la reunión. ```json theme={null} // Example payload { "portalId": 123123, "userId": 123, "userEmail": "test.user@example.com", "topic": "A Test Meeting", "source": "MEETINGS", "startTime": 1534197600000, "endTime": 1534201200000 } ``` | Campo | Tipo | Descripción | | - | - | - | | `portalId` | Número | El ID de la cuenta de HubSpot de la que proviene la solicitud. | | `userId` | Número | El ID del usuario de HubSpot asignado a la reunión. | | `userEmail` | Cadena | La dirección de correo electrónico del usuario de HubSpot asignado a la reunión. | | `topic` | Cadena | El título de la reunión. | | `source` | Cadena | Indica dónde se creó la reunión. Puede ser cualquiera de las siguientes opciones:
        • `MEETINGS`: la reunión se creó a partir de una [página de programación de reuniones](https://knowledge.hubspot.com/meetings-tool/create-and-edit-scheduling-pages#create-scheduling-pages).
        • `MANUAL`: la reunión se creó manualmente a partir de un registro del CRM.
        | | `startTime` | Número | La hora de inicio de la reunión. en milisegundos epoch. | | `endTime` | Número | La hora de finalización de la reunión, en milisegundos epoch. | Para gestionar correctamente este webhook, debes generar una videoconferencia de esta reunión (o vincularla a una línea de conferencias existente) y responder con información sobre dicha conferencia. Los campos previstos en la respuesta son: * `conferenceId`: un ID único asociado con la conferencia en este evento. Este ID debe ser globalmente único dentro de tu sistema. HubSpot devolverá este ID en el webhook de actualización. * `conferenceUrl:` la URL que los usuarios pueden utilizar para unirse a la conferencia. * `conferenceDetails`: invitación en texto sin formato. Debe describir cómo los asistentes pueden acceder a la videoconferencia de este evento. Las nuevas líneas se mantendrán en las representaciones de este texto, pero no puede usarse ningún otro formato. Por ejemplo, la respuesta podría tener el siguiente aspecto: ```json theme={null} //example response { "conferenceId": "some-unique-id", "conferenceUrl": "https://example.com/join", "conferenceDetails": "Click here to join: https://example.com/join" } ``` ### Webhook de actualización de reuniones Si especificaste un `updateMeetingUrl`, HubSpot enviará esta URI a una solicitud cuando se hayan modificado detalles relevantes de una reunión. Esta notificación es necesaria si necesitas mantener siempre al día el tema o los horarios de una videoconferencia. La carga útil de la solicitud incluye información sobre la cuenta de HubSpot, el usuario asociado de HubSpot y los detalles de la reunión. ```json theme={null} //example request { "conferenceId": "some-unique-id", "userId": 123, "userEmail": "test.user@example.com", "portalId": 123123, "topic": "A Test Meeting (updated)", "startTime": 1534197600000, "endTime": 1534201200000 } ``` | Campo | Tipo | Descripción | | - | - | - | | `conferenceId` | Cadena | El identificador único de la conferencia, proporcionado por la integración en la respuesta al webhook de creación de la reunión. | | `userId` | Número | El ID del usuario de HubSpot asignado a la reunión. Siempre será el mismo usuario que el de la carga útil de la creación de la reunión. | | `userEmail` | Cadena | La dirección de correo electrónico del usuario de HubSpot asignado a la reunión. Siempre será el mismo usuario que el de la carga útil de la creación de la reunión. | | `portalId` | Número | El ID de la cuenta de HubSpot de la que proviene la solicitud. | | `topic` | Cadena | El título de la reunión. | | `startTime` | Número | La hora de inicio de la reunión, en milisegundos epoch. | | `endTime` | Número | La hora de finalización de la reunión, en milisegundos epoch. | No se requiere un cuerpo de respuesta al responder a estas solicitudes. Solo se requiere un código de respuesta `200` o `204` para indicar a HubSpot que este webhook se recibió correctamente. ### Webhook de eliminación de una reunión Cuando se elimine una reunión en HubSpot, se enviará una solicitud a la URL especificada en el campo `deleteMeetingUrl`. La carga incluirá el `conferenceId` de la reunión eliminada. ```json theme={null} // Example payload { "conferenceId": "some-unique-id" } ``` No se requiere un cuerpo de respuesta al responder a estas solicitudes. Solo se requiere un código de respuesta `200` o `204` para indicar a HubSpot que este webhook se recibió correctamente. ### Webhook de verificación de usuario Los sistemas de HubSpot siempre se comunican contigo sobre sus usuarios en términos de su ID de usuario de HubSpot y su dirección de correo electrónico de cuenta de HubSpot. Puede darse el caso de que un usuario del sistema de HubSpot pueda estar en tu sistema con una dirección de correo electrónico o un identificador diferente. Antes de que HubSpot haga una llamada a tu sistema para crear, actualizar o eliminar un enlace de conferencia de video, primero verificará la configuración de la aplicación en un campo `userVerifyUrl`. Si esa URL ha sido definida, HubSpot la llamará para obtener tu identificador de usuario nativo. Luego enviará ese identificador como la dirección de correo electrónico del usuario en la llamada subsiguiente. Si no configuras esta URL, HubSpot asumirá siempre que la identidad del usuario está verificada. Este ajuste es opcional y tú debes determinar si es necesario. Si necesitas mantener un mapeo de usuarios dentro de tu sistema, quizá lo mejor sea asociar el ID del usuario de HubSpot o su correo electrónico a tu ID de usuario interno en cada llamada. La carga útil de este webhook contiene el ID de la cuenta de HubSpot y la dirección de correo electrónico del usuario. ```json theme={null} //example request { "portalId": 123123, "userEmail": "test.user@example.com" } ``` Puedes volver a usar una respuesta `200` o cualquier código de error (por ejemplo, `404` sería un código adecuado). Si devuelves una respuesta `200`, debes devolver una carga que contenga la nueva identificación que debemos usar en lugar de la dirección de correo electrónico: ```json theme={null} //example response { "id": "any-string-id" } ``` # Create or update settings Source: https://developers.hubspot.es/docs/api-reference/latest/crm/extensions/video-conferencing-extension/update-video-conferencing-extension specs/2026-09/crm-video-conferencing-extension-v2026-09.json PUT /crm/extensions/videoconferencing/2026-09/settings/{appId} Crea o actualiza la configuración de la extensión de video conferencias para tu aplicación. > **Supported products** # Cancel an active import Source: https://developers.hubspot.es/docs/api-reference/latest/crm/imports/cancel-import specs/2026-09/crm-imports-v2026-09.json POST /crm/imports/2026-09/{importId}/cancel Esto permite a un desarrollador cancelar una importación activa. > **Supported products** > **Required Scopes** # Start an import Source: https://developers.hubspot.es/docs/api-reference/latest/crm/imports/create-import specs/2026-09/crm-imports-v2026-09.json POST /crm/imports/2026-09 Crea una nueva importación en tu cuenta de HubSpot subiendo archivos y especificando la configuración de importación. Este punto de terminación permite iniciar el proceso de importación al proporcionar los archivos y detalles de configuración necesarios. > **Supported products** > **Required Scopes** # Get the information on any import Source: https://developers.hubspot.es/docs/api-reference/latest/crm/imports/get-import specs/2026-09/crm-imports-v2026-09.json GET /crm/imports/2026-09/{importId} Un resumen completo de un registro de importación, incluyendo cualquier actualización. > **Supported products** > **Required Scopes** # Retrieve errors for a specific import Source: https://developers.hubspot.es/docs/api-reference/latest/crm/imports/get-import-errors specs/2026-09/crm-imports-v2026-09.json GET /crm/imports/2026-09/{importId}/errors Obtiene los registros de errores detallados de una operación de importación específica, lo que te permite identificar y solucionar los registros que fallaron durante el procesamiento. > **Supported products** > **Required Scopes** # Retrieve imports Source: https://developers.hubspot.es/docs/api-reference/latest/crm/imports/get-imports specs/2026-09/crm-imports-v2026-09.json GET /crm/imports/2026-09 Recupera una lista de las importaciones en tu cuenta de HubSpot. Este punto de terminación permite ver las importaciones que se han procesado, proporcionando detalles sobre cada una. Admite paginación para navegar por grandes conjuntos de datos de importación. > **Supported products** > **Required Scopes** # API del CRM | Importaciones Source: https://developers.hubspot.es/docs/api-reference/latest/crm/imports/guide > **[Run in Postman](https://app.getpostman.com/run-collection/f30b00bcfdc29170b2e8)** > **Requisitos de ámbito** # Importaciones Utiliza la API de importaciones para importar registros y actividades del CRM, como los contactos, las empresas y las notas en tu cuenta de HubSpot. Una vez los datos hayan sido importados, puedes acceder y actualizar los registros y actividades con los diversos endpoints de la API del CRM, incluida la [API de contactos,](/docs/guides/crm/understanding-the-crm) la [API de asociaciones](/docs/api-reference/crm-associations-v4/guide) y las [API de interacciones](/docs/api-reference/overview). También puedes [importar registros y actividades usando la herramienta de importación guiada en HubSpot](https://knowledge.hubspot.com/es/import-and-export/import-objects). Antes de comenzar la importación encuentra más información sobre: * [Requisitos para los archivos](https://knowledge.hubspot.com/es/import-and-export/set-up-your-import-file#file-requirements-and-technical-limits) * [Las propiedades requeridas para importaciones de registros y actividades](https://knowledge.hubspot.com/es/import-and-export/set-up-your-import-file#required-properties) * [Las propiedades requeridas para registrar la participación en un evento de marketing](https://knowledge.hubspot.com/es/integrations/import-marketing-event-participants#prepare-your-import-file) > [!WARNING] > > ### Nota: > > Para crear eventos personalizados o asociarlos a registros, usa la [API de eventos personalizados](https://developers.hubspot.es/docs/api-reference/events-send-event-completions-v3/guide) en lugar de importar. ## Iniciar una importación Puedes iniciar una importación realizando una solicitud `POST` a `/crm/v3/imports` con un cuerpo que especifique cómo asignar las columnas del archivo de importación a las propiedades correspondientes en HubSpot. Las importaciones a través de la API se envían como solicitudes con formato de tipo de datos de formulario, y el cuerpo de la solicitud incluye los siguientes campos: * [importRequest](#format-the-importrequest-data): es un campo de texto que contiene la solicitud JSON. * [files](#map-file-columns-to-hubspot-properties): es un campo de archivo que contiene el archivo de importación. Para el encabezado de la solicitud, agrega un encabezado `Content-Type` con el valor `multipart/form-data`. La siguiente captura de pantalla muestra cómo se vería la solicitud cuando usas una aplicación como Postman: ![postman-import-request-no-response0](https://www.hubspot.es/hubfs/Knowledge_Base_2021/Developer/postman-import-request-no-response0.png) ### Formato de los datos de importRequest En la solicitud, define los detalles del archivo de importación, incluida la asignación de las columnas de la hoja de cálculo a los datos de HubSpot. La solicitud debe incluir los siguientes campos: * **name**: el nombre de la importación. En HubSpot, este es el nombre que aparece en la [herramienta de importaciones](https://knowledge.hubspot.com/es/import-and-export/view-and-analyze-previous-imports), así como el nombre al que puedes hacer referencia en otras herramientas, como las listas. * **importOperations**: es un campo opcional utilizado para indicar si la importación debe [crear y actualizar, solo crear o solo actualizar registros](https://knowledge.hubspot.com/es/import-and-export/import-objects#choose-how-to-import) para un determinado objeto o actividad. Incluye `objectTypeId` para el objeto o actividad y si quieres `UPSERT` (crear y actualizar), `CREATE` o `UPDATE` registros. Por ejemplo, el campo se vería así en la solicitud: `"importOperations": {"0-1": "CREATE"}`. Si no incluyes este campo, el valor predeterminado para la importación es `UPSERT`. * **dateFormat**: es el formato para las fechas incluidas en el archivo. De forma predeterminada, esto se estructura por `MONTH_DAY_YEAR`, pero también puedes usar `DAY_MONTH_YEAR` o `YEAR_MONTH_DAY`. * **marketableContactImport**: es un campo opcional para indicar el [estado de marketing](https://knowledge.hubspot.com/es/records/marketing-contacts) de los contactos en tu archivo de importación. Este campo solo se usa cuando se importan contactos a cuentas que tienen [acceso a los contactos de marketing](https://knowledge.hubspot.com/es/records/marketing-contacts#check-your-access-to-marketing-contacts). Para establecer los contactos como de marketing en el archivo, usa el valor `true`. Para establecer los contactos como no de marketing en el archivo, usa el valor `false`. * **createContactListFromImport**: es un campo opcional para [crear una lista estática de los contactos](https://knowledge.hubspot.com/es/import-and-export/import-objects#create-list-from-import) en la importación. Para crear una lista a partir del archivo, usa el valor `true`. * **files**: es una matriz que contiene la información del archivo de importación. * **fileName**: el nombre del archivo de importación. * **fileFormat:** el formato del archivo de importación. Para los archivos CSV, usa el valor `CSV`. Para los archivos de Excel, usa el valor `SPREADSHEET`. * **fileImportPage**: contiene la matriz `columnMappings` que es necesaria para asignar los datos de tu archivo de importación a los datos de HubSpot. Más información sobre la asignación de columnas a continuación. ### Asignar las columnas del archivo a las propiedades de HubSpot Dentro de la matriz `columnMappings`, incluye una entrada para cada título en la columna del archivo de importación, que coincida con el orden en la hoja de cálculo. Para cada columna, incluye los siguientes campos: * **columnObjectTypeId:** el nombre o el valor `objectTypeId` del objeto o la actividad a la que pertenecen los datos. Consulta [este artículo](/docs/guides/crm/understanding-the-crm#object-type-id) para obtener una lista completa de los valores `objectTypeId`. * **columnName:** el nombre del título de la columna. Debe coincidir exactamente con el nombre del título de la columna en el archivo. * **propertyName:** el nombre interno de la propiedad de HubSpot a la que se le asignarán los datos. Para la columna común en las [importaciones de varios archivos](#import-multiple-files), `propertyName` debe ser `null` cuando se utilice el campo `toColumnObjectTypeId`. * **columnType:** se utiliza para especificar que una columna contiene una [propiedad de identificador única](https://knowledge.hubspot.com/es/import-and-export/understand-the-import-tool#unique-identifiers). Dependiendo de la propiedad y el propósito de la importación, puedes utilizar uno de los siguientes valores: * **HUBSPOT\_OBJECT\_ID:** el ID de un registro. Por ejemplo, el archivo de importación de contactos puede contener una columna *ID de registro* que tenga el ID de la empresa con la que deseas asociar los contactos. * **HUBSPOT\_ALTERNATE\_ID:** un identificador único distinto del ID de registro. Por ejemplo, el archivo de importación de contactos puede contener una columna de *Correo electrónico* que tenga las direcciones de correo electrónico de los contactos. * **FLEXIBLE\_ASSOCIATION\_LABEL**: incluye este tipo de columna para indicar que la columna contiene etiquetas de asociación. * **ASSOCIATION\_KEYS**: utiliza este tipo de columna únicamente para las importaciones que asocien el mismo objeto, e inclúyelo para especificar el identificador único de los registros de objeto que quieres asociar. Por ejemplo, en tu solicitud de importación de una asociación de contactos, la columna *Contacto asociado \[correo electrónico o ID de registro]* debe tener un `columnType` de `ASSOCIATION_KEYS`. Más información sobre cómo [configurar el archivo de importación para una misma importación de asociación de objetos](https://knowledge.hubspot.com/es/import-and-export/set-up-your-import-file#same-object-association-imports). * **toColumnObjectTypeId**: se utiliza para importaciones que incluyan [varios archivos](#import-multiple-files) o varios objetos, este campo indica el nombre o `objectTypeId` del objeto al que pertenece la propiedad de la [columna común](https://knowledge.hubspot.com/es/import-and-export/set-up-your-import-file#import-associations-in-two-files) o la etiqueta de asociación. Debes incluir este campo para la propiedad de columna común en el archivo del objeto al que no pertenece la propiedad. Por ejemplo, si estás asociando contactos y empresas en dos archivos usando la propiedad de contacto *Correo electrónico* como columna común, incluye el `toColumnObjectTypeId` para la columna *Correo electrónico* en el archivo de empresas. * **foreignKeyType**: se utiliza solo para [importaciones de varios archivos](#import-multiple-files), es el tipo de asociación que debe usar la columna común, especificado por `associationTypeId` y `associationCategory`. Debes incluir este campo para la propiedad de columna común en el archivo del objeto al que no pertenece la propiedad. Por ejemplo, si estás asociando contactos y empresas en dos archivos con la propiedad de contacto *Correo electrónico* como columna común, incluye el `foreignKeyType` para la columna *Correo electrónico* en el archivo de empresas. * **associationIdentifierColumn**: se utiliza solo para [importaciones de varios archivos](#import-multiple-files), este campo indica la propiedad utilizada en la columna común para asociar a los registros. Incluye este campo para la propiedad de columna común en el archivo del objeto al que pertenece la propiedad. Por ejemplo, si estás asociando contactos y empresas en dos archivos con la propiedad de contacto *Correo electrónico* como columna común, establece la `associationIdentifierColumn` en `true` para la columna *Correo electrónico* en el archivo de contactos. ## Importar un archivo con un objeto A continuación, incluimos un ejemplo del cuerpo de la solicitud para importar un archivo y crear contactos: ```json example.json theme={null} // Example POST to https://api.hubspot.com/crm/v3/imports // Content-Type header set to multipart/form-data { "name": "November Marketing Event Leads", "importOperations": { "0-1": "CREATE" }, "dateFormat": "DAY_MONTH_YEAR", "files": [ { "fileName": "Nov-event-leads.csv", "fileFormat": "CSV", "fileImportPage": { "hasHeader": true, "columnMappings": [ { "columnObjectTypeId": "0-1", "columnName": "First Name", "propertyName": "firstname" }, { "columnObjectTypeId": "0-1", "columnName": "Last Name", "propertyName": "lastname" }, { "columnObjectTypeId": "0-1", "columnName": "Email", "propertyName": "email", "columnType": "HUBSPOT_ALTERNATE_ID" } ] } } ] } ``` ```python example.py theme={null} # This example a local file named 'test_import.csv' # This file contains a list of contact records to import. import requests import json import os url = "https://api.hubapi.com/crm/v3/imports" YOUR_ACCESS_TOKEN = 'xxxxxxx'; # Content-Type header will be set automatically by the requests library headers = { 'authorization': 'Bearer %s' % YOUR_ACCESS_TOKEN } data = { "name": "November Marketing Event Leads", "importOperations": { "0-1": "CREATE" }, "dateFormat": "DAY_MONTH_YEAR", "files": [ { "fileName": "Nov-event-leads.csv", "fileFormat": "CSV", "fileImportPage": { "hasHeader": True, "columnMappings": [ { "columnObjectTypeId": "0-1", "columnName": "First Name", "propertyName": "firstname" }, { "columnObjectTypeId": "0-1", "columnName": "Last Name", "propertyName": "lastname" }, { "columnObjectTypeId": "0-1", "columnName": "Email", "propertyName": "email", "columnType": "HUBSPOT_ALTERNATE_ID" } ] } } ] } datastring = json.dumps(data) payload = {"importRequest": datastring} current_dir = os.path.dirname(__file__) relative_path = "./test_import.csv" absolute_file_path = os.path.join(current_dir, relative_path) files = [ ('files', open(absolute_file_path, 'rb')) ] print(files) response = requests.request("POST", url, data=payload, files=files, headers=headers) print(response.text.encode('utf8')) print(response.status_code) ``` ```bash example.sh theme={null} # Using this endpoint requires using sending multi-part form encoded data. Here is an example curl request: # importing a file named import_file.csv # create a variable for the importRequest JSON myJSON=$(cat < [!WARNING] > > ### Nota: > > Al recuperar importaciones, la respuesta solo incluirá las importaciones realizadas por la misma aplicación. Las importaciones que se completen en HubSpot o a través de otra aplicación no serán devueltas. ## Cancelar una importación Para cancelar una importación activa, haz una solicitud `POST` a `/crm/v3/imports/{importId}/cancel`. ## Ver y solucionar los errores de importación Para ver los errores de una importación en específico, haz una solicitud `GET` a `/crm/v3/imports/{importId}/errors`. Obtén más información sobre los [errores más comunes de importación y cómo resolverlos](https://knowledge.hubspot.com/es/import-and-export/troubleshoot-import-errors). Para los errores como *Número incorrecto de columnas*, *No se puede analizar* JSON o *404 texto o html no aceptado*: * Asegúrate de que cada columna del archivo tenga un título y de que el cuerpo de la solicitud incluya una entrada `columnMapping` para cada columna. Deben cumplir con los siguientes criterios: * El orden de las columnas en el cuerpo de la solicitud y en el archivo de importación debe coincidir. Si el orden de las columnas no coincide, el sistema intentará reordenarlas automáticamente, pero puede que no lo consiga, lo que provocará un error al iniciar la importación. * Cada columna debe estar asignada. Si una columna no está asignada, la solicitud de importación puede seguir siendo exitosa, pero se generará el error *Número incorrecto de columnas* al iniciar la importación. * Asegúrate de que el nombre del archivo y el campo `fileName` del JSON de la solicitud coincidan, y de que has incluido la extensión del archivo en el campo `fileName`. Por ejemplo, *import\_name.csv.* * Asegúrate de que el encabezado incluye `Content-Type` con un valor de `multipart/form-data`. ```json example.json theme={null} Example POST URL: https://api.hubapi.com/crm/v3/imports? Example importRequest JSON data: This example contains 3 columns: - First name, mapped to the firstname contact property - Email, mapped to the email contact property - Company ID, which contains a list of company record IDs that the contact will be assocated with. { "name": "test_import", "files": [ { "fileName": "final_emails.csv", "fileImportPage": { "hasHeader": true, "columnMappings": [ { "ignored": false, "columnName": "First Name", "idColumnType": null, "propertyName": "firstname", "foreignKeyType": null, "columnObjectType": "CONTACT", "associationIdentifierColumn": false }, { "ignored": false, "columnName": "Email", "idColumnType": "HUBSPOT_ALTERNATE_ID", "propertyName": "email", "foreignKeyType": null, "columnObjectType": "CONTACT", "associationIdentifierColumn": false }, { "ignored": false, "columnName": "Company ID", "idColumnType": "HUBSPOT_OBJECT_ID", "propertyName": null, "foreignKeyType": { "associationCategory": "HUBSPOT_DEFINED", "associationTypeId": 1 }, "columnObjectType": "CONTACT", "associationIdentifierColumn": false } ] } } ] } ``` ```python example.py theme={null} # This example a local file named 'final_emails.csv' # This file contains a list of contact records to import. # Each row in the file contains a column named "Company ID" that contains the companyId # that the contact should be associated with. import requests import json post_url = 'http://api.hubapi.com/crm/v3/imports?hapikey=4324...5432' importRequest = { "name": "test_import", "files": [ { "fileName": "final_emails.csv", "fileImportPage": { "hasHeader": True, "columnMappings": [ { "ignored": False, "columnName": "First Name", "idColumnType": None, "propertyName": "firstname", "foreignKeyType": None, "columnObjectType": "CONTACT", "associationIdentifierColumn": False }, { "ignored": False, "columnName": "Email", "idColumnType": "HUBSPOT_ALTERNATE_ID", "propertyName": "email", "foreignKeyType": None, "columnObjectType": "CONTACT", "associationIdentifierColumn": False }, { "ignored": False, "columnName": "Company ID", "idColumnType": "HUBSPOT_OBJECT_ID", "propertyName": None, "foreignKeyType": { "associationCategory": "HUBSPOT_DEFINED", "associationTypeId": 1 }, "columnObjectType": "CONTACT", "associationIdentifierColumn": False } ] } } ] ``` ```php example.php theme={null} $csv_file, "importRequest" => $config_json ); $ch = curl_init(); @curl_setopt($ch, CURLOPT_POST, true); @curl_setopt($ch, CURLOPT_URL, $post_url); @curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); $response = @curl_exec($ch); //Log the response from HubSpot as needed. $status_code = @curl_getinfo($ch, CURLINFO_HTTP_CODE); //Log the response status code @curl_close($ch); echo $status_code . " " . $response; ?> ``` ```bash example.sh theme={null} # Using this endpoint requires using sending multi-part form encoded data. Here is an example curl request: # importing a file named import_file.csv # create a variable for the importRequest JSON myJSON=$(cat < [!WARNING] > > ### Nota: > > Si recibes un error, valida si hay encabezados duplicados como `Content-Type`. Esto puede ocurrir si estás usando Postman o si está incluido en el encabezado de tu script de Python. Elimina los duplicados antes de completar la solicitud. ## Límites Al usar la API de importaciones, puedes importar hasta 80.000.000 filas por día. Sin embargo, los archivos de importación individuales están limitados a 1.048.576 filas o 512 MB, lo que ocurra primero. Si tu solicitud supera el límite de filas o tamaño, HubSpot responderá con un error HTTP 429. Cuando te acerques a estos límites, se recomienda dividir tu importación en varias solicitudes. # Read calculation property limits Source: https://developers.hubspot.es/docs/api-reference/latest/crm/limits-tracking/get-calculated-properties specs/2026-09/crm-limits-tracking-v2026-09.json GET /crm/limits/2026-09/calculated-properties Devuelve el límite general y por uso de objetos para propiedades calculadas > **Supported products** > **Required Scopes** # Read custom object limits Source: https://developers.hubspot.es/docs/api-reference/latest/crm/limits-tracking/get-custom-object-types specs/2026-09/crm-limits-tracking-v2026-09.json GET /crm/limits/2026-09/custom-object-types Devuelve límites y nivel de uso para esquemas de asociación personalizados > **Supported products** > **Required Scopes** # Read custom property limits Source: https://developers.hubspot.es/docs/api-reference/latest/crm/limits-tracking/get-custom-properties specs/2026-09/crm-limits-tracking-v2026-09.json GET /crm/limits/2026-09/custom-properties Devuelve límites y nivel de uso por objeto para propiedades personalizadas > **Supported products** > **Required Scopes** # Read record association limits Source: https://developers.hubspot.es/docs/api-reference/latest/crm/limits-tracking/get-from specs/2026-09/crm-limits-tracking-v2026-09.json GET /crm/limits/2026-09/associations/records/from Devuelve objetos con registros que se acercan o están en límites de asociaciones > **Supported products** > **Required Scopes** # Read association label limits Source: https://developers.hubspot.es/docs/api-reference/latest/crm/limits-tracking/get-limits-tracking specs/2026-09/crm-limits-tracking-v2026-09.json GET /crm/limits/2026-09/associations/labels Devuelve límites y nivel de uso de las etiquetas de asociación personalizadas. > **Supported products** > **Required Scopes** # Read record association limits from an object Source: https://developers.hubspot.es/docs/api-reference/latest/crm/limits-tracking/get-limits-tracking-fromObjectTypeId specs/2026-09/crm-limits-tracking-v2026-09.json GET /crm/limits/2026-09/associations/records/{fromObjectTypeId}/to Devuelve objetos para los cuales el objeto tiene registros que se acercan o están en límites de asociaciones > **Supported products** > **Required Scopes** # Read record association limits between two objects Source: https://developers.hubspot.es/docs/api-reference/latest/crm/limits-tracking/get-limits-tracking-toObjectTypeId specs/2026-09/crm-limits-tracking-v2026-09.json GET /crm/limits/2026-09/associations/records/{fromObjectTypeId}/{toObjectTypeId} Devuelve registros que se acercan o están en límites de asociaciones entre dos objetos > **Supported products** > **Required Scopes** # Read pipeline limits Source: https://developers.hubspot.es/docs/api-reference/latest/crm/limits-tracking/get-pipelines specs/2026-09/crm-limits-tracking-v2026-09.json GET /crm/limits/2026-09/pipelines Devuelve límites y nivel de uso por objeto para pipelines > **Supported products** > **Required Scopes** # Read record limits Source: https://developers.hubspot.es/docs/api-reference/latest/crm/limits-tracking/get-records specs/2026-09/crm-limits-tracking-v2026-09.json GET /crm/limits/2026-09/records Devuelve límites y nivel de uso por objeto para registros > **Supported products** > **Required Scopes** # Limits Tracking API Source: https://developers.hubspot.es/docs/api-reference/latest/crm/limits-tracking/guide # Create List Source: https://developers.hubspot.es/docs/api-reference/latest/crm/lists/create-list specs/2026-09/crm-lists-v2026-09.json POST /crm/lists/2026-09 Crea una lista nueva en la cuenta de HubSpot usando los parámetros especificados. Este punto de terminación te permite definir las propiedades y los criterios para la lista, que puedes usar para organizar y gestionar contactos u otros objetos del CRM. > **Supported products** > **Required Scopes** # Delete Source: https://developers.hubspot.es/docs/api-reference/latest/crm/lists/delete-list specs/2026-09/crm-lists-v2026-09.json DELETE /crm/lists/2026-09/{listId} Elimina una lista específica de tu cuenta de HubSpot usando su identificador único. Esta operación eliminará permanentemente la lista y sus datos asociados, asegurando que ya no sea accesible. > **Supported products** > **Required Scopes** # List all Source: https://developers.hubspot.es/docs/api-reference/latest/crm/lists/get-all-lists specs/2026-09/crm-lists-v2026-09.json POST /crm/lists/2026-09/all Obtén todas las listas del sistema de CRM. Este punto de conexión te permite obtener una lista completa de todas las listas disponibles, lo que puede ser útil para gestionar y organizar tus datos del CRM de forma eficaz. > **Supported products** > **Required Scopes** # Retrieve List Source: https://developers.hubspot.es/docs/api-reference/latest/crm/lists/get-list specs/2026-09/crm-lists-v2026-09.json GET /crm/lists/2026-09/object-type-id/{objectTypeId}/name/{listName} Obtén una lista específica por su nombre y el ID del tipo de objeto en tu cuenta de HubSpot. Este punto de terminación te permite acceder a los detalles de una lista, lo que puede ser útil para gestionar y analizar tus datos del CRM. También puedes elegir incluir filtros en la respuesta. > **Supported products** > **Required Scopes** # Retrieve segment size and edits history Source: https://developers.hubspot.es/docs/api-reference/latest/crm/lists/get-list-history specs/2026-09/crm-lists-v2026-09.json GET /crm/lists/2026-09/{listId}/size-and-edits-history/between Obtén el tamaño y el historial de ediciones de una lista específica dentro de un rango de fechas definido. Este punto de terminación es útil para seguir los cambios y entender la evolución del tamaño de la lista a lo largo del tiempo. > **Supported products** > **Required Scopes** # Retrieve list Source: https://developers.hubspot.es/docs/api-reference/latest/crm/lists/get-list-listId specs/2026-09/crm-lists-v2026-09.json GET /crm/lists/2026-09/{listId} Obtén los detalles de una lista específica en la cuenta de HubSpot usando el identificador único de la lista. Este punto de terminación permite incluir opcionalmente los filtros asociados a la lista en la respuesta. > **Supported products** > **Required Scopes** # List Source: https://developers.hubspot.es/docs/api-reference/latest/crm/lists/get-lists specs/2026-09/crm-lists-v2026-09.json GET /crm/lists/2026-09 Obtén una lista de las listas del CRM en tu cuenta de HubSpot. Este punto de terminación te permite filtrar las listas por sus ID e incluir, opcionalmente, los filtros aplicados a las listas. Es útil para gestionar y organizar tus datos del CRM al acceder a listas específicas. > **Supported products** > **Required Scopes** # Segments API Source: https://developers.hubspot.es/docs/api-reference/latest/crm/lists/guide # Restore Source: https://developers.hubspot.es/docs/api-reference/latest/crm/lists/restore-list specs/2026-09/crm-lists-v2026-09.json PUT /crm/lists/2026-09/{listId}/restore Restaura una lista eliminada previamente en la cuenta de HubSpot. Esta operación te permite recuperar listas que se han eliminado, asegurando que se restablezcan los datos o las configuraciones asociadas. Esto puede ser útil para recuperar listas que se eliminaron por error o que se necesitan de nuevo para operaciones en curso. > **Supported products** > **Required Scopes** # Update list name Source: https://developers.hubspot.es/docs/api-reference/latest/crm/lists/update-list-name specs/2026-09/crm-lists-v2026-09.json PUT /crm/lists/2026-09/{listId}/update-list-name Actualiza el nombre de una lista específica en la cuenta de HubSpot. Este punto de terminación permite cambiar el nombre de la lista especificando el nuevo nombre como un parámetro de consulta. Es útil para mantener las listas organizadas y actualizadas con títulos relevantes. > **Supported products** > **Required Scopes** # Segment (list) filters overview Source: https://developers.hubspot.es/docs/api-reference/latest/crm/lists/filters/guide # Update list filters Source: https://developers.hubspot.es/docs/api-reference/latest/crm/lists/filters/update-list-filters specs/2026-09/crm-lists-v2026-09.json PUT /crm/lists/2026-09/{listId}/update-list-filters Actualiza los filtros de una lista específica en la cuenta de HubSpot. Esta operación te permite modificar los criterios usados para incluir objetos en la lista. También puedes especificar si los objetos deben inscribirse en workflows según los filtros actualizados. > **Supported products** > **Required Scopes** # Retrieve ID Mapping Source: https://developers.hubspot.es/docs/api-reference/latest/crm/lists/id-mapping/translate-id specs/2026-09/crm-lists-v2026-09.json GET /crm/lists/2026-09/idmapping Obtén el mapeo de los ID de listas heredadas a sus ID actuales en el sistema de HubSpot. Este punto de terminación es útil para migrar o actualizar sistemas que dependen de identificadores de listas heredadas. > **Supported products** > **Required Scopes** # Map IDs Source: https://developers.hubspot.es/docs/api-reference/latest/crm/lists/id-mapping/translate-id-batch specs/2026-09/crm-lists-v2026-09.json POST /crm/lists/2026-09/idmapping Mapea los ID de listas heredadas a sus nuevos ID correspondientes en el sistema de HubSpot. Este punto de terminación es útil para migrar datos de sistemas más antiguos a la estructura actual de HubSpot, asegurando que todas las referencias de listas se actualicen correctamente. > **Supported products** > **Required Scopes** # Cancel the conversion of a segment Source: https://developers.hubspot.es/docs/api-reference/latest/crm/lists/list-management/cancel-conversion specs/2026-09/crm-lists-v2026-09.json DELETE /crm/lists/2026-09/{listId}/schedule-conversion Elimina una conversión programada para una lista específica en tu cuenta de HubSpot. Esta operación es útil cuando necesitas cancelar una conversión programada previamente para una lista identificada por su listId. > **Supported products** > **Required Scopes** # Create Folder Source: https://developers.hubspot.es/docs/api-reference/latest/crm/lists/list-management/create-folder specs/2026-09/crm-lists-v2026-09.json POST /crm/lists/2026-09/folders Crea una nueva carpeta dentro de las listas del CRM en tu cuenta de HubSpot. Esta operación te permite organizar tus listas en carpetas para una mejor gestión y accesibilidad. > **Supported products** > **Required Scopes** # Delete folder Source: https://developers.hubspot.es/docs/api-reference/latest/crm/lists/list-management/delete-folder specs/2026-09/crm-lists-v2026-09.json DELETE /crm/lists/2026-09/folders/{folderId} Elimina una carpeta específica de las listas del CRM proporcionando su identificador único. Esta operación es útil para quitar carpetas que ya no necesitas o para limpiar la estructura de carpetas en las listas del CRM. > **Supported products** > **Required Scopes** # Retrieve the conversion details for a segment Source: https://developers.hubspot.es/docs/api-reference/latest/crm/lists/list-management/get-conversion-details specs/2026-09/crm-lists-v2026-09.json GET /crm/lists/2026-09/{listId}/schedule-conversion Obtén los detalles de conversión programada para una lista específica en la cuenta de HubSpot. Este punto de terminación proporciona información sobre cualquier conversión programada para la lista especificada, lo que te permite gestionar y hacer seguimiento eficaz de las conversiones de la lista. > **Supported products** > **Required Scopes** # List folders Source: https://developers.hubspot.es/docs/api-reference/latest/crm/lists/list-management/get-folder specs/2026-09/crm-lists-v2026-09.json GET /crm/lists/2026-09/folders Obtén una lista de carpetas dentro de las listas del CRM. Este punto de terminación se puede usar para navegar por la estructura de carpetas al especificar un ID de carpeta. Es útil para organizar y gestionar listas dentro de las carpetas. > **Supported products** > **Required Scopes** # Move Folder Source: https://developers.hubspot.es/docs/api-reference/latest/crm/lists/list-management/move-folder specs/2026-09/crm-lists-v2026-09.json PUT /crm/lists/2026-09/folders/{folderId}/move/{newParentFolderId} Mueve una carpeta a una nueva carpeta principal dentro de las listas del CRM. Esta operación es útil para reorganizar la estructura de tus carpetas cambiando la carpeta principal de una carpeta específica. > **Supported products** > **Required Scopes** # Move List Source: https://developers.hubspot.es/docs/api-reference/latest/crm/lists/list-management/move-list-to-folder specs/2026-09/crm-lists-v2026-09.json PUT /crm/lists/2026-09/folders/move-list Mueve una lista a una carpeta diferente dentro de tu cuenta de HubSpot. Esta operación requiere especificar la lista y la carpeta de destino. Es útil para organizar listas en diferentes categorías o estructuras. > **Supported products** > **Required Scopes** # Rename folder Source: https://developers.hubspot.es/docs/api-reference/latest/crm/lists/list-management/rename-folder specs/2026-09/crm-lists-v2026-09.json PUT /crm/lists/2026-09/folders/{folderId}/rename Cambia el nombre de una carpeta existente en las listas del CRM especificando el ID de la carpeta y el nuevo nombre que se desee. Esto puede ser útil para organizar y actualizar las estructuras de carpetas dentro de la cuenta. > **Supported products** > **Required Scopes** # Schedule or update the conversion of a segment to static Source: https://developers.hubspot.es/docs/api-reference/latest/crm/lists/list-management/schedule-conversion specs/2026-09/crm-lists-v2026-09.json PUT /crm/lists/2026-09/{listId}/schedule-conversion Programa una conversión para una lista específica en la cuenta de HubSpot. Esta operación te permite establecer un tiempo de conversión para la lista identificada por el listId. Usa este punto de terminación para gestionar eficazmente el programa de conversiones de tus listas. > **Supported products** > **Required Scopes** # Add memberships Source: https://developers.hubspot.es/docs/api-reference/latest/crm/lists/memberships/add-to-list specs/2026-09/crm-lists-v2026-09.json PUT /crm/lists/2026-09/{listId}/memberships/add Agrega membresías a una lista específica en tu cuenta de HubSpot. Este punto de terminación te permite agregar varias membresías a una lista identificada por el listId. Es útil para gestionar pertenencias a una lista de forma masiva, asegurando que los registros especificados se incluyan en la lista. > **Supported products** > **Required Scopes** # Add memberships Source: https://developers.hubspot.es/docs/api-reference/latest/crm/lists/memberships/add-to-list-from-source-list specs/2026-09/crm-lists-v2026-09.json PUT /crm/lists/2026-09/{listId}/memberships/add-from/{sourceListId} Agrega pertenencias a una lista específica desde otra lista de origen. Esta operación es útil para consolidar pertenencias a una lista al transferir miembros de una lista a otra. El punto de terminación no devuelve ningún contenido tras una ejecución exitosa. > **Supported products** > **Required Scopes** # Delete all records from a segment Source: https://developers.hubspot.es/docs/api-reference/latest/crm/lists/memberships/delete-list-listId specs/2026-09/crm-lists-v2026-09.json DELETE /crm/lists/2026-09/{listId}/memberships Elimina todas las membresías asociadas a una lista específica en tu cuenta de HubSpot. Esta operación es útil cuando necesitas eliminar a todos los miembros de una lista, borrando así sus datos de membresía. > **Supported products** > **Required Scopes** # Retrieve memberships Source: https://developers.hubspot.es/docs/api-reference/latest/crm/lists/memberships/get-lists-per-record specs/2026-09/crm-lists-v2026-09.json GET /crm/lists/2026-09/records/{objectTypeId}/{recordId}/memberships Obtén las pertenencias a una lista para un registro específico dentro de un tipo de objeto determinado. Este punto de terminación es útil para entender a qué listas pertenece un registro en particular, según el tipo de objeto y el ID de registro proporcionados. > **Supported products** > **Required Scopes** # Batch read memberships Source: https://developers.hubspot.es/docs/api-reference/latest/crm/lists/memberships/get-memberships-batch specs/2026-09/crm-lists-v2026-09.json POST /crm/lists/2026-09/records/memberships/batch/read Obtén información de membresía por lotes para registros dentro de listas específicas. Este punto de terminación es útil para obtener detalles de membresía de forma masiva, lo que permite una obtención eficiente de datos al trabajar con varios registros. > **Supported products** > **Required Scopes** # Fetch segment memberships ordered by added to segment date Source: https://developers.hubspot.es/docs/api-reference/latest/crm/lists/memberships/get-memberships-by-added-date specs/2026-09/crm-lists-v2026-09.json GET /crm/lists/2026-09/{listId}/memberships/join-order Obtén el orden en que los miembros se unieron a una lista específica en la cuenta de HubSpot. Este punto de terminación te permite ver el orden en que los registros se unieron a la lista, lo que puede ser útil para hacer seguimiento de los cambios de membresía a lo largo del tiempo. > **Supported products** > **Required Scopes** # List memberships Source: https://developers.hubspot.es/docs/api-reference/latest/crm/lists/memberships/get-memberships-by-id specs/2026-09/crm-lists-v2026-09.json GET /crm/lists/2026-09/{listId}/memberships Obtén las membresías de una lista específica en tu cuenta de HubSpot. Este punto de terminación te permite paginar las pertenencias a una lista usando paginación basada en cursor. Es útil para obtener información detallada de las membresías de una lista determinada. > **Supported products** > **Required Scopes** # Remove segment memberships Source: https://developers.hubspot.es/docs/api-reference/latest/crm/lists/memberships/remove-from-list specs/2026-09/crm-lists-v2026-09.json PUT /crm/lists/2026-09/{listId}/memberships/remove Elimina membresías de una lista específica en tu cuenta de HubSpot. Esta operación es útil para gestionar las pertenencias a una lista al eliminar registros específicos de la lista. La solicitud requiere una lista de ID de registro para eliminar de la lista especificada. > **Supported products** > **Required Scopes** # Update segment membership Source: https://developers.hubspot.es/docs/api-reference/latest/crm/lists/memberships/update-list-memberships specs/2026-09/crm-lists-v2026-09.json PUT /crm/lists/2026-09/{listId}/memberships/add-and-remove Actualiza las pertenencias a una lista agregando y eliminando miembros en una sola operación. Este punto de terminación te permite gestionar eficientemente las pertenencias a una lista especificando qué miembros agregar y cuáles eliminar en una sola solicitud. > **Supported products** > **Required Scopes** # Search Lists Source: https://developers.hubspot.es/docs/api-reference/latest/crm/lists/search/search-lists specs/2026-09/crm-lists-v2026-09.json POST /crm/lists/2026-09/search Busca listas en tu cuenta de HubSpot usando varios criterios. Este punto de terminación te permite filtrar y obtener listas según parámetros de búsqueda específicos, lo que facilita la gestión y organización efectiva de tus listas. > **Supported products** > **Required Scopes** # Create a batch of appointments Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/appointments/batch/create-appointments specs/2026-09/crm-appointments-v2026-09.json POST /crm/objects/2026-09/{objectType}/batch/create Crear múltiples citas en una única solicitud. > **Supported products** > **Required Scopes** # Archive a batch of appointments by ID Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/appointments/batch/delete-appointments specs/2026-09/crm-appointments-v2026-09.json POST /crm/objects/2026-09/{objectType}/batch/archive Archivar múltiples citas usando sus ID. > **Supported products** > **Required Scopes** # Read a batch of appointments by internal ID, or unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/appointments/batch/get-appointments specs/2026-09/crm-appointments-v2026-09.json POST /crm/objects/2026-09/{objectType}/batch/read Recupera registros por ID de registro o incluye el parámetro `idProperty` para recuperar registros por propiedad de valor único personalizada. > **Supported products** > **Required Scopes** # Update a batch of appointments by internal ID, or unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/appointments/batch/update-appointments specs/2026-09/crm-appointments-v2026-09.json POST /crm/objects/2026-09/{objectType}/batch/update Actualiza un lote de objetos de CRM de un tipo específico en HubSpot. Este endpoint te permite modificar varios objetos en una sola solicitud, lo que lo hace eficiente para actualizaciones masivas. El cuerpo de la solicitud debe incluir los objetos y sus propiedades a actualizar. > **Supported products** > **Required Scopes** # Create or update a batch of appointments by unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/appointments/batch/upsert-appointments specs/2026-09/crm-appointments-v2026-09.json POST /crm/objects/2026-09/{objectType}/batch/upsert Crea o actualiza registros identificados por un valor único de propiedad según lo especificado por el parámetro de consulta `idProperty`. El parámetro de consulta `idProperty` se refiere a una propiedad cuyos valores son únicos para el objeto. > **Supported products** > **Required Scopes** # Create appointment Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/appointments/create-appointment specs/2026-09/crm-appointments-v2026-09.json POST /crm/objects/2026-09/{objectType} Crea una citas con las propiedades dadas y devuelve una copia del objeto, incluyendo el ID. Se proporciona documentación y ejemplos para crear citas estándar. > **Supported products** > **Required Scopes** # Delete appointment Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/appointments/delete-appointment specs/2026-09/crm-appointments-v2026-09.json DELETE /crm/objects/2026-09/{objectType}/{objectId} Mueve un objeto identificado por `{appointmentId}` a la papelera de reciclaje. > **Supported products** > **Required Scopes** # Retrieve appointment Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/appointments/get-appointment specs/2026-09/crm-appointments-v2026-09.json GET /crm/objects/2026-09/{objectType}/{objectId} Lee un objeto identificado por `{appointmentId}`. `{appointmentId}` se refiere al ID de objeto interno por opción predeterminada o, de manera opcional, a cualquier valor de propiedad único especificado por el parámetro de consulta `idProperty`. Controla lo que se devuelve mediante el parámetro de consulta `properties`. > **Supported products** > **Required Scopes** # Retrieve appointments Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/appointments/get-appointments specs/2026-09/crm-appointments-v2026-09.json GET /crm/objects/2026-09/{objectType} Lee una página de citas. Controla lo que se devuelve a través del parámetro de consulta `properties`. > **Supported products** > **Required Scopes** # Appointments API Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/appointments/guide # Merge two appointments Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/appointments/merge/merge-appointments specs/2026-09/crm-appointments-v2026-09.json POST /crm/objects/2026-09/{objectType}/merge Combinar dos tipos de objetos > **Supported products** > **Required Scopes** # Appointment object definition Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/appointments/object-definition # Search for appointments Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/appointments/search/search-appointments specs/2026-09/crm-appointments-v2026-09.json POST /crm/objects/2026-09/{objectType}/search Busca citas según criterios específicos. Más información sobre [búsqueda de CRM](https://developers.hubspot.com/docs/guides/api/crm/search#make-a-search-request). > **Supported products** > **Required Scopes** # Update appointment Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/appointments/update-appointment specs/2026-09/crm-appointments-v2026-09.json PATCH /crm/objects/2026-09/{objectType}/{objectId} Realiza una actualización parcial de un objeto identificado por `{appointmentId}` o, de manera opcional, a cualquier valor de propiedad único según lo especificado por el parámetro de consulta `idProperty`. `{appointmentId}` se refiere al ID de objeto interno de manera predeterminada y el parámetro de consulta `idProperty` se refiere a una propiedad cuyos valores son únicos para el objeto. Se sobrescribirán los valores de propiedad especificados. Las propiedades de solo lectura y las no existentes generarán un error. Los valores de las propiedades pueden borrarse pasando una cadena vacía. > **Supported products** > **Required Scopes** # Create carts Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/carts/batch/create-carts specs/2026-09/crm-carts-v2026-09.json POST /crm/objects/2026-09/carts/batch/create Crea un lote de objetos del CRM de HubSpot en tu cuenta de HubSpot. Este punto de terminación te permite crear varios objetos a la vez al especificar sus propiedades. La respuesta incluirá una copia de cada objeto creado, incluidos sus ID. Esto es útil para agregar de forma eficiente grandes conjuntos de datos a tu CRM. > **Supported products** > **Required Scopes** # Archive carts Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/carts/batch/delete-carts specs/2026-09/crm-carts-v2026-09.json POST /crm/objects/2026-09/carts/batch/archive Archiva un lote de objetos del CRM identificados por sus ID. Esta operación mueve los objetos especificados a la papelera de reciclaje y los archiva de forma masiva. Es útil para gestionar grandes conjuntos de datos que necesitan archivarse simultáneamente. > **Supported products** > **Required Scopes** # Retrieve carts Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/carts/batch/get-carts specs/2026-09/crm-carts-v2026-09.json POST /crm/objects/2026-09/carts/batch/read Obtén un lote de objetos del CRM por sus ID internos o valores de propiedades únicos. Este punto de conexión es útil para obtener varios objetos en una sola solicitud, lo que permite una obtención eficiente de los datos. Se puede especificar si se quieren incluir objetos archivados en la respuesta. > **Supported products** > **Required Scopes** # Update carts Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/carts/batch/update-carts specs/2026-09/crm-carts-v2026-09.json POST /crm/objects/2026-09/carts/batch/update Actualiza un lote de objetos del CRM de HubSpot en tu cuenta de HubSpot. Este punto de terminación te permite modificar varios objetos a la vez al dar sus propiedades. Es útil para actualizaciones masivas en las que necesitas cambiar información en varios registros simultáneamente. > **Supported products** > **Required Scopes** # Upsert carts Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/carts/batch/upsert-carts specs/2026-09/crm-carts-v2026-09.json POST /crm/objects/2026-09/carts/batch/upsert Crea o actualiza un lote de objetos del CRM por valores de propiedad únicos. Esta operación permite insertar objetos nuevos o actualizar los existentes según los identificadores únicos proporcionados. Es útil para operaciones masivas en las que se necesita asegurar que los objetos estén actualizados o que se agreguen si no existen. > **Supported products** > **Required Scopes** # Create a cart Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/carts/create-cart specs/2026-09/crm-carts-v2026-09.json POST /crm/objects/2026-09/carts Crea un objeto de CRM con las propiedades especificadas y recibe una copia del objeto, incluido su ID. Este punto de terminación es útil para agregar nuevos objetos a tu sistema de CRM con propiedades predefinidas. Se proporciona documentación y ejemplos para crear objetos estándar. > **Supported products** > **Required Scopes** # Archive a cart Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/carts/delete-cart specs/2026-09/crm-carts-v2026-09.json DELETE /crm/objects/2026-09/carts/{cartId} Mueve un objeto identificado por `{objectId}` a la papelera de reciclaje. Esta operación es útil para eliminar objetos temporalmente sin borrarlos de forma permanente, lo que permite una posible recuperación o revisión antes de la eliminación final. > **Supported products** > **Required Scopes** # Retrieve a cart Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/carts/get-cart specs/2026-09/crm-carts-v2026-09.json GET /crm/objects/2026-09/carts/{cartId} Lee un objeto identificado por `{objectId}`. Por opción predeterminada, `{objectId}` se refiere al ID de objeto interno, pero también puede referirse a cualquier valor de propiedad único especificado por el parámetro de consulta `idProperty`. Puedes controlar el contenido de la respuesta usando el parámetro de consulta `properties` para especificar qué propiedades devolver. > **Supported products** > **Required Scopes** # Retrieve all carts Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/carts/get-carts specs/2026-09/crm-carts-v2026-09.json GET /crm/objects/2026-09/carts Lee una página de objetos del tipo especificado. Puedes controlar los datos que se devuelven especificando las propiedades que quieres incluir en la respuesta. Este punto de terminación es útil para recuperar una lista de objetos de CRM con capacidades opcionales de filtrado y paginación. > **Supported products** > **Required Scopes** # Carts API Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/carts/guide # Cart object definition Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/carts/object-definition # Search for carts Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/carts/search/search-carts specs/2026-09/crm-carts-v2026-09.json POST /crm/objects/2026-09/carts/search Busca objetos del CRM de un tipo específico usando varios filtros y criterios. Este punto de terminación te permite consultar objetos del CRM al especificar grupos de filtros, opciones de clasificación y propiedades para incluir en la respuesta. Es útil para obtener una lista personalizada de objetos basada en parámetros de búsqueda específicos. > **Supported products** > **Required Scopes** # Update a cart Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/carts/update-cart specs/2026-09/crm-carts-v2026-09.json PATCH /crm/objects/2026-09/carts/{cartId} Realiza una actualización parcial de un objeto identificado por "{objectId}". "{objectId}" se refiere al ID interno del objeto, por opción predeterminada, u opcionalmente a cualquier valor de propiedad único según lo especificado por el parámetro de consulta "idProperty". Se sobrescribirán los valores de propiedad especificados. Se ignorarán las propiedades de solo lectura y las no existentes. Los valores de las propiedades pueden borrarse pasando una cadena vacía. > **Supported products** > **Required Scopes** # Create payments Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/commerce-payments/batch/create-commerce-payments specs/2026-09/crm-commerce-payments-v2026-09.json POST /crm/objects/2026-09/commerce_payments/batch/create Crea un lote de objetos del CRM con las propiedades especificadas. Este punto de conexión te permite crear varios objetos de forma eficiente en una única solicitud y devuelve una respuesta que incluye los detalles de los objetos creados. Es útil para operaciones de datos en bloque en las que necesitas añadir varios objetos a la vez. > **Supported products** > **Required Scopes** # Delete payments Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/commerce-payments/batch/delete-commerce-payments specs/2026-09/crm-commerce-payments-v2026-09.json POST /crm/objects/2026-09/commerce_payments/batch/archive Archiva un lote de objetos del CRM por sus ID. Este punto de terminación es útil para mover varios objetos a la papelera de reciclaje en una sola solicitud, lo que agiliza el proceso de gestionar grandes conjuntos de datos. > **Supported products** > **Required Scopes** # Retrieve payments Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/commerce-payments/batch/get-commerce-payments specs/2026-09/crm-commerce-payments-v2026-09.json POST /crm/objects/2026-09/commerce_payments/batch/read Lee un lote de objetos del CRM por sus ID internos o valores de propiedades únicos. Este punto de conexión te permite obtener varios objetos en una única solicitud, lo que lo hace eficiente para la obtención de datos en bloque. Admite el filtrado de objetos archivados. > **Supported products** > **Required Scopes** # Update payments Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/commerce-payments/batch/update-commerce-payments specs/2026-09/crm-commerce-payments-v2026-09.json POST /crm/objects/2026-09/commerce_payments/batch/update Actualiza un lote de objetos del CRM en tu cuenta de HubSpot. Este punto de conexión te permite modificar varios objetos de un tipo específico en una única solicitud. Es útil para actualizaciones en bloque, ya que garantiza que todos los objetos especificados se actualicen con uniformidad y eficiencia. > **Supported products** > **Required Scopes** # Upsert payments Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/commerce-payments/batch/upsert-commerce-payments specs/2026-09/crm-commerce-payments-v2026-09.json POST /crm/objects/2026-09/commerce_payments/batch/upsert Crea o actualiza un lote de objetos del CRM por valores de propiedades únicos. Este punto de conexión te permite gestionar eficientemente múltiples objetos en una única solicitud y garantiza que los objetos existentes se actualicen y se creen nuevos según sea necesario. > **Supported products** > **Required Scopes** # Create a payment Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/commerce-payments/create-commerce-payment specs/2026-09/crm-commerce-payments-v2026-09.json POST /crm/objects/2026-09/commerce_payments Crea un objeto del CRM con las propiedades especificadas y obtén una copia del objeto, incluido su ID. Este punto de conexión es útil para añadir nuevos registros a tu sistema de CRM. Se proporcionan documentación y ejemplos para crear objetos estándar. > **Supported products** > **Required Scopes** # Delete a payment Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/commerce-payments/delete-commerce-payment specs/2026-09/crm-commerce-payments-v2026-09.json DELETE /crm/objects/2026-09/commerce_payments/{commercePaymentId} Mueve un objeto identificado por `{objectId}` a la papelera de reciclaje. Esta operación archiva el objeto de forma efectiva, lo que hace que ya no esté activo, pero se que se pueda obtener si es necesario. > **Supported products** > **Required Scopes** # Retrieve a payment Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/commerce-payments/get-commerce-payment specs/2026-09/crm-commerce-payments-v2026-09.json GET /crm/objects/2026-09/commerce_payments/{commercePaymentId} Lee un objeto identificado por `objectId`. De forma predeterminada, `objectId` se refiere al ID de objeto interno, pero puedes especificar un valor de propiedad único usando el parámetro de consulta `idProperty`. Puede controlar el contenido de la respuesta usando el parámetro de consulta `properties` para incluir propiedades específicas. > **Supported products** > **Required Scopes** # Retrieve payments Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/commerce-payments/get-commerce-payments specs/2026-09/crm-commerce-payments-v2026-09.json GET /crm/objects/2026-09/commerce_payments Obtén una página de objetos del CRM de un tipo específico. Puedes controlar los datos que se devuelven especificando propiedades, asociaciones y el estado de archivado. Este punto de conexión es útil para obtener una lista de objetos con atributos y asociaciones específicas. > **Supported products** > **Required Scopes** # Payments API Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/commerce-payments/guide # Commerce payment object definition Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/commerce-payments/object-definition # Search for payments Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/commerce-payments/search/search-commerce-payments specs/2026-09/crm-commerce-payments-v2026-09.json POST /crm/objects/2026-09/commerce_payments/search Busca objetos del CRM de un tipo específico usando los criterios de búsqueda proporcionados. Este punto de conexión permite filtrar y ordenar objetos según varias propiedades, lo que lo hace útil para obtener conjuntos de datos específicos del CRM. > **Supported products** > **Required Scopes** # Update a payment Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/commerce-payments/update-commerce-payment specs/2026-09/crm-commerce-payments-v2026-09.json PATCH /crm/objects/2026-09/commerce_payments/{commercePaymentId} Realiza una actualización parcial de un objeto identificado por "{objectId}". "{objectId}" se refiere al ID interno del objeto, por opción predeterminada, u opcionalmente a cualquier valor de propiedad único según lo especificado por el parámetro de consulta "idProperty". Se sobrescribirán los valores de propiedad especificados. Se ignorarán las propiedades de solo lectura y las no existentes. Los valores de las propiedades pueden borrarse pasando una cadena vacía. > **Supported products** > **Required Scopes** # Create subscriptions Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/commerce-subscriptions/batch/create-commerce-subscriptions specs/2026-09/crm-commerce-subscriptions-v2026-09.json POST /crm/objects/2026-09/subscriptions/batch/create Crea varios objetos de suscripción en una sola operación por lotes, lo que permite introducir y gestionar datos de forma eficiente. > **Supported products** > **Required Scopes** # Archive multiple subscriptions Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/commerce-subscriptions/batch/delete-commerce-subscriptions specs/2026-09/crm-commerce-subscriptions-v2026-09.json POST /crm/objects/2026-09/subscriptions/batch/archive Archiva un lote de objetos de suscripción proporcionando sus ID en el cuerpo de la solicitud. > **Supported products** > **Required Scopes** # Retrieve subscriptions Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/commerce-subscriptions/batch/get-commerce-subscriptions specs/2026-09/crm-commerce-subscriptions-v2026-09.json POST /crm/objects/2026-09/subscriptions/batch/read Recupera un lote de objetos de suscripción del CRM por sus ID, incluidas las propiedades especificadas y sus historiales. > **Supported products** > **Required Scopes** # Update subscriptions Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/commerce-subscriptions/batch/update-commerce-subscriptions specs/2026-09/crm-commerce-subscriptions-v2026-09.json POST /crm/objects/2026-09/subscriptions/batch/update Actualiza varios objetos de suscripción en una sola operación en lote, lo que permite modificar eficazmente los registros de suscripción del CRM. > **Supported products** > **Required Scopes** # Upsert subscriptions Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/commerce-subscriptions/batch/upsert-commerce-subscriptions specs/2026-09/crm-commerce-subscriptions-v2026-09.json POST /crm/objects/2026-09/subscriptions/batch/upsert Este punto de terminación te permite realizar una operación de actualización y creación por lotes en objetos de suscripción, que actualizarán los registros existentes o crearán otros nuevos si aún no existen. La operación devuelve el estado, las marcas de tiempo y una lista de objetos procesados correctamente. > **Supported products** > **Required Scopes** # Create a subscription Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/commerce-subscriptions/create-commerce-subscription specs/2026-09/crm-commerce-subscriptions-v2026-09.json POST /crm/objects/2026-09/subscriptions Crea un nuevo objeto de suscripción con propiedades especificadas y asociaciones opcionales. > **Supported products** > **Required Scopes** # Delete a subscription Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/commerce-subscriptions/delete-commerce-subscription specs/2026-09/crm-commerce-subscriptions-v2026-09.json DELETE /crm/objects/2026-09/subscriptions/{subscriptionId} Elimina una suscripción específica por su ID. > **Supported products** > **Required Scopes** # Retrieve a subscription Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/commerce-subscriptions/get-commerce-subscription specs/2026-09/crm-commerce-subscriptions-v2026-09.json GET /crm/objects/2026-09/subscriptions/{subscriptionId} Recuperar una suscripción específica por su ID, incluidas sus propiedades y asociaciones. > **Supported products** > **Required Scopes** # Retrieve subscriptions Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/commerce-subscriptions/get-commerce-subscriptions specs/2026-09/crm-commerce-subscriptions-v2026-09.json GET /crm/objects/2026-09/subscriptions Recupera una lista de objetos de suscripción, con opciones para filtrar por propiedades, asociaciones y estado archivado. > **Supported products** > **Required Scopes** # Subscriptions API Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/commerce-subscriptions/guide # Commerce subscription object definition Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/commerce-subscriptions/object-definition # Search for subscriptions Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/commerce-subscriptions/search/search-commerce-subscriptions specs/2026-09/crm-commerce-subscriptions-v2026-09.json POST /crm/objects/2026-09/subscriptions/search Ejecuta una búsqueda de suscripciones de comercio del CRM según filtros, propiedades y opciones de clasificación definidos. Este punto de terminación permite realizar consultas complejas para recuperar datos de suscripción específicos, lo que admite la paginación y una variedad de parámetros de búsqueda. > **Supported products** > **Required Scopes** # Update a subscription Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/commerce-subscriptions/update-commerce-subscription specs/2026-09/crm-commerce-subscriptions-v2026-09.json PATCH /crm/objects/2026-09/subscriptions/{subscriptionId} Actualizar una suscripción específica por su ID con nuevos valores de propiedad. > **Supported products** > **Required Scopes** # Create communications Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/communications/batch/create-communications specs/2026-09/crm-communications-v2026-09.json POST /crm/objects/2026-09/communications/batch/create Crea un lote de objetos del CRM con propiedades específicas en tu cuenta de HubSpot. Este punto de conexión permite crear varios objetos en una sola solicitud, devolviendo una copia de cada objeto, incluidos sus ID. Es útil para agregar un gran número de objetos de forma eficiente. > **Supported products** > **Required Scopes** # Archive communications Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/communications/batch/delete-communications specs/2026-09/crm-communications-v2026-09.json POST /crm/objects/2026-09/communications/batch/archive Archiva un lote de objetos del CRM por sus ID. Este punto de conexión permite mover varios objetos de un tipo específico a la papelera de reciclaje en una sola solicitud. Es útil para gestionar y organizar de forma eficiente grandes conjuntos de datos al eliminar registros innecesarios u obsoletos. > **Supported products** > **Required Scopes** # Retrieve communications Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/communications/batch/get-communications specs/2026-09/crm-communications-v2026-09.json POST /crm/objects/2026-09/communications/batch/read Lee un lote de objetos del CRM por sus ID internos o valores de propiedad únicos. Este punto de conexión te permite recuperar varios objetos en una sola solicitud, lo que puede ser útil para recopilar datos de manera eficiente para un conjunto de objetos. Puedes especificar si quieres incluir objetos archivados en la respuesta. > **Supported products** > **Required Scopes** # Update communciations Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/communications/batch/update-communications specs/2026-09/crm-communications-v2026-09.json POST /crm/objects/2026-09/communications/batch/update Actualiza un lote de objetos del CRM en HubSpot especificando el tipo de objeto y proporcionando los datos necesarios en el cuerpo de la solicitud. Este punto de conexión es útil para hacer actualizaciones masivas de objetos, como contactos o negocios, en una sola llamada a la API. Permite actualizar varios objetos simultáneamente, lo que agiliza el proceso de gestión de datos dentro de tu CRM. > **Supported products** > **Required Scopes** # Upsert communications Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/communications/batch/upsert-communications specs/2026-09/crm-communications-v2026-09.json POST /crm/objects/2026-09/communications/batch/upsert Crea o actualiza un lote de objetos del CRM por valores de propiedades únicos. Este punto de conexión te permite gestionar de forma eficiente grandes conjuntos de objetos, ya sea para insertar nuevos o actualizar los existentes según sus propiedades únicas. > **Supported products** > **Required Scopes** # Create a communication Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/communications/create-communication specs/2026-09/crm-communications-v2026-09.json POST /crm/objects/2026-09/communications Crea un objeto del CRM con las propiedades especificadas y recibe una copia del objeto, incluyendo su ID. Este punto de conexión es útil para agregar nuevos registros al sistema del CRM. Asegúrate de que todas las propiedades necesarias estén incluidas en el cuerpo de la solicitud según la documentación para objetos estándar. > **Supported products** > **Required Scopes** # Delete a communication Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/communications/delete-communication specs/2026-09/crm-communications-v2026-09.json DELETE /crm/objects/2026-09/communications/{communicationId} Mueve un objeto identificado por `{objectId}` a la papelera de reciclaje. Esta operación te permite archivar un objeto del CRM específico por su identificador único para eliminarlo del uso activo, pero manteniendo la opción de restaurarlo más tarde si es necesario. > **Supported products** > **Required Scopes** # Retrieve a communication Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/communications/get-communication specs/2026-09/crm-communications-v2026-09.json GET /crm/objects/2026-09/communications/{communicationId} Lee un objeto identificado por `objectId`. Este punto de conexión le permite recuperar los detalles de un objeto del CRM específico usando su ID o cualquier valor de propiedad único especificado por el parámetro de consulta `idProperty`. Puedes controlar los datos devueltos especificando las propiedades deseadas a través del parámetro de consulta `properties`. > **Supported products** > **Required Scopes** # Retrieve communications Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/communications/get-communications specs/2026-09/crm-communications-v2026-09.json GET /crm/objects/2026-09/communications Para leer una página de objetos de un tipo específico en tu cuenta de HubSpot, puedes controlar los datos que se devuelven especificando las propiedades, asociaciones y el estado de archivado a través de los parámetros de consulta. Este punto de conexión es útil para recuperar una lista de objetos del CRM con detalles específicos. > **Supported products** > **Required Scopes** # Communications API Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/communications/guide # Communication object definition Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/communications/object-definition # Search for messages Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/communications/search/search-communications specs/2026-09/crm-communications-v2026-09.json POST /crm/objects/2026-09/communications/search Busca objetos del CRM de un tipo específico usando los criterios de búsqueda proporcionados. Este punto de conexión permite filtrar y ordenar los resultados según varias propiedades y condiciones. Es útil para recuperar objetos específicos que coincidan con los parámetros de búsqueda. > **Supported products** > **Required Scopes** # Update a communication Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/communications/update-communication specs/2026-09/crm-communications-v2026-09.json PATCH /crm/objects/2026-09/communications/{communicationId} Haz una actualización parcial de un objeto identificado por `{objectId}`. Por defecto, `{objectId}` se refiere al ID de objeto interno, pero puedes especificar cualquier valor de propiedad único usando el parámetro de consulta `idProperty`. Los valores de propiedad proporcionados sobrescribirán los existentes, mientras que las propiedades de solo lectura y las inexistentes se ignorarán. Para borrar el valor de una propiedad, pasa una cadena vacía. > **Supported products** > **Required Scopes** # Create a batch of companies Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/companies/batch/create-companies specs/2026-09/crm-companies-v2026-09.json POST /crm/objects/2026-09/companies/batch/create Crea un lote de empresas. La matriz "entradas" puede contener un objeto "propiedades" para definir los valores de propiedades de cada empresa, junto con una matriz "asociaciones" que defina [asociaciones](https://developers.hubspot.com/docs/guides/api/crm/associations/associations-v4) con otros registros de CRM. > **Supported products** > **Required Scopes** # Retrieve a batch of companies Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/companies/batch/get-companies specs/2026-09/crm-companies-v2026-09.json POST /crm/objects/2026-09/companies/batch/read Obtén un lote de empresas por ID (`companyId`) o por una propiedad única (`idProperty`). Puedes especificar lo que se devuelve utilizando el parámetro de consulta `properties`. > **Supported products** > **Required Scopes** # Update a batch of companies Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/companies/batch/update-companies specs/2026-09/crm-companies-v2026-09.json POST /crm/objects/2026-09/companies/batch/update Actualizar un lote de empresas por ID > **Supported products** > **Required Scopes** # Create a company Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/companies/create-company specs/2026-09/crm-companies-v2026-09.json POST /crm/objects/2026-09/companies Crea una única empresa. Incluye un objeto "propiedades" para definir los [valores de propiedades] (https://developers.hubspot.com/docs/guides/api/crm/properties) de la empresa, junto con una matriz "asociaciones" que defina [asociaciones](https://developers.hubspot.com/docs/guides/api/crm/associations/associations-v4) con otros registros de CRM. > **Supported products** > **Required Scopes** # Archive a company Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/companies/delete-company specs/2026-09/crm-companies-v2026-09.json DELETE /crm/objects/2026-09/companies/{companyId} Elimina una empresa por ID. Las empresas eliminadas pueden restaurarse en un plazo de 90 días desde su eliminación. Más información sobre [restauración de registros](https://knowledge.hubspot.com/records/restore-deleted-records). > **Supported products** > **Required Scopes** # Retrieve companies Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/companies/get-companies specs/2026-09/crm-companies-v2026-09.json GET /crm/objects/2026-09/companies Recuperar todas las empresas, utilizando parámetros de consulta para controlar la información que se devuelve. > **Supported products** > **Required Scopes** # Retrieve a company Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/companies/get-company specs/2026-09/crm-companies-v2026-09.json GET /crm/objects/2026-09/companies/{companyId} Obtén una empresa por su ID (`companyid`) o por una propiedad única (`idProperty`). Puedes especificar lo que se devuelve utilizando el parámetro de consulta `properties`. > **Supported products** > **Required Scopes** # API de CRM | Empresas Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/companies/guide > **[Run in Postman](https://app.getpostman.com/run-collection/caf616003f52c955b5f6)** > **Requisitos de ámbito** # Empresas En HubSpot, los registros de empresa almacenan información sobre las organizaciones que interactúan con tu empresa. Los endpoints de las empresas te permiten crear y administrar registros de empresas, así como sincronizar los datos de los registros de empresas entre HubSpot y otros sistemas. Obtén más información sobre las API de los objetos, los registros, las propiedades y las asociaciones en la [guía informativa sobre el CRM](/docs/guides/crm/understanding-the-crm). Para obtener más información general sobre los objetos y registros de HubSpot, [consulta cómo administrar la base de datos del CRM](https://knowledge.hubspot.com/get-started/manage-your-crm-database). ## Crear empresas Para crear nuevas empresas, haz una solicitud `POST` a `/crm/v3/objects/companies`. En tu solicitud, incluye los datos del registro de la empresa en el objeto propiedades. También puedes agregar un objeto de asociaciones para asociar el nuevo registro de empresa con registros existentes (por ejemplo, con contactos o negocios) o con actividades (por ejemplo, con reuniones o notas). ### Propiedades Los detalles de empresas se almacenan en las propiedades de empresas. Hay propiedades de empresa de HubSpot [predeterminadas](https://knowledge.hubspot.com/properties/hubspot-crm-default-company-properties), pero también puedes [crear propiedades personalizadas](https://knowledge.hubspot.com/properties/create-and-edit-properties). Al crear un nuevo registro de empresa, debes incluir al menos una de las siguientes propiedades en tu solicitud: `name` o `domain`. Se recomienda incluir siempre `domain`, porque los nombres de dominio son el [identificador único principal](https://knowledge.hubspot.com/records/deduplication-of-records#automatic-deduplication-in-hubspot) para evitar la duplicación de registros de empresa en HubSpot. Si una empresa tiene [varios dominios](https://knowledge.hubspot.com/records/add-multiple-domain-names-to-a-company-record), puedes agregarlos a través de la API utilizando el campo `hs_additional_domains` y un punto y coma para separar cada dominio. Por ejemplo: `"hs_additional_domains" : "domain.com; domain2.com; domain3.com"`. Para ver todas las propiedades disponibles, puedes obtener una lista de las propiedades de las empresas de tu cuenta haciendo una solicitud `GET` a `/crm/v3/properties/companies`. Más información sobre la [API de propiedades](/docs/api-reference/crm-properties-v3/guide). > [!WARNING] > > ### Nota: > > Si has incluido `lifecyclestage` en la solicitud, los valores deben referirse al nombre interno de la etapa del ciclo de vida. Los nombres internos de las etapas predeterminadas son valores de texto y no cambian aunque edites la [etiqueta de la etapa ](https://knowledge.hubspot.com/properties/create-and-edit-properties#:~:text=the%20properties%20settings.-,Label/Name%3A,-enter%20a%20unique) (por ejemplo, `subscriber` o `marketingqualifiedlead`). Los nombres internos de las [etapas personalizadas](https://knowledge.hubspot.com/object-settings/create-and-customize-lifecycle-stages) son valores numéricos. Puedes encontrar el ID interno de una etapa en la [configuración de la etapa del ciclo de vida](https://knowledge.hubspot.com/object-settings/create-and-customize-lifecycle-stages#:~:text=To%20edit%20a%20lifecycle%20stage%2C%20hover%20over%20the%20stage%20and%20click%20Edit.%20In%20the%20right%20panel%2C%20edit%20the%20Stage%20name%2C%20then%20click%20Edit%20lifecycle%20stage%20to%20confirm.%20Click%20the%20code%20codcode%20icon%20to%20view%20the%20stage%27s%20internal%20ID%2C%20which%20is%20used%20by%20integrations%20and%20APIs.) u obteniendo la propiedad de la etapa del ciclo de vida a través de la API. Por ejemplo, para crear un nuevo registro de empresa, la solicitud puede ser similar a la siguiente: **JSON** ```json theme={null} ///Example request body { "properties": { "name": "HubSpot", "domain": "hubspot.com", "city": "Cambridge", "industry": "Technology", "phone": "555-555-555", "state": "Massachusetts", "lifecyclestage": "51439524" } } ``` ### Asociaciones Al crear un nuevo registro de empresa, también puedes asociarlo con [registros](https://knowledge.hubspot.com/records/associate-records) o [actividades](https://knowledge.hubspot.com/records/associate-activities-with-records) existentes en un objeto de asociaciones. Por ejemplo, para asociar un nuevo registro de empresa con un registro de contacto y correo electrónico existentes, tu solicitud se vería de la siguiente manera: **JSON** ```json theme={null} ///Example request body { "properties": { "name": "HubSpot", "domain": "hubspot.com", "city": "Cambridge", "industry": "Technology", "phone": "555-555-555", "state": "Massachusetts", "lifecyclestage": "51439524" }, "associations": [ { "to": { "id": 101 }, "types": [ { "associationCategory": "HUBSPOT_DEFINED", "associationTypeId": 280 } ] }, { "to": { "id": 556677 }, "types": [ { "associationCategory": "HUBSPOT_DEFINED", "associationTypeId": 185 } ] } ] } ``` Para el objeto asociaciones, debes incluir lo siguiente: | Parámetro | Descripción | | - | - | | `to` | El registro o la actividad que deseas asociar con el registro de empresa, especificado por su valor único de `id`. | | `types` | El tipo de asociación entre la empresa y el registro o la actividad. Incluye `associationCategory` y `associationTypeId`. Los ID de los tipos de asociación predeterminados se enumeran en [esta página](/docs/api-reference/crm-associations-v4/guide#association-type-id-values), o puedes obtener el valor de los tipos de asociación personalizados (es decir, etiquetas) a través de la [API de asociaciones](/docs/api-reference/crm-associations-v4/guide#retrieve-association-types). | ## Obtener registros de empresa Puedes obtener registros de empresa de forma individual o en lotes. * Para obtener un registro de empresa individual, haz una solicitud `GET` a `/crm/v3/objects/companies/{companyId}`. * Para solicitar una lista de todas las empresas, haz una solicitud `GET` a `/crm/v3/objects/companies`. En estos endpoints, puedes incluir los siguientes parámetros de consulta en la URL de la solicitud: | Parámetro | Descripción | | - | - | | `properties` | Una lista separada por comas de las propiedades que se devolverán en la respuesta. Si el registro de empresa solicitado no tiene un valor para una propiedad, no aparecerá en la respuesta. | | `propertiesWithHistory` | Una lista separada por comas de las propiedades actuales y anteriores que se devolverán en la respuesta. Si el registro de empresa solicitado no tiene un valor para una propiedad, no aparecerá en la respuesta. | | `associations` | Una lista separada por comas de los objetos de que obtener ID asociados. No se devolverán en la respuesta las asociaciones especificadas que no existan. Encuentra más información sobre la [API de asociaciones.](/docs/api-reference/crm-associations-v4/guide) | * Para obtener un lote de empresas específicas por el ID de registro o una [propiedad de identificador único personalizado](/docs/api-reference/crm-properties-v3/guide#create-unique-identifier-properties), haz una solicitud `POST` a `crm/v3/objects/companies/batch/read`. El endpoint en bloques no puede obtener asociaciones. Consulta cómo leer asociaciones por lotes con la [API de asociaciones](/docs/api-reference/crm-associations-v4/guide). Con el endpoint de lectura por lotes, también puedes utilizar el parámetro opcional `idProperty` para obtener empresas mediante una [propiedad de identificador único](/docs/api-reference/crm-properties-v3/guide#create-unique-identifier-properties) personalizada. De forma predeterminada, los valores `id` de la solicitud se refieren al ID de registro (`hs_object_id`), por lo que no se requiere el parámetro `idProperty` al obtener información por el ID de registro. Para utilizar una propiedad personalizada de valor único para obtener empresas, debes incluir el parámetro `idProperty`. Por ejemplo, para obtener un lote de empresas, la solicitud podría ser cualquiera de las siguientes: ```json theme={null} ///Example request body with record ID { "properties": ["name", "domain"], "inputs": [ { "id": "56789" }, { "id": "23456" } ] } ``` ```json theme={null} ///Example request body with a unique value property { "properties": ["name", "domain"], "idProperty": "uniquepropertyexample", "inputs": [ { "id": "abc" }, { "id": "def" } ] } ``` Para obtener empresas con los valores actuales y anteriores de una propiedad, la solicitud podría ser la siguiente: ```json theme={null} ///Example request body with record ID (current and historical values) { "propertiesWithHistory": ["name"], "inputs": [ { "id": "56789" }, { "id": "23456" } ] } ``` ## Actualizar empresas Puedes actualizar los registros de empresa individualmente o por lotes. Con los registros de empresas existentes, el ID de la empresa es un valor único que puedes usar para actualizar el registro de la empresa a través de la API. Para actualizar un registro de empresa individual por su ID de registro de empresa, haz una solicitud `PATCH` a `/crm/v3/objects/companies/{companyId}` e incluye los datos que quieras actualizar. > [!WARNING] > > ### Nota: > > Si actualizas la propiedad `lifecyclestage`, solo puedes elegir una etapa posterior en el orden de las etapas. Para retroceder la etapa del ciclo de vida a un valor anterior, primero deberás eliminar el valor actual de la etapa del ciclo de vida del registro. El valor se puede [borrar manualmente](https://knowledge.hubspot.com/records/update-a-property-value-for-a-record), o se puede eliminar automáticamente mediante un [workflow](https://knowledge.hubspot.com/records/change-record-lifecycle-stages-in-bulk) o una integración que sincronice los datos de los contactos. ### Asociar las empresas existentes con registros y actividades Para asociar un registro de empresa con otros registros del CRM o una actividad, haz una solicitud `PUT` a `/crm/v3/objects/companies/{companyId}/associations/{toObjectType}/{toObjectId}/{associationTypeId}`. > [!NOTE] > > Para obtener el valor `associationTypeId`, consulta [esta lista](/docs/api-reference/crm-associations-v4/guide#association-type-id-values) de valores predeterminados o haz una solicitud `GET` a `/crm/v4/associations/{fromObjectType}/{toObjectType}/labels`. Encuentra más información sobre cómo asociar registros a través de la [API de asociaciones](/docs/api-reference/crm-associations-v4/guide). ### Eliminar una asociación Para eliminar una asociación entre un registro de empresa y un registro o actividad, realiza una solicitud `DELETE` a la siguiente URL: `/crm/v3/objects/companies/{companyId}/associations/{toObjectType}/{toObjectId}/{associationTypeId}`. ## Fijar una actividad en un registro de empresa Puedes anclar una actividad en un registro de empresa a través de la API incluyendo el campo `hs_pinned_engagement_id` en la solicitud. En el campo, incluye el `id` de la actividad que quieras fijar, que se puede obtener con la [API de interacciones](/docs/api-reference/overview). Puedes fijar una actividad por registro, y esa actividad ya debe estar asociada con la empresa antes de fijarla. Para definir o actualizar la actividad fijada de una empresa, la solicitud podría ser la siguiente: ```json theme={null} ///Example request body PATCH /crm/v3/objects/companies/{companyId} { "properties": { "hs_pinned_engagement_id": 123456789 } } ``` También puedes crear una empresa, asociarla a una actividad existente y fijar la actividad en la misma solicitud. Por ejemplo: ```json theme={null} ///Example request body POST /crm/v3/objects/companies { "properties": { "domain": "example.com", "name": "Example Company", "hs_pinned_engagement_id": 123456789 }, "associations": [ { "to": { "id": 123456789 }, "types": [ { "associationCategory": "HUBSPOT_DEFINED", "associationTypeId": 189 } ] } ] } ``` ## Eliminar empresas Puedes eliminar registros de empresas individualmente o por lotes, lo que agregará el registro de empresa a la papelera de reciclaje en HubSpot. Más tarde puedes [restaurar ese registro en HubSpot](https://knowledge.hubspot.com/records/restore-deleted-records). Para eliminar una empresa individual por su ID, haz una solicitud `DELETE` a `/crm/v3/objects/companies/{companyId}`. Consulta más información sobre la eliminación por lotes de empresas en [esta documentación de referencia](/docs/api-reference/crm-companies-v3/guide). # Merge two companies Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/companies/merge-companies specs/2026-09/crm-companies-v2026-09.json POST /crm/objects/2026-09/companies/merge Combina dos registros de empresa. Más información sobre [combinar registros](https://knowledge.hubspot.com/records/merge-records). > **Supported products** > **Required Scopes** # Company object definition Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/companies/object-definition # Update a company Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/companies/update-company specs/2026-09/crm-companies-v2026-09.json PATCH /crm/objects/2026-09/companies/{companyId} Actualiza una empresa por ID (`companyId`) o un valor de propiedad único (`idProperty`). Se sobrescribirán los valores de propiedad especificados. Las propiedades de solo lectura y las no existentes generarán un error. Los valores de las propiedades pueden borrarse pasando una cadena vacía. > **Supported products** > **Required Scopes** # Archive a batch of companies Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/companies/batch/delete-companies specs/2026-09/crm-companies-v2026-09.json POST /crm/objects/2026-09/companies/batch/archive Elimina un lote de empresas por ID. Las empresas eliminadas pueden restaurarse en un plazo de 90 días desde su eliminación. Más información sobre [restauración de registros](https://knowledge.hubspot.com/records/restore-deleted-records). > **Supported products** > **Required Scopes** # Create or update a batch of companies by unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/companies/batch/upsert-companies specs/2026-09/crm-companies-v2026-09.json POST /crm/objects/2026-09/companies/batch/upsert Crea o actualiza empresas identificadas por un valor único de propiedad según lo especificado por el parámetro de consulta "idProperty". El parámetro de consulta "idProperty" se refiere a una propiedad cuyos valores son únicos para el objeto. > **Supported products** > **Required Scopes** # Search for companies Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/companies/search/search-companies specs/2026-09/crm-companies-v2026-09.json POST /crm/objects/2026-09/companies/search Busca empresas filtrando por propiedades, buscando a través de asociaciones y ordenando los resultados. Más información sobre [búsqueda de CRM](https://developers.hubspot.com/docs/guides/api/crm/search#make-a-search-request). > **Supported products** > **Required Scopes** # Create contacts Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/contacts/batch/create-contacts specs/2026-09/crm-contacts-v2026-09.json POST /crm/objects/2026-09/contacts/batch/create Crea un lote de contactos. La matriz "entradas" puede contener un objeto "propiedades" para definir los valores de propiedades de cada registro, junto con una matriz "asociaciones" que defina [asociaciones](https://developers.hubspot.com/docs/guides/api/crm/associations/associations-v4) con otros registros de CRM. > **Supported products** > **Required Scopes** # Delete contacts Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/contacts/batch/delete-contacts specs/2026-09/crm-contacts-v2026-09.json POST /crm/objects/2026-09/contacts/batch/archive Archiva un lote de contactos por ID. Los contactos archivados pueden restaurarse en un plazo de 90 días desde su eliminación. Más información sobre los [datos afectados por la eliminación de contactos](https://knowledge.hubspot.com/privacy-and-consent/understand-restorable-and-permanent-contact-deletions) y cómo [restaurar registros archivados](https://knowledge.hubspot.com/records/restore-deleted-records). > **Supported products** > **Required Scopes** # Retrieve contacts Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/contacts/batch/get-contacts specs/2026-09/crm-contacts-v2026-09.json POST /crm/objects/2026-09/contacts/batch/read Obtén un lote de contactos por ID (`objectId`) o valor único de propiedad (`idProperty`). > **Supported products** > **Required Scopes** # Update contacts Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/contacts/batch/update-contacts specs/2026-09/crm-contacts-v2026-09.json POST /crm/objects/2026-09/contacts/batch/update Actualiza un lote de contactos por ID (`contactId`) o un valor de propiedad único (`idProperty`). Se sobrescribirán los valores de propiedad especificados. Las propiedades de solo lectura y las no existentes generarán un error. Los valores de las propiedades pueden borrarse pasando una cadena vacía. > **Supported products** > **Required Scopes** # Upsert contacts Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/contacts/batch/upsert-contacts specs/2026-09/crm-contacts-v2026-09.json POST /crm/objects/2026-09/contacts/batch/upsert Insertar y actualizar un lote de contactos. La matriz de "entradas" puede contener un objeto de "propiedades" para definir los valores de las propieddaes de cada registro. > **Supported products** > **Required Scopes** # Create a contact Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/contacts/create-contact specs/2026-09/crm-contacts-v2026-09.json POST /crm/objects/2026-09/contacts Crea un único contacto. Incluye un objeto "propiedades" para definir los [valores de propiedades] (https://developers.hubspot.com/docs/guides/api/crm/properties) del contacto, junto con una matriz "asociaciones" que defina [asociaciones](https://developers.hubspot.com/docs/guides/api/crm/associations/associations-v4) con otros registros de CRM. > **Supported products** > **Required Scopes** # Delete a contact Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/contacts/delete-contact specs/2026-09/crm-contacts-v2026-09.json DELETE /crm/objects/2026-09/contacts/{contactId} Eliminar un lote de contactos por ID. Los contactos eliminados pueden restaurarse en un plazo de 90 días desde su eliminación. Más información sobre los [datos afectados por la eliminación de contactos](https://knowledge.hubspot.com/privacy-and-consent/understand-restorable-and-permanent-contact-deletions) y cómo [restaurar registros archivados](https://knowledge.hubspot.com/records/restore-deleted-records). > **Supported products** > **Required Scopes** # Retrieve a contact Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/contacts/get-contact specs/2026-09/crm-contacts-v2026-09.json GET /crm/objects/2026-09/contacts/{contactId} Obtén un contacto por su ID (`contactId`) o por una propiedad única (`idProperty`). Puedes especificar lo que se devuelve utilizando el parámetro de consulta `properties`. > **Supported products** > **Required Scopes** # Retrieve contacts Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/contacts/get-contacts specs/2026-09/crm-contacts-v2026-09.json GET /crm/objects/2026-09/contacts Recuperar todos los contactos, utilizando parámetros de consulta para especificar la información que se devuelve. > **Supported products** > **Required Scopes** # API del CRM | Contactos Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/contacts/guide > **[Run in Postman](https://app.getpostman.com/run-collection/dd75d149eaa15806754f)** > **Requisitos de ámbito** # Contactos En HubSpot, los registros de contacto almacenan información sobre las personas que interactúan con tu empresa. Los endpoints de los contactos te permiten crear y administrar contactos, así como sincronizar los datos de los contactos entre HubSpot y otros sistemas. Obtén más información sobre las API de objetos, registros, propiedades y asociaciones en la [guía informativa sobre el CRM](/docs/guides/crm/understanding-the-crm). También, para obtener más información general sobre objetos y registros de HubSpot, consulta cómo [Administrar la base de datos del CRM](http://knowledge.hubspot.com/contacts-user-guide). ## Crear contactos Para crear nuevos contactos, haz una solicitud `POST` a `/crm/v3/objects/contacts`. En tu solicitud, incluye los datos del contacto en el objeto propiedades. También puedes agregar un objeto asociaciones para asociar el nuevo registro de contacto con los registros existentes (por ejemplo, empresas o negocios) o actividades (por ejemplo, reuniones o notas). ### Propiedades Los detalles del contacto se almacenan en las propiedades de contactos. Hay [propiedades de contacto predeterminadas de HubSpot](https://knowledge.hubspot.com/es/properties/hubspots-default-contact-properties), pero también puedes [crear propiedades personalizadas](https://knowledge.hubspot.com/es/properties/create-and-edit-properties). Al crear un nuevo contacto, debes incluir al menos una de las siguientes propiedades en tu solicitud: `email`, `firstname` o `lastname`. Se recomienda siempre incluir `email`, ya que la dirección de correo electrónico es el [identificador único principal](https://knowledge.hubspot.com/es/records/deduplication-of-records#automatic-deduplication-in-hubspot) para evitar la duplicación de registros de contactos en HubSpot. Para ver todas las propiedades disponibles, puedes obtener una lista de las propiedades de contacto de tu cuenta haciendo una solicitud `GET` a `/crm/v3/properties/contacts`. Encuentra más información sobre la [API de propiedades](/docs/api-reference/crm-properties-v3/guide). > [!WARNING] > > ### Nota: > > Si has incluido `lifecyclestage` en la solicitud, los valores deben referirse al nombre interno de la etapa del ciclo de vida. Los nombres internos de las etapas predeterminadas son valores de texto y no cambian aunque edites la [etiqueta](https://knowledge.hubspot.com/es/properties/create-and-edit-properties) de la etapa (por ejemplo, `subscriber` o `marketingqualifiedlead`). Los nombres internos de las [etapas personalizadas](https://knowledge.hubspot.com/es/object-settings/create-and-customize-lifecycle-stages) son valores numéricos. Puedes encontrar el ID interno de una etapa en la [configuración de la etapa del ciclo de vida](https://knowledge.hubspot.com/es/object-settings/create-and-customize-lifecycle-stages) u obteniendo la propiedad de la etapa del ciclo de vida a través de la API. Por ejemplo, para crear un nuevo contacto, la solicitud puede ser similar a la siguiente: **JSON** ```json theme={null} ///Example request body { "properties": { "email": "example@hubspot.com", "firstname": "Jane", "lastname": "Doe", "phone": "+18884827768", "company": "HubSpot", "website": "hubspot.com", "lifecyclestage": "marketingqualifiedlead" } } ``` ### Asociaciones Al crear un nuevo contacto, también puedes asociarlo con [registros](https://knowledge.hubspot.com/es/records/associate-records) o [actividades existentes](https://knowledge.hubspot.com/es/records/associate-activities-with-records) en un objeto de asociaciones. Por ejemplo, para asociar un nuevo contacto con una empresa y correo electrónico existentes, tu solicitud se vería de la siguiente manera: **JSON** ```json theme={null} ///Example request body { "properties": { "email": "example@hubspot.com", "firstname": "Jane", "lastname": "Doe", "phone": "+18884827768", "company": "HubSpot", "website": "hubspot.com", "lifecyclestage": "marketingqualifiedlead" }, "associations": [ { "to": { "id": 123456 }, "types": [ { "associationCategory": "HUBSPOT_DEFINED", "associationTypeId": 279 } ] }, { "to": { "id": 556677 }, "types": [ { "associationCategory": "HUBSPOT_DEFINED", "associationTypeId": 197 } ] } ] } ``` En el objeto asociaciones, debes incluir lo siguiente: | Parámetro | Descripción | | - | - | | `to` | El registro o actividad que quieres asociar con el contacto, especificado por su valor `id` único. | | `types` | El tipo de asociación entre el contacto y el registro o actividad. Incluye `associationCategory`y `associationTypeId`. Los ID de los tipos de asociación predeterminados se enumeran en [este recurso](/docs/api-reference/crm-associations-v4/guide#association-type-id-values), y también puedes obtener el valor de los tipos de asociación personalizados (es decir, etiquetas) a través de la [API de asociaciones](/docs/api-reference/crm-associations-v4/guide#retrieve-association-types). | ## Buscar contactos por el ID de registro, correo electrónico o propiedad de valor único personalizada Puedes buscar contactos individualmente o en lotes. * Para buscar un contacto individual, haz una solicitud `GET` a `/crm/v3/objects/contacts/{contactId} or` `/crm/v3/objects/contacts/{email}?idProperty=email`. * Para obtener una lista de todos los contactos, haz una solicitud `GET` a `/crm/v3/objects/contacts`. En estos endpoints, puedes incluir los siguientes parámetros de consulta en la URL de la solicitud: | Parámetro | Descripción | | - | - | | `properties` | Una lista separada con comas de las propiedades que se devolverán en la respuesta. Si el registro de contacto solicitado no tiene un valor para una propiedad, este no aparecerá en la respuesta. | | `propertiesWithHistory` | Una lista separada con comas de las propiedades actuales y anteriores que se devolverán en la respuesta. Si el registro de contacto solicitado no tiene un valor para una propiedad, este no aparecerá en la respuesta. | | `associations` | Una lista separada con comas de los objetos para los que se deben obtener los ID asociados. No se devolverán en la respuesta las asociaciones especificadas que no existan. Encuentra más información sobre la [API de asociaciones.](/docs/api-reference/crm-associations-v4/guide) | * Para obtener un lote de contactos específicos por el ID de registro, dirección de correo electrónico o una [propiedad de identificador único personalizado](/docs/api-reference/crm-properties-v3/guide#create-unique-identifier-properties), haz una solicitud `POST` a `crm/v3/objects/contacts/batch/read`. El endpoint por lotes no puede obtener asociaciones. Encuentra más información sobre cómo leer asociaciones por lotes con la [API de asociaciones](/docs/api-reference/crm-associations-v4/guide). Para el endpoint de lectura por lotes, también puedes utilizar el parámetro opcional `idProperty` para buscar contactos por `email` o por una [propiedad de identificador único](/docs/api-reference/crm-properties-v3/guide#create-unique-identifier-properties) personalizado. De forma predeterminada, los valores `id` de la solicitud se refieren al ID del registro (`hs_object_id`), por lo que no se requiere el parámetro `idProperty` al buscar por el ID del registro. Si estás utilizando `email` o una propiedad de valor único personalizado para buscar contactos, debes incluir el parámetro `idProperty`. Por ejemplo, para buscar un lote de contactos en función de los valores de ID del registro, tu solicitud podría verse así (solo valores actuales o valores actuales y antiguos): ```json theme={null} { "properties": ["email", "lifecyclestage", "jobtitle"], "inputs": [ { "id": "1234567" }, { "id": "987456" } ] } ``` ```json theme={null} { "propertiesWithHistory": ["lifecyclestage", "hs_lead_status"], "inputs": [ { "id": "1234567" }, { "id": "987456" } ] } ``` Para buscar contactos en función del correo electrónico o una propiedad de identificador único personalizado (por ejemplo, un número de identificación de cliente único para tu empresa), tu solicitud sería la siguiente: ```json theme={null} { "properties": ["email", "lifecyclestage", "jobtitle"], "idProperty": "email", "inputs": [ { "id": "lgilmore@thedragonfly.com" }, { "id": "sstjames@thedragonfly.com" } ] } ``` ```json theme={null} { "properties": ["email", "lifecyclestage", "jobtitle"], "idProperty": "internalcustomerid", "inputs": [ { "id": "12345" }, { "id": "67891" } ] } ``` ## Actualizar registros de contacto Puedes actualizar registros de contacto individualmente o en lotes. Para actualizar registros de contactos individualmente, puedes usar el ID del registro (`id`) o la dirección de correo electrónico del contacto (`email`). * Para actualizar un solo contacto por su ID de registro, haz una solicitud `PATCH` a `/crm/v3/objects/contacts/{contactId}` e incluye los datos que quieres actualizar. * Para actualizar un solo contacto por su ID de registro, haz una solicitud `PATCH` a `/crm/v3/objects/contacts/{email}?idProperty=email` e incluye los datos que quieres actualizar. Por ejemplo: ```json theme={null} { "properties": { "favorite_food": "burger", "jobtitle": "Manager", "lifecyclestage": "Customer" } } ``` > [!WARNING] > > ### Nota: > > Si actualizas la propiedad `lifecyclestage`, solo puedes elegir una etapa posterior en el orden de las etapas. Para retroceder la etapa del ciclo de vida a un valor anterior, primero deberás eliminar el valor actual de la etapa del ciclo de vida del registro. El valor se puede [borrar manualmente](https://knowledge.hubspot.com/es/records/update-a-property-value-for-a-record), o se puede eliminar automáticamente mediante un [workflow](https://knowledge.hubspot.com/es/records/change-record-lifecycle-stages-in-bulk) o una integración que sincronice los datos de los contactos. Para actualizar los contactos por lotes, puedes utilizar los valores de ID de registro de los contactos (`id`). Para actualizar varios registros de contactos, haz una solicitud `POST` a `/crm/v3/objects/contacts/batch/update` En el cuerpo de la solicitud, incluye el ID de registro de cada contacto como el `id` e incluye las propiedades que quieres actualizar. Por ejemplo: ```json theme={null} { "inputs": [ { "id": "123456789", "properties": { "favorite_food": "burger" } }, { "id": "56789123", "properties": { "favorite_food": "Donut" } } ] } ``` ## Actualizar y crear registros de contacto También puedes crear y actualizar contactos por lotes al mismo tiempo utilizando el endpoint upsert. Para este endpoint, puedes utilizar `email` o una [propiedad de identificador único personalizado](/docs/api-reference/crm-properties-v3/guide#create-unique-identifier-properties). Tras la solicitud, si los contactos ya existen, se actualizarán y si no existen, se crearán. Para crear y actualizar contactos, envía una solicitud `POST` a `/crm/v3/objects/contacts/batch/upsert`. En el cuerpo de la solicitud, incluye el parámetro `idProperty` para identificar si estás utilizando `email` o una propiedad de identificador único personalizado. Incluye el valor de esa propiedad como `id` y añade las demás propiedades que quieres establecer o actualizar. > [!WARNING] > > ### Nota: > > Los upsert parciales no son compatibles cuando se utiliza `email` como `idProperty` para los contactos. Para completar un upsert parcial, utiliza en su lugar una propiedad de identificador único personalizado como `idProperty`. Por ejemplo, tu solicitud podría tener el siguiente aspecto: ```json theme={null} { "inputs": [ { "properties": { "phone": "+18884827768" }, "id": "test@test.com", "idProperty": "email" }, { "properties": { "phone": "+18888888888" }, "id": "example@hubspot.com", "idProperty": "email" } ] } ``` ## Asociar contactos existentes con registros o actividades Para asociar contactos con otros registros del CRM o con una actividad, haz una solicitud `PUT` a `/crm/v3/objects/contacts/{contactId}/associations/{toObjectType}/{toObjectId}/{associationTypeId}`. > [!NOTE] > > Para obtener el valor `associationTypeId`, consulta [esta lista](/docs/api-reference/crm-associations-v4/guide#association-type-id-values) de valores predeterminados o haz una solicitud `GET` a `/crm/v4/associations/{fromObjectType}/{toObjectType}/labels`. Encuentra más información sobre la [API de asociaciones.](/docs/api-reference/crm-associations-v4/guide) ### Eliminar una asociación Para eliminar una asociación entre un contacto y un registro o actividad, haz una solicitud `DELETE` a la siguiente URL: `/crm/v3/objects/contacts/{contactID}/associations/{toObjectType}/{toObjectId}/{associationTypeId}`. ## Anclar una actividad en el registro de un contacto Puedes [anclar una actividad](https://knowledge.hubspot.com/es/records/pin-an-activity-on-a-record) en un registro de contacto a través de la API incluyendo el campo `hs_pinned_engagement_id` en tu solicitud. En el campo, incluye el `id` de la actividad que quieres anclar, que se puede obtener a través de las [API de interacciones](/docs/api-reference/overview). Puedes anclar una actividad por registro, y la actividad ya debe estar asociada con el contacto antes de anclarla. Para establecer o actualizar la actividad anclada de un contacto, la solicitud podría hacerse de la siguiente manera: ```json theme={null} { "properties": { "hs_pinned_engagement_id": 123456789 } } ``` También puedes crear un contacto, asociarlo a una actividad existente y anclar la actividad en la misma solicitud. Por ejemplo: ```json theme={null} { "properties": { "email": "example@hubspot.com", "firstname": "Jane", "lastname": "Doe", "phone": "+18884827768", "hs_pinned_engagement_id": 123456789 }, "associations": [ { "to": { "id": 123456789 }, "types": [ { "associationCategory": "HUBSPOT_DEFINED", "associationTypeId": 201 } ] } ] } ``` ## Eliminar contactos Puedes eliminar contactos individualmente o por lotes, lo que agregará el contacto a la papelera de reciclaje en HubSpot. Más adelante puedes [restaurar el registro de contacto dentro de HubSpot](https://knowledge.hubspot.com/es/records/restore-deleted-records). Para eliminar un solo contacto usando su ID, haz una solicitud `DELETE` a `/crm/v3/objects/contacts/{contactId}`. Consulta más información sobre la eliminación por lotes de contactos en [esta documentación de referencia](/docs/api-reference/crm-contacts-v3/guide). ## Correos adicionales Las direcciones de correo electrónico secundarias se utilizan cuando un contacto tiene más de un correo electrónico. Se pueden añadir [manualmente en un registro de contacto en HubSpot](https://knowledge.hubspot.com/es/records/add-multiple-email-addresses-to-a-contact) o se pueden añadir automáticamente tras una [combinación de contactos](https://knowledge.hubspot.com/es/records/merge-records#contact-merge-exceptions). Los correos electrónicos adicionales siguen siendo identificadores únicos para los contactos, por lo que varios contactos no pueden tener la misma dirección de correo electrónico adicional. Para ver los correos electrónicos adicionales de los contactos, incluye el parámetro `properties` con las propiedades `email` y `hs_additional_emails`. La dirección de correo electrónico principal de un contacto se mostrará en el campo `email` y los correos electrónicos adicionales se mostrarán en el campo `hs_additional_emails`. ## Límites Las operaciones por lotes están limitadas a 100 registros a la vez. Por ejemplo, no puedes actualizar por lotes más de 100 registros de contactos en una solicitud. También hay límites para [contactos y envíos de formularios](https://developers.hubspot.es/docs#limits_contacts). # Merge two contacts Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/contacts/merge-contacts specs/2026-09/crm-contacts-v2026-09.json POST /crm/objects/2026-09/contacts/merge Combina dos registros de contacto. Más información sobre [combinar registros](https://knowledge.hubspot.com/records/merge-records). > **Supported products** > **Required Scopes** # Contact object definition Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/contacts/object-definition # Search for contacts Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/contacts/search/search-contacts specs/2026-09/crm-contacts-v2026-09.json POST /crm/objects/2026-09/contacts/search Busca contactos filtrando por propiedades, buscando a través de asociaciones y ordenando los resultados. Más información sobre [búsqueda de CRM](https://developers.hubspot.com/docs/guides/api/crm/search#make-a-search-request). > **Supported products** > **Required Scopes** # Update a contact Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/contacts/update-contact specs/2026-09/crm-contacts-v2026-09.json PATCH /crm/objects/2026-09/contacts/{contactId} Actualizar un contacto existente, identificado por ID o correo electrónico/valor de propiedad único. Para identificar un contacto por su ID, incluye el ID en la ruta URL de la solicitud. Para identificar un contacto por su correo electrónico u otra propiedad única, incluye el valor de correo electrónico/propiedad en la ruta URL de la solicitud y agrega el parámetro de consulta `idProperty` (`/crm/v3/objects/contacts/jon@website.com?idProperty=email`). Se sobrescribirán los valores de propiedad especificados. Las propiedades de solo lectura y las no existentes generarán un error. Los valores de las propiedades pueden borrarse pasando una cadena vacía. > **Supported products** > **Required Scopes** # Batch retrieve contracts Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/contracts/batch/get-contracts specs/2026-09/crm-contracts-v2026-09.json POST /crm/objects/2026-09/contracts/batch/read Recupera registros por ID de registro o incluye el parámetro `idProperty` para recuperar registros por propiedad de valor único personalizada. > **Required Scopes** # Retrieve contract Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/contracts/get-contract specs/2026-09/crm-contracts-v2026-09.json GET /crm/objects/2026-09/contracts/{contractId} Lee un objeto identificado por `{contractId}`. `{contractId}` se refiere al ID de objeto interno por opción predeterminada o, de manera opcional, a cualquier valor de propiedad único especificado por el parámetro de consulta `idProperty`. Controla lo que se devuelve mediante el parámetro de consulta `properties`. > **Required Scopes** # List Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/contracts/get-contracts specs/2026-09/crm-contracts-v2026-09.json GET /crm/objects/2026-09/contracts Lee una página de contratos. Controla lo que se devuelve a través del parámetro de consulta `properties`. > **Required Scopes** # Contracts API Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/contracts/guide # Create a batch of courses Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/courses/batch/create-courses specs/2026-09/crm-courses-v2026-09.json POST /crm/objects/2026-09/0-410/batch/create Crea un lote de objetos del CRM de un tipo específico en HubSpot. Este punto de conexión permite la creación de varios objetos en una sola solicitud, lo que lo hace eficiente para operaciones masivas. La respuesta incluye una copia de cada objeto creado, incluidos sus ID. Esto es útil para inicializar grandes conjuntos de datos o integrar fuentes de datos externas con HubSpot. > **Supported products** > **Required Scopes** # Delete courses Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/courses/batch/delete-courses specs/2026-09/crm-courses-v2026-09.json POST /crm/objects/2026-09/0-410/batch/archive Archiva un lote de objetos del CRM identificados por sus ID. Esta operación es útil para gestionar grandes conjuntos de objetos que necesitan archivarse simultáneamente, lo que agiliza los procesos de gestión de datos. > **Supported products** > **Required Scopes** # Retrieve courses Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/courses/batch/get-courses specs/2026-09/crm-courses-v2026-09.json POST /crm/objects/2026-09/0-410/batch/read Obtén un lote de objetos del CRM por sus ID internos o valores de propiedades únicos. Este punto de conexión es útil para obtener varios objetos en una sola solicitud, lo que permite una obtención eficiente de los datos. Se puede especificar si se quieren incluir objetos archivados en los resultados. > **Supported products** > **Required Scopes** # Update courses Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/courses/batch/update-courses specs/2026-09/crm-courses-v2026-09.json POST /crm/objects/2026-09/0-410/batch/update Actualiza un lote de objetos del CRM en tu cuenta de HubSpot. Este punto de conexión te permite modificar varios objetos a la vez al proporcionar sus detalles en el cuerpo de la solicitud. Es útil para actualizar de forma eficiente grandes conjuntos de datos, lo que garantiza que todos los objetos especificados se actualicen en una sola operación. > **Supported products** > **Required Scopes** # Upsert courses Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/courses/batch/upsert-courses specs/2026-09/crm-courses-v2026-09.json POST /crm/objects/2026-09/0-410/batch/upsert Crea o actualiza un lote de objetos del CRM por valores de propiedades únicos. Este punto de conexión te permite gestionar eficientemente múltiples objetos en una única solicitud para garantizar que actualices los objetos existentes y crees otros nuevos según sea necesario. > **Supported products** > **Required Scopes** # Create a course Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/courses/create-course specs/2026-09/crm-courses-v2026-09.json POST /crm/objects/2026-09/0-410 Crea un objeto del CRM con las propiedades especificadas y recibe una copia del objeto, incluyendo su ID. Este punto de conexión es útil para agregar nuevos objetos al sistema del CRM y personalizarlos con propiedades específicas. > **Supported products** > **Required Scopes** # Delete a course Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/courses/delete-course specs/2026-09/crm-courses-v2026-09.json DELETE /crm/objects/2026-09/0-410/{courseId} Mueve un objeto identificado por `{objectId}` a la papelera de reciclaje. Esta operación te permite archivar un objeto específico del CRM por su identificador único para eliminarlo de su uso activo, pero conservándolo en el sistema para una posible recuperación o referencia. > **Supported products** > **Required Scopes** # Retrieve a course Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/courses/get-course specs/2026-09/crm-courses-v2026-09.json GET /crm/objects/2026-09/0-410/{courseId} Lee un objeto identificado por `objectId`. Por defecto, `objectId` se refiere al ID de objeto interno, pero también puede referirse a cualquier valor de propiedad único especificado por el parámetro de consulta `idProperty`. Puedes controlar el contenido de la respuesta usando el parámetro de consulta `properties` para especificar qué propiedades incluir. > **Supported products** > **Required Scopes** # Retrieve courses Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/courses/get-courses specs/2026-09/crm-courses-v2026-09.json GET /crm/objects/2026-09/0-410 Lee una página de objetos del CRM de un tipo específico. Se pueden controlar los datos que se devuelven especificando qué propiedades incluir en la respuesta. Este punto de conexión admite la paginación y permite recuperar ID de objetos asociados y registros archivados. > **Supported products** > **Required Scopes** # Courses API Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/courses/guide # Merge two courses Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/courses/merge/merge-courses specs/2026-09/crm-courses-v2026-09.json POST /crm/objects/2026-09/courses/merge Fusiona dos objetos del CRM del mismo tipo en tu cuenta de HubSpot. Esta operación combina las propiedades de los objetos especificados, lo que da como resultado un solo objeto con datos fusionados. Usa este punto de conexión para consolidar registros duplicados o unificar datos relacionados en un solo objeto. > **Supported products** > **Required Scopes** # Course object definition Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/courses/object-definition # Search for objects Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/courses/search/search-courses specs/2026-09/crm-courses-v2026-09.json POST /crm/objects/2026-09/0-410/search Busca objetos del CRM de un tipo específico usando varios criterios. Este punto de conexión te permite filtrar y ordenar objetos según sus propiedades, lo que facilita la recuperación eficiente de datos relevantes. Es útil para encontrar registros específicos o analizar tendencias de datos dentro de tu CRM. > **Supported products** > **Required Scopes** # Update a course Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/courses/update-course specs/2026-09/crm-courses-v2026-09.json PATCH /crm/objects/2026-09/0-410/{courseId} Realiza una actualización parcial de un objeto identificado por `{objectId}`. Por defecto, `{objectId}` se refiere al ID de objeto interno, pero también puede referirse a cualquier valor de propiedad único especificado por el parámetro de consulta `idProperty`. Los valores de propiedad proporcionados sobrescribirán los existentes. Las propiedades de solo lectura y las inexistentes se ignorarán. Para borrar el valor de una propiedad, pasa una cadena vacía. > **Supported products** > **Required Scopes** # Create a batch of objects Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/custom-objects/batch/create-custom-objects specs/2026-09/crm-custom-objects-v2026-09.json POST /crm/objects/2026-09/{objectType}/batch/create Crea un lote de objetos del CRM para un tipo de objeto específico en HubSpot. Este punto de conexión te permite crear varios objetos en una sola solicitud, lo que lo hace eficiente para operaciones en bloque. La respuesta incluye los objetos creados junto con sus ID. Esto es útil para inicializar grandes conjuntos de datos o migrar datos a HubSpot. > **Supported products** > **Required Scopes** # Archive a batch of objects by ID Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/custom-objects/batch/delete-custom-objects specs/2026-09/crm-custom-objects-v2026-09.json POST /crm/objects/2026-09/{objectType}/batch/archive Archivar un lote de objetos de CRM identificados por sus ID. Esta operación es útil para mover varios objetos a la papelera de reciclaje en una sola solicitud, lo que agiliza el proceso de gestionar grandes conjuntos de datos. > **Supported products** > **Required Scopes** # Read a batch of objects by internal ID, or unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/custom-objects/batch/get-custom-objects specs/2026-09/crm-custom-objects-v2026-09.json POST /crm/objects/2026-09/{objectType}/batch/read Recupera un lote de objetos de CRM por sus ID internos o valores de propiedad únicos. Este punto de terminación es útil para obtener varios objetos en una sola solicitud, lo que puede ayudar a optimizar el rendimiento y reducir la cantidad de llamadas a la API necesarias. Se puede especificar si se desea incluir objetos archivados en la respuesta. > **Supported products** > **Required Scopes** # Update a batch of objects by internal ID, or unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/custom-objects/batch/update-custom-objects specs/2026-09/crm-custom-objects-v2026-09.json POST /crm/objects/2026-09/{objectType}/batch/update Actualiza un lote de objetos de CRM en tu cuenta de HubSpot. Este punto de terminación te permite modificar varios objetos a la vez al proporcionar sus detalles en el cuerpo de la solicitud. Es útil para hacer actualizaciones masivas de propiedades de objetos de manera eficiente. > **Supported products** > **Required Scopes** # Create or update a batch of objects by unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/custom-objects/batch/upsert-custom-objects specs/2026-09/crm-custom-objects-v2026-09.json POST /crm/objects/2026-09/{objectType}/batch/upsert Crea o actualiza un lote de objetos de CRM por valores de propiedades únicas. Este punto de terminación te permite manejar de forma eficiente grandes conjuntos de datos, ya sea creando nuevos objetos o actualizando los existentes basándose en identificadores únicos. Es especialmente útil para sincronizar datos entre sistemas o para asegurar que tus datos de CRM estén actualizados. > **Supported products** > **Required Scopes** # Create Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/custom-objects/create-custom-object specs/2026-09/crm-custom-objects-v2026-09.json POST /crm/objects/2026-09/{objectType} Crea un objeto del CRM con las propiedades especificadas y devuelve una copia del objeto, incluyendo su ID. Este punto de terminación permite crear objetos estándar en tu sistema del CRM, proporcionando documentación y ejemplos para guiarte. > **Supported products** > **Required Scopes** # Archive Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/custom-objects/delete-custom-object specs/2026-09/crm-custom-objects-v2026-09.json DELETE /crm/objects/2026-09/{objectType}/{objectId} Mueve un objeto identificado por `{objectId}` a la papelera de reciclaje. Esta operación archiva el objeto especificado, lo que lo deja inactivo, pero no lo elimina permanentemente del sistema. > **Supported products** > **Required Scopes** # Read Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/custom-objects/get-custom-object specs/2026-09/crm-custom-objects-v2026-09.json GET /crm/objects/2026-09/{objectType}/{objectId} Lee un objeto identificado por `objectId`. El `objectId` se refiere al ID de objeto interno como opción predeterminadfa, o, de forma opcional, a cualquier valor de propiedad único, según lo especificado por el parámetro de consulta `idProperty`. Puedes controlar lo que se devuelve a través del parámetro de consulta `properties`. Este punto de terminación es útil para recuperar objetos específicos y sus detalles de tu cuenta de HubSpot. > **Supported products** > **Required Scopes** # List Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/custom-objects/get-custom-objects specs/2026-09/crm-custom-objects-v2026-09.json GET /crm/objects/2026-09/{objectType} Lee una página de objetos de un tipo específico en tu cuenta de HubSpot. Puedes controlar los datos que se devuelven especificando propiedades, asociaciones y si quieres incluir registros archivados. Este punto de terminación es útil para obtener una lista de objetos del CRM con detalles y asociaciones específicos. > **Supported products** > **Required Scopes** # CRM | Objetos personalizados Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/custom-objects/guide > **Productos compatibles** > **Ámbitos Requeridos** > **[Run in Postman](https://app.getpostman.com/run-collection/40a2452fc88665fbe786)** Cada cuenta de HubSpot, tiene los objetos estándar del CRM: contactos, empresas, negocios y tickets. Para representar y organizar los datos del CRM en función de las necesidades de tu empresa, también puedes crear objetos personalizados. Puedes [crear un objeto personalizado](https://knowledge.hubspot.com/es/object-settings/create-custom-objects) en HubSpot o usar la API de objetos personalizados para definir objetos personalizados, propiedades y asociaciones a otros objetos del CRM. A continuación, aprende a crear y administrar objetos personalizados a través de la API, y ve un [tutorial de cómo crear un objeto personalizado de ejemplo](#custom-object-example). Para obtener más información sobre la creación de objetos personalizados, consulta las siguientes publicaciones en el blog para desarrolladores de HubSpot: * [Cómo crear objetos personalizados ampliables](https://developers.hubspot.com/blog/how-to-think-like-an-architect-by-building-scalable-custom-objects) * [Cómo crear objetos personalizados usando aplicaciones privadas](https://developers.hubspot.com/blog/how-to-build-a-custom-object-using-private-apps) > [!WARNING] > > ### Nota: > > Los objetos personalizados son específicos de cada cuenta y, dependiendo de tu suscripción, hay límites en el número de objetos personalizados que puedes crear. En el [Catálogo de productos y servicios de HubSpot](https://legal.hubspot.com/hubspot-product-and-services-catalog) encontrarás más información sobre los límites. ## Métodos de autenticación Puedes crear, leer y modificar objetos personalizados utilizando uno de los siguientes métodos de autenticación: * [OAuth](https://developers.hubspot.com/custom-objects-schema-pilot) * [Tokens de acceso de aplicaciones privadas](/docs/api-reference/auth-oauth-v1/guide) ## Crear objetos personalizados Para crear objetos personalizados, primero deberás definir el esquema del objeto. El esquema incluye el nombre del objeto, las propiedades y las asociaciones con otros objetos del CRM. Puedes encontrar los detalles completos de la solicitud del esquema en la pestaña *Esquema del objeto* en la parte superior de este artículo. También puedes ver un ejemplo de solicitud en el [tutorial a continuación](#custom-object-example). Para crear el esquema de objeto personalizado, haz una solicitud `POST` a `crm/v3/schemas`. En el cuerpo de la solicitud, incluye las definiciones para el esquema del objeto, lo que incluye el nombre, las propiedades y las asociaciones. Al asignarle un nombre al objeto personalizado, ten en cuenta lo siguiente: * Una vez creado un objeto, no puedes cambiar el nombre y la etiqueta. * El nombre solo puede contener letras, números y guiones bajos. * El primer carácter del nombre debe ser una letra. * Las etiquetas largas pueden aparecer cortadas en ciertas partes del producto. A continuación, lee acerca de las definiciones requeridas para las propiedades y asociaciones del objeto. ### Propiedades Las propiedades que definas en el cuerpo de la solicitud se utilizarán para almacenar información en los registros de cada objeto personalizado. > [!WARNING] > > ### Nota: > > Puedes tener hasta 10 [propiedades con un único valor](/docs/guides/crm/understanding-the-crm#:~:text=Creating%20your%20own%20unique%20identifiers) por cada objeto personalizado en tu cuenta de HubSpot. Las propiedades definidas se usarán para rellenar los siguientes campos basados en propiedades: * **requiredProperties:** las propiedades que se requieren al crear un nuevo registro de un objeto personalizado. * **searchableProperties:** las propiedades que se indexan para las búsquedas en HubSpot. * **primaryDisplayProperty:** la propiedad utilizada para asignar un nombre a cada registro de un objeto personalizado. * **secondaryDisplayProperties:** las propiedades que aparecen en cada registro bajo el campo primaryDisplayProperty. ![custom-object-secondary-display-properties0](https://www.hubspot.es/hubfs/Knowledge_Base_2021/Developer/custom-object-secondary-display-properties0.png) * La primera propiedad que se indica en el campo `secondaryDisplayProperties` también se agregará como un cuarto filtro en la página de índice del objeto si es uno de los siguientes tipos de propiedad: * `string` * `number` * `enumeration` * `boolean` * `datetime` ![custom-object-dashboard-filter0](https://www.hubspot.es/hubfs/Knowledge_Base_2021/Developer/custom-object-dashboard-filter0.png) * Para evitar que se muestre una propiedad en la interfaz de usuario, primero deberás eliminar la propiedad y luego volver a crearla. Por defecto, cuando se crean propiedades a través de la solicitud de esquema, el atributo `type` (tipo) de la propiedad se establece en `string` (cadena) y el atributo `fieldType` se establece en `text` (texto). A continuación se muestran los valores que puedes usar para crear diferentes tipos de propiedades. | `type` | Descripción | Valores válidos de `fieldType` | | - | - | - | | `enumeration` | Una cadena que representa un conjunto de opciones separadas por un punto y coma. | `booleancheckbox`, `checkbox`, `radio`, `select` | | `date` | Un [valor con formato ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) que representa un día, mes y año específicos. | `date` | | `dateTime` | Un [valor con formato ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) que representa un día, mes y hora específicos. La aplicación de HubSpot no mostrará la hora del día. | `date` | | `string` | Una cadena de texto sin formato, limitada a 65.536 caracteres. | `file`, `text`, `textarea` | | `number` | Un valor numérico que contiene dígitos y, como máximo, un decimal. | `number` | | `fieldType` | Descripción | | - | - | | `booleancheckbox` | Una entrada que permitirá a los usuarios seleccionar "Sí" o "No". Cuando se usa en un formulario, se mostrará como una única casilla de verificación. | | `checkbox` | Una lista de casillas de verificación que permitirán al usuario seleccionar varias opciones de un conjunto de opciones permitidas para la propiedad. | | `date` | Un valor de fecha, que se muestra como un selector de fechas. | | `file` | Permite subir un archivo a un formulario. Se almacena y se muestra como una URL que enlaza al archivo. | | `number` | Una cadena de numerales o números escritos en notación decimal o científica. | | `radio` | Input que permitirá a los usuarios seleccionar una opción de un conjunto de opciones permitidas para la propiedad. Si se utiliza en un formulario, se mostrará como un conjunto de botones de selección. | | `select` | Input en forma de desplegable que permiten a los usuarios seleccionar una opción de un conjunto de opciones permitidas para la propiedad. | | `text` | Una cadena de texto sin formato que se muestra como un input de texto de una sola línea. | | `textarea` | Una cadena de texto sin formato, que se muestra como un input de texto de varias líneas. | ### Asociaciones HubSpot asociará automáticamente un objeto personalizado con los correos electrónicos, reuniones, notas, tareas, llamadas y objetos de conversaciones. También puedes asociar el objeto personalizado con otros objetos estándar de HubSpot u otros objetos personalizados. Al crear asociaciones a través de la solicitud de creación de esquema, identifica los objetos estándar usando el nombre y los objetos personalizados usando el valor `objectTypeId`. *Por ejemplo:* ```json theme={null} "associatedObjects": [ "CONTACT", "COMPANY", "TICKET", "DEAL", "2-3453932" ] ``` ## Recuperar objetos personalizados existentes Para recuperar todos los objetos personalizados, haz una solicitud `GET` a `/crm/v3/schemas`. Para recuperar un objeto personalizado específico, realiza una solicitud `GET` a uno de los siguientes endpoints: * `/crm/v3/schemas/{fullyQualifiedName}`. Puedes encontrar un objeto `fullyQualifiedName` en su esquema, que se deriva de `p{portal_id}_{object_name}`. Puedes encontrar el ID del portal de tu cuenta utilizando la [API de información de la cuenta.](/docs/api-reference/account-account-info-v3/guide) Por ejemplo, para una cuenta con el ID `1234` y un objeto llamado `lender`, la URL de solicitud podría parecerse a cualquiera de los siguientes elementos: * [`https://api.hubapi.com/crm/v3/schemas/p1234_lende`](https://api.hubapi.com/crm/v3/schemas/p1234_lender) ## Recuperar los registros de los objetos personalizados También puedes recuperar los registros de un objeto personalizado. * Para recuperar un registro específico usando el valor del ID del registro, haz una solicitud `GET` a `crm/v3/objects/{objectType}/{recordId}`. En este endpoint, puedes incluir los siguientes parámetros de consulta en la URL de la solicitud: | Parámetro | Descripción | | - | - | | `properties` | Una lista separada con comas de las propiedades que se devolverán en la respuesta. Si el registro de objeto personalizado solicitado no tiene un valor para una propiedad, no aparecerá en la respuesta. | | `propertiesWithHistory` | Una lista separada con comas de las propiedades actuales y anteriores que se devolverán en la respuesta. Si el registro de objeto personalizado solicitado no tiene un valor para una propiedad, no aparecerá en la respuesta. | | `associations` | Una lista separada con comas de los objetos para los que se deben obtener los ID asociados. No se devolverán en la respuesta las asociaciones especificadas que no existan. Encuentra más información sobre la [API de asociaciones.](/docs/api-reference/crm-associations-v4/guide) | * Para obtener varios registros, haz una solicitud `POST` a `crm/v3/objects/{objectType}/batch/read`. El endpoint en bloques no puede obtener asociaciones. Encuentra más información sobre cómo leer asociaciones en bloques con la [API de asociaciones](/docs/api-reference/crm-associations-v4/guide). En tu solicitud, puedes obtener registros por su ID de registro (`hs_object_id`) o por una [propiedad de identificador único personalizada](/docs/api-reference/crm-properties-v3/guide#create-unique-identifier-properties). Por defecto, los valores `id` de la solicitud se refieren al ID del registro, por lo que no se requiere el parámetro `idProperty` al obtener datos por el ID del registro. Para usar una propiedad de valor único personalizada, debes incluir el parámetro `idProperty`. Por ejemplo, para recuperar un grupo de registros de objetos personalizados, tu solicitud podría tener una de estas dos estructuras: ```json theme={null} { "properties": ["petname"], "inputs": [ { "id": "12345" }, { "id": "67891" } ] } ``` ```json theme={null} { "properties": ["petname"], "idProperty": "uniquepropertyexample", "inputs": [ { "id": "abc" }, { "id": "def" } ] } ``` Para obtener registros de objetos personalizados con valores actuales y anteriores para una propiedad, tu solicitud podría ser como la siguiente: ```json theme={null} { "propertiesWithHistory": ["pet_owner"], "inputs": [ { "id": "12345" }, { "id": "67891" } ] } ``` ## Modificar objetos personalizados existentes Para modificar el esquema de un objeto, haz una solicitud `PATCH` a `https://api.hubapi.com/crm/v3/schemas/{objectTypeId}`. Una vez que tu objeto personalizado esté definido: * El nombre y las etiquetas del objeto (singular y plural) no se pueden cambiar. * Los parámetros `requiredProperties`, `searchableProperties`, `primaryDisplayProperty` y `secondaryDisplayProperties` se pueden cambiar actualizando el esquema del objeto. Para establecer una nueva propiedad como obligatoria, de búsqueda o de visualización, debes crear la propiedad antes de modificar el esquema. * Puedes crear y editar propiedades de objetos personalizados [en HubSpot](https://knowledge.hubspot.com/es/properties/create-and-edit-properties#view-and-edit-properties) o a través de la [API de propiedades](/docs/api-reference/crm-properties-v3/guide). ### Actualizar asociaciones Para agregar otras asociaciones de objetos a tu objeto personalizado, haz una solicitud `POST` a `/crm/v3/schemas/_{objectTypeId}_/associations`. Solo puedes asociar tu objeto personalizado con objetos de HubSpot estándar (por ejemplo, *contacto*, *empresa*, *negocio*, o *ticket*) u otros objetos personalizados. En el campo `toObjectTypeId`, identifica los objetos personalizados por el valor `objectTypeId` y los objetos estándar por su nombre. Por ejemplo: ```json theme={null} { "fromObjectTypeId": "2-3444025", "toObjectTypeId": "ticket", "name": "cat_to_ticket" } ``` ## Eliminar un objeto personalizado Solo puedes eliminar un objeto personalizado después de eliminar todas las instancias de objetos de ese tipo. Para eliminar un objeto personalizado, haz una solicitud `DELETE` a `/crm/v3/schemas/{objectType}`. Si necesitas crear un nuevo objeto personalizado con el mismo nombre que el objeto eliminado, debes eliminar el esquema haciendo una solicitud `DELETE` a `/crm/v3/schemas/{objectType}?archived=true`. Solo puedes eliminar un tipo de objeto personalizado después de eliminar todas las instancias de objeto de ese tipo, las asociaciones y las propiedades personalizadas. ## Ejemplo de objeto personalizado Lo siguiente es un tutorial para crear un objeto personalizado. Para obtener detalles completos de las solicitudes que se muestran, consulta la pestaña Definición de objeto en la parte superior del artículo. Esta explicación cubre: 1. La creación de un esquema de objeto personalizado. 2. La creación de un registro de objeto personalizado. 3. La asociación de un registro de objeto personalizado con un contacto de HubSpot. 4. La creación de una nueva definición de asociación entre el objeto personalizado y el ticket de HubSpot. 5. La creación de una nueva definición de propiedad. 6. La actualización del esquema de objetos (es decir, `secondaryDisplayProperties`) con la nueva propiedad. *** **Meta:** Un concesionario de automóviles llamado CarSpot quiere almacenar su inventario en HubSpot usando un objeto personalizado. Para hacer seguimiento de la propiedad del vehículo y las compras, asociarán los autos con los registros de contacto. Posteriormente, también harán seguimiento del mantenimiento del vehículo utilizando tickets de HubSpot y propiedades personalizadas. ### Creación del esquema de objeto CarSpot necesita crear un esquema de objeto que pueda representar los siguientes atributos como propiedades: 1. **Condición (nueva o usada):** enumeración 2. **Fecha de recepción en el concesionario:** fecha 3. **Año:** número 4. **Marca:** cadena 5. **Modelo:** cadena 6. **Número de chasis:** cadena (valor único) 7. **Color:** cadena 8. **Kilometraje:** número 9. **Precio:** número 10. **Notas:** cadena También agregarán una descripción para proporcionar contexto sobre cómo utilizar el objeto y definirán una asociación entre el objeto personalizado y el objeto de contactos estándar para que puedan conectar los autos a los compradores potenciales. Con el modelo de datos finalizado, crearán el esquema de objeto haciendo una solicitud `POST` a `/crm/v3/schemas` con la siguiente solicitud: ```json theme={null} { "name": "cars", "description": "Cars keeps track of cars currently or previously held in our inventory.", "labels": { "singular": "Car", "plural": "Cars" }, "primaryDisplayProperty": "model", "secondaryDisplayProperties": ["make"], "searchableProperties": ["year", "make", "vin", "model"], "requiredProperties": ["year", "make", "vin", "model"], "properties": [ { "name": "condition", "label": "Condition", "type": "enumeration", "fieldType": "select", "options": [ { "label": "New", "value": "new" }, { "label": "Used", "value": "used" } ] }, { "name": "date_received", "label": "Date received", "type": "date", "fieldType": "date" }, { "name": "year", "label": "Year", "type": "number", "fieldType": "number" }, { "name": "make", "label": "Make", "type": "string", "fieldType": "text" }, { "name": "model", "label": "Model", "type": "string", "fieldType": "text" }, { "name": "vin", "label": "VIN", "type": "string", "hasUniqueValue": true, "fieldType": "text" }, { "name": "color", "label": "Color", "type": "string", "fieldType": "text" }, { "name": "mileage", "label": "Mileage", "type": "number", "fieldType": "number" }, { "name": "price", "label": "Price", "type": "number", "fieldType": "number" }, { "name": "notes", "label": "Notes", "type": "string", "fieldType": "text" } ], "associatedObjects": ["CONTACT"] } ``` > [!TIP] > > Después de crear el esquema del objeto, CarSpot se asegura de anotar el campo `{objectTypeId}` del nuevo objeto, ya que lo utilizarán para extraer y modificar el objeto más adelante. También pueden utilizar el valor `{fullyQualifiedName}` si lo prefieren. ### Crear un registro de objeto personalizado *Con el objeto personalizado creado, CarSpot ahora puede crear registros en el objeto para cada auto en su inventario.* *Crearán el primer registro para un auto haciendo una solicitud `POST` a `/crm/v3/objects/2-3465404` con la siguiente solicitud:* ```json theme={null} { "properties": { "condition": "used", "date_received": "1582416000000", "year": "2014", "make": "Nissan", "model": "Frontier", "vin": "4Y1SL65848Z411439", "color": "White", "mileage": "80000", "price": "12000", "notes": "Excellent condition. No accidents." } } ``` La respuesta para esta llamada a la API se vería similar a: ```json theme={null} { "id": "181308", "properties": { "color": "White", "condition": "used", "make": "Nissan", "mileage": "80000", "model": "Frontier", "vin": "4Y1SL65848Z411439", "notes": "Excellent condition. No accidents.", "price": "12000", "year": "2014", "date_received": "1582416000000" }, "createdAt": "2020-02-23T01:44:11.035Z", "updatedAt": "2020-02-23T01:44:11.035Z", "archived": false } ``` Con el registro creado, pueden utilizar el valor de `id` para asociar más tarde cada auto con un contacto existente. > [!WARNING] > > Si luego quisieran recuperar este registro junto con propiedades específicas, podrían hacer una solicitud `GET` a `https://api.hubapi.com/crm/v3/objects/2-3465404/181308?portalId=1234567&properties=year&properties=make&properties=model` ### Asociar el registro de objeto personalizado a otro registro Puedes usar el ID del nuevo registro de automóvil (`181308`) y el ID de otro registro para asociar un registro de objeto personalizado con un registro de otro objeto. Para crear una asociación, haz una solicitud `PUT` a `/crm/v3/objects/{objectType}/{objectId}/associations/{toObjectType}/{toObjectId}/{associationType}`. Si la relación del objeto ya está [definida](#defining-a-new-association), para determinar el valor `associationType`, haz una solicitud `GET` a `crm/v3/schemas/{objectType}`. Por ejemplo, con el *ID `51` del contacto y el tipo de asociación `75`,* CarSpot puede asociar el registro del automóvil con un contacto. Usando los ID anteriores, la URL de la solicitud se creará de la siguiente manera: `https://api.hubspot.com/crm/v3/objects/2-3465404/181308/associations/contacts/51/75` ### Definir una nueva asociación CarSpot ahora quiere comenzar a hacer seguimiento de los servicios postventa para sus automóviles. Para ello, usarán los tickets de HubSpot a fin de registrar todo mantenimiento realizado. Para permitir las asociaciones entre automóviles y tickets, crearán una nueva asociación haciendo una solicitud `POST` a **`/crm/v3/schemas/2-3465404/associations`** con la siguiente solicitud: ```json theme={null} { "fromObjectTypeId": "2-3465404", "toObjectTypeId": "ticket", "name": "car_to_ticket" } ``` La respuesta para esta llamada a la API se vería similar a: ```json theme={null} { "id": "121", "createdAt": "2020-02-23T01:52:12.893826Z", "updatedAt": "2020-02-23T01:52:12.893826Z", "fromObjectTypeId": "2-3465404", "toObjectTypeId": "0-5", "name": "car_to_ticket" } ``` > [!NOTE] > > Al crear una nueva asociación entre dos objetos personalizados, especifica los objetos personalizados por el valor *objectTypeId* en el campo *toObjectTypeId*. En el caso de los objetos estándar, puedes identificarlos por su nombre o utilizar los siguientes valores: > > * **Contacto:** 0-1 > * **Empresa:** 0-2 > * **Negocio:** 0-3 > * **Ticket:** 0-5 ### Definir una nueva propiedad A medida que continúan haciendo seguimiento al mantenimiento, CarSpot ve una oportunidad para agrupar estos servicios en paquetes. Para hacer seguimiento de estos paquetes de mantenimiento en los registros de cada vehículo, crearán una nueva propiedad de enumeración que contenga los paquetes disponibles. Para definir una nueva propiedad, realizarán una solicitud `POST` a `/crm/v3/properties/2-3465404` con la siguiente solicitud: ```json theme={null} { "groupName": "car_information", "name": "maintenance_package", "label": "Maintenance Package", "type": "enumeration", "fieldType": "select", "options": [ { "label": "Basic", "value": "basic" }, { "label": "Oil change only", "value": "oil_change_only" }, { "label": "Scheduled", "value": "scheduled" } ] } ``` La respuesta para esta llamada a la API se vería similar a: ```json theme={null} { "updatedAt": "2020-02-23T02:08:20.055Z", "createdAt": "2020-02-23T02:08:20.055Z", "name": "maintenance_package", "label": "Maintenance Package", "type": "enumeration", "fieldType": "select", "groupName": "car_information", "options": [ { "label": "Basic", "value": "basic", "displayOrder": -1, "hidden": false }, { "label": "Oil change only", "value": "oil_change_only", "displayOrder": -1, "hidden": false }, { "label": "Scheduled", "value": "scheduled", "displayOrder": -1, "hidden": false } ], "displayOrder": -1, "calculated": false, "externalOptions": false, "archived": false, "hasUniqueValue": false, "hidden": false, "modificationMetadata": { "archivable": true, "readOnlyDefinition": false, "readOnlyValue": false }, "formField": false } ``` Ahora que se creó la propiedad, quieren que aparezca en la barra lateral de cada registro de automóvil para que la información esté fácilmente disponible para sus representantes de ventas y técnicos. Para ello, agregarán la propiedad a `secondaryDisplayProperties` haciendo una solicitud `PATCH` a `/crm/v3/schemas/2-3465404` con la siguiente solicitud: ```json theme={null} { "secondaryDisplayProperties": ["maintenance_package"] } ``` La respuesta para esta llamada a la API se vería similar a: ```json theme={null} { "id": "3465404", "createdAt": "2020-02-23T01:24:54.537Z", "updatedAt": "2020-02-23T02:12:24.175874Z", "labels": { "singular": "Car", "plural": "Cars" }, "requiredProperties": ["year", "model", "vin", "make"], "searchableProperties": ["year", "model", "vin", "make"], "primaryDisplayProperty": "model", "secondaryDisplayProperties": ["maintenance_package"], "portalId": 1234567, "name": "car" } ``` Ahora, cuando los técnicos abren un registro de contacto que tiene un automóvil asociado, la propiedad se mostrará en la tarjeta de objeto personalizada en la barra lateral: ![Screen Shot 2020-03-06 at 11.08.41 AM](https://developers.hubspot.com/hs-fs/hubfs/Screen%20Shot%202020-03-06%20at%2011.08.41%20AM.png?width=386\&name=Screen%20Shot%202020-03-06%20at%2011.08.41%20AM.png) A medida que CarSpot continúa usando HubSpot, es probable que encuentren formas de mejorar y expandir este objeto personalizado, entre otras cosas, usando la API de HubSpot. Incluso podrían decidir [crear páginas dinámicas usando los datos de los objetos personalizados](/docs/cms/start-building/features/data-driven-content/crm-data-in-cms-pages). # Merge two objects with same type Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/custom-objects/merge-custom-objects specs/2026-09/crm-custom-objects-v2026-09.json POST /crm/objects/2026-09/{objectType}/merge Fusiona dos objetos de CRM del mismo tipo en un solo objeto. Esta operación es útil para consolidar registros duplicados y asegurar la coherencia de los datos. La solicitud requiere especificar el objeto principal y el objeto que se va a combinar. > **Supported products** > **Required Scopes** # Search for CRM objects of a specified type. Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/custom-objects/search/search-custom-objects specs/2026-09/crm-custom-objects-v2026-09.json POST /crm/objects/2026-09/{objectType}/search Busca objetos del CRM de un tipo específico usando los criterios de búsqueda proporcionados. Este punto de terminación permite filtrar y ordenar objetos según varias propiedades, devolviendo una colección de objetos coincidentes junto con el recuento total. > **Supported products** > **Required Scopes** # Update Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/custom-objects/update-custom-object specs/2026-09/crm-custom-objects-v2026-09.json PATCH /crm/objects/2026-09/{objectType}/{objectId} Realizar una actualización parcial de un objeto identificado por `{objectId}` en el CRM. El `{objectId}` se refiere al ID interno del objeto por opción predeterminada, o a cualquier valor de propiedad único especificado por el parámetro de consulta `idProperty`. Los valores de propiedad proporcionados sobrescribirán los valores existentes, mientras que las propiedades de solo lectura y las no existentes se ignorarán. Las propiedades se pueden borrar pasando una cadena vacía. > **Supported products** > **Required Scopes** # Retrieve deal splits Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/deal-splits/get-deal-splits specs/2026-09/crm-deal-splits-v2026-09.json POST /deal-splits/2026-09/batch/read Leer un lote de objetos de división de negocio por su ID interno de objeto de negocio asociado > **Supported products** > **Required Scopes** # Deal Splits API Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/deal-splits/guide # Upsert deal splits Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/deal-splits/upsert-deal-splits specs/2026-09/crm-deal-splits-v2026-09.json POST /deal-splits/2026-09/batch/upsert Crea o reemplaza las divisiones de negocios para los negocios con los ID especificados. Los porcentajes de la división de negocio para cada negocio deben sumar 1.0 (100%) y pueden tener hasta 8 decimales. > **Supported products** > **Required Scopes** # Create a batch of deals Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/deals/batch/create-deals specs/2026-09/crm-deals-v2026-09.json POST /crm/objects/2026-09/0-3/batch/create Crear múltiples negocios en una única solicitud. > **Supported products** > **Required Scopes** # Archive a batch of deals by ID Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/deals/batch/delete-deals specs/2026-09/crm-deals-v2026-09.json POST /crm/objects/2026-09/0-3/batch/archive Archivar múltiples negocios utilizando sus ID. > **Supported products** > **Required Scopes** # Read a batch of deals by internal ID, or unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/deals/batch/get-deals specs/2026-09/crm-deals-v2026-09.json POST /crm/objects/2026-09/0-3/batch/read Recupera registros por ID de registro o incluye el parámetro `idProperty` para recuperar registros por propiedad de valor único personalizada. > **Supported products** > **Required Scopes** # Update a batch of deals by internal ID, or unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/deals/batch/update-deals specs/2026-09/crm-deals-v2026-09.json POST /crm/objects/2026-09/0-3/batch/update Actualizar múltiples negocios usando sus ID internos o valores de propiedades únicos. > **Supported products** > **Required Scopes** # Create or update a batch of deals by unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/deals/batch/upsert-deals specs/2026-09/crm-deals-v2026-09.json POST /crm/objects/2026-09/0-3/batch/upsert Crea o actualiza registros identificados por un valor único de propiedad según lo especificado por el parámetro de consulta `idProperty`. El parámetro de consulta `idProperty` se refiere a una propiedad cuyos valores son únicos para el objeto. > **Supported products** > **Required Scopes** # Create Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/deals/create-deal specs/2026-09/crm-deals-v2026-09.json POST /crm/objects/2026-09/0-3 Crea un negocio con las propiedades dadas y devuelve una copia del objeto, incluyendo el ID. Se proporciona documentación y ejemplos para crear negocios estándar. > **Supported products** > **Required Scopes** # Archive Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/deals/delete-deal specs/2026-09/crm-deals-v2026-09.json DELETE /crm/objects/2026-09/0-3/{dealId} Mueve un objeto identificado por `{dealId}` a la papelera de reciclaje. > **Supported products** > **Required Scopes** # Read Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/deals/get-deal specs/2026-09/crm-deals-v2026-09.json GET /crm/objects/2026-09/0-3/{dealId} Lee un objeto identificado por `{dealId}`. `{dealId}` se refiere al ID de objeto interno por opción predeterminada o, de manera opcional, a cualquier valor de propiedad único especificado por el parámetro de consulta `idProperty`. Controla lo que se devuelve mediante el parámetro de consulta `properties`. > **Supported products** > **Required Scopes** # List Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/deals/get-deals specs/2026-09/crm-deals-v2026-09.json GET /crm/objects/2026-09/0-3 Lee una página de negocios. Controla lo que se devuelve a través del parámetro de consulta `properties`. > **Supported products** > **Required Scopes** # API del CRM | Negocios Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/deals/guide > **[Run in Postman](https://app.getpostman.com/run-collection/8b5f74a661b06f5a54bd)** > **Requisitos de ámbito** En HubSpot, los negocios representan transacciones con contactos o empresas. A los negocios se les hace seguimiento en el proceso de venta mediante las [etapas de la pipeline](https://knowledge.hubspot.com/es/object-settings/set-up-and-customize-pipelines) hasta que se ganan o se pierden. Los endpoints de los negocios te permiten crear y administrar negocios, así como sincronizar los datos de los negocios entre HubSpot y otros sistemas. Obtén más información sobre las API de los objetos, los registros, las propiedades y las asociaciones en la [guía informativa sobre el CRM](/docs/guides/crm/understanding-the-crm). Para obtener más información general sobre objetos y registros de HubSpot, consulta cómo [Administrar la base de datos del CRM](https://knowledge.hubspot.com/es/get-started/manage-your-crm-database). ## Crear negocios Para crear nuevos negocios, haz una solicitud `POST` a `/crm/v3/objects/deals`. En el cuerpo de la solicitud, incluye los datos de tu negocio en un objeto `properties`. También puedes agregar un objeto `associations` para vincular el nuevo negocio con registros existentes (por ejemplo, contactos o empresas) o actividades (por ejemplo, reuniones o notas). ### Propiedades Los detalles del negocio se almacenan en las propiedades de negocios. HubSpot proporciona un conjunto de [propiedades de negocio predeterminadas](https://knowledge.hubspot.com/es/properties/hubspots-default-deal-properties), pero también puedes [crear propiedades personalizadas](https://knowledge.hubspot.com/es/properties/create-and-edit-properties). Al crear un nuevo negocio, debes incluir las siguientes propiedades en la solicitud: `dealname`, `dealstage` y si tienes varias pipelines, `pipeline`. Si no se especifica una pipeline, se utilizará la pipeline predeterminada. Para ver todas las propiedades disponibles, puedes obtener una lista de las propiedades de negocios de tu cuenta haciendo una solicitud `GET` a `/crm/v3/properties/deals`. Encuentra más información sobre la [API de propiedades](/docs/api-reference/crm-properties-v3/guide). > [!WARNING] > > ### Nota: > > Debes usar el ID interno de una etapa del negocio o una pipeline al crear un negocio a través de la API. El ID interno también saldrá en los resultados cuando busques negocios a través de la API. Puedes encontrar el ID interno de una etapa del negocio o una pipeline en la [configuración de tu pipeline de negocios](https://knowledge.hubspot.com/es/object-settings/set-up-and-customize-pipelines#edit-or-delete-pipelines). Por ejemplo, para crear un nuevo negocio, la solicitud puede ser similar a la siguiente: ```json theme={null} { "properties": { "amount": "1500.00", "closedate": "2019-12-07T16:50:06.678Z", "dealname": "New deal", "pipeline": "default", "dealstage": "contractsent", "hubspot_owner_id": "910901", "hs_all_collaborator_owner_ids": ";12345678;9101112" } } ``` ### Asociaciones Al crear un nuevo negocio, también puedes asociar el negocio con [registros](https://knowledge.hubspot.com/es/records/associate-records) o [actividades](https://knowledge.hubspot.com/es/records/associate-activities-with-records) existentes en un objeto `associations`. Por ejemplo, para asociar un nuevo negocio con un registro de contacto y de empresa existentes, la solicitud debería hacerse de la siguiente manera: ```json theme={null} { "properties": { "amount": "1500.00", "closedate": "2019-12-07T16:50:06.678Z", "dealname": "New deal", "pipeline": "default", "dealstage": "contractsent", "hubspot_owner_id": "910901" }, "associations": [ { "to": { "id": 201 }, "types": [ { "associationCategory": "HUBSPOT_DEFINED", "associationTypeId": 5 } ] }, { "to": { "id": 301 }, "types": [ { "associationCategory": "HUBSPOT_DEFINED", "associationTypeId": 3 } ] } ] } ``` Para el objeto `associations`, debes incluir lo siguiente: | Parámetro | Descripción | | - | - | | `to` | El registro o actividad que quieres asociar con el negocio, especificado por su valor `id` único. | | `types` | El tipo de asociación entre el negocio y el registro o actividad. Incluye `associationCategory`y `associationTypeId`. Los ID de los tipos de asociación predeterminados se enumeran en [este recurso](/docs/api-reference/crm-associations-v4/guide#association-type-id-values), y también puedes obtener el valor de los tipos de asociación personalizados (es decir, etiquetas) a través de la [API de asociaciones](/docs/api-reference/crm-associations-v4/guide#retrieve-association-types). | ## Buscar negocios Puedes buscar negocios individualmente o en bloques. * Para buscar un solo un negocio, haz una solicitud `GET` a `/crm/v3/objects/deals/{dealId}`. * Para obtener una lista de todos los negocios, envía una solicitud `GET` a `/crm/v3/objects/deals`. En estos endpoints, puedes incluir los siguientes parámetros de consulta en la URL de la solicitud: | Parámetro | Descripción | | - | - | | `properties` | Una lista separada con comas de las propiedades que se devolverán en la respuesta. Si el negocio solicitado no tiene un valor para una propiedad, este no aparecerá en la respuesta. | | `propertiesWithHistory` | Una lista separada con comas de las propiedades actuales y anteriores que se devolverán en la respuesta. Si el negocio solicitado no tiene un valor para una propiedad, este no aparecerá en la respuesta. | | `associations` | Una lista separada con comas de los objetos para los que se deben obtener los ID asociados. No se devolverán en la respuesta las asociaciones especificadas que no existan. Encuentra más información sobre la [API de asociaciones.](/docs/api-reference/crm-associations-v4/guide) | * Para recuperar un bloque de negocios específicos por ID de registro o una [propiedad de identificador único personalizado](/docs/api-reference/crm-properties-v3/guide#create-unique-identifier-properties), haz una solicitud `POST` a `crm/v3/objects/deals/batch/read`. * El endpoint por lotes no puede obtener asociaciones. Encuentra más información sobre cómo leer asociaciones por lotes con la [API de asociaciones](/docs/api-reference/crm-associations-v4/guide). * Para obtener negocios por una [propiedad de identificador único](/docs/api-reference/crm-properties-v3/guide#create-unique-identifier-properties) personalizada en lugar del ID del negocio, incluye el parámetro `idProperty` en el cuerpo de la solicitud para especificar el nombre de la propiedad. Luego, en la matriz `inputs`, incluye los valores de la propiedad del identificador único en lugar del ID del negocio. Por ejemplo, para buscar negocios en bloques, la solicitud podría verse de una de estas dos maneras: ```text get by id.txt theme={null} { "properties": ["dealname", "dealstage", "pipeline"], "inputs": [ { "id": "7891023" }, { "id": "987654" } ] } ``` ```text get by unique property.txt theme={null} { "properties": ["dealname", "dealstage", "pipeline"], "idProperty": "uniqueordernumber", "inputs": [ { "id": "0001111" }, { "id": "0001112" } ] } ``` Para obtener negocios con valores actuales e históricos con respecto a una propiedad, puedes incluir el parámetro `propertiesWithHistory` en el cuerpo de la solicitud, como se muestra a continuación. ```json theme={null} { "propertiesWithHistory": ["dealstage"], "inputs": [ { "id": "7891023" }, { "id": "987654" } ] } ``` ## Actualizar negocios Puedes actualizar los negocios individualmente o en bloques. Para los negocios existentes, el ID del negocio es un valor único predeterminado que puedes usar para actualizar el negocio a través de la API, pero también puedes identificar los negocios utilizando [propiedades personalizadas de identificadores únicos](/docs/api-reference/crm-properties-v3/guide#create-unique-identifier-properties). * Para actualizar un solo negocio por su ID de registro, haz una solicitud `PATCH` a `/crm/v3/objects/deals/{dealId}` e incluye los datos que quieres actualizar. * Para actualizar varios negocios, haz una solicitud `POST` a `/crm/v3/objects/deals/batch/update`. En el cuerpo de la solicitud, incluye una matriz con los identificadores de los negocios y las propiedades que quieres actualizar. ### Asociar negocios existentes con registros o actividades Para asociar un negocio con otros registros del CRM o una actividad, haz una solicitud `PUT` a `/crm/v3/objects/deals/{dealId}/associations/{toObjectType}/{toObjectId}/{associationTypeId}`. > [!NOTE] > > Para obtener el valor `associationTypeId`, consulta [esta lista](/docs/api-reference/crm-associations-v4/guide#association-type-id-values) de valores predeterminados o haz una solicitud `GET` a `/crm/v4/associations/{fromObjectType}/{toObjectType}/labels`. Encuentra más información sobre cómo asociar registros a través de la [API de asociaciones](/docs/api-reference/crm-associations-v4/guide). ### Eliminar una asociación Para quitar una asociación entre un negocio y un registro o actividad, haz una solicitud `DELETE` a la siguiente URL: `/crm/v3/objects/deals/{dealId}/associations/{toObjectType}/{toObjectId}/{associationTypeId}`. ## Anclar una actividad en el registro de un negocio Puedes anclar una actividad en un registro de negocio a través de la API incluyendo el parámetro `hs_pinned_engagement_id` en tu solicitud. En el valor del parámetro, incluye el id de la actividad a anclar, que se puede obtener a través de las [API de interacciones](/docs/api-reference/overview). Puedes anclar una actividad por registro, y la actividad ya debe estar asociada con el negocio antes de anclarla. Para establecer o cambiar la actividad anclada de un negocio, la solicitud podría hacerse de la siguiente manera: ```json theme={null} { "properties": { "hs_pinned_engagement_id": 123456789 } } ``` También puedes crear un negocio, asociarlo a una actividad existente y anclar la actividad en la misma solicitud. Por ejemplo: ```json theme={null} { "properties": { "dealname": "New deal", "pipelines": "default", "dealstage": "contractsent", "hs_pinned_engagement_id": 123456789 }, "associations": [ { "to": { "id": 123456789 }, "types": [ { "associationCategory": "HUBSPOT_DEFINED", "associationTypeId": 213 } ] } ] } ``` ## Eliminar negocios Puedes eliminar negocios individualmente o en bloques, lo que agregará el negocio a la papelera de reciclaje en HubSpot. Más adelante puedes [restaurar el negocio en HubSpot](https://knowledge.hubspot.com/es/records/restore-deleted-records). * Para [eliminar un negocio individual](/docs/api-reference/crm-deals-v3/guide#delete-%2Fcrm%2Fv3%2Fobjects%2Fdeals%2F%7Bdealid%7D) usando el ID, haz una solicitud `DELETE` a `/crm/v3/objects/deals/{dealId}`. No se necesita un cuerpo de solicitud para esta petición. * Para [eliminar negocios por lotes](/docs/api-reference/crm-deals-v3/guide#post-%2Fcrm%2Fv3%2Fobjects%2Fdeals%2Fbatch%2Farchive), envía una solicitud `POST` a `/crm/v3/objects/deals/batch/archive`. En el cuerpo de la solicitud, incluye los valores del ID del negocio como entradas de `id`, como se muestra en el ejemplo a continuación. ```json theme={null} { "inputs": [ { "id": "123456" }, { "id": "7891011" }, { "id": "12123434" } ] } ``` Más información sobre la eliminación de negocios en la [documentación de referencia](/docs/api-reference/crm-deals-v3/guide#delete-%2Fcrm%2Fv3%2Fobjects%2Fdeals%2F%7Bdealid%7D). # Merge two deals with same type Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/deals/merge-deals specs/2026-09/crm-deals-v2026-09.json POST /crm/objects/2026-09/0-3/merge Combinar dos negocios del mismo tipo en un solo negocio. > **Supported products** > **Required Scopes** # Deal object definition Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/deals/object-definition # Search for deals using various filters and criteria to retrieve specific records. Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/deals/search-deals specs/2026-09/crm-deals-v2026-09.json POST /crm/objects/2026-09/0-3/search Buscar negocios utilizando los criterios y filtros especificados. > **Supported products** > **Required Scopes** # Update Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/deals/update-deal specs/2026-09/crm-deals-v2026-09.json PATCH /crm/objects/2026-09/0-3/{dealId} Realiza una actualización parcial de un objeto identificado por `{dealId}` o, de manera opcional, a cualquier valor de propiedad único según lo especificado por el parámetro de consulta `idProperty`. `{dealId}` se refiere al ID de objeto interno de manera predeterminada y el parámetro de consulta `idProperty` se refiere a una propiedad cuyos valores son únicos para el objeto. Se sobrescribirán los valores de propiedad especificados. Las propiedades de solo lectura y las no existentes generarán un error. Los valores de las propiedades pueden borrarse pasando una cadena vacía. > **Supported products** > **Required Scopes** # Create discounts Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/discounts/batch/create-discounts specs/2026-09/crm-discounts-v2026-09.json POST /crm/objects/2026-09/discounts/batch/create Crea un lote de objetos de CRM con propiedades específicas en tu cuenta de HubSpot. Este punto de terminación te permite crear de forma eficiente varios objetos en una sola solicitud, devolviendo una copia de cada objeto, incluyendo sus ID. Es útil para operaciones de datos masivas en las que es necesario crear varios objetos simultáneamente. > **Supported products** > **Required Scopes** # Delete discounts Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/discounts/batch/delete-discounts specs/2026-09/crm-discounts-v2026-09.json POST /crm/objects/2026-09/discounts/batch/archive Archivar un lote de objetos del CRM identificados por sus ID. Esta operación mueve los objetos especificados al archivo, eliminándolos efectivamente del uso activo, pero reteniéndolos para una posible restauración futura. Esto es útil para gestionar grandes conjuntos de datos que ya no se necesitan en operaciones activas, pero que pueden ser requeridos para fines históricos o de cumplimiento. > **Supported products** > **Required Scopes** # Retrieve discounts Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/discounts/batch/get-discounts specs/2026-09/crm-discounts-v2026-09.json POST /crm/objects/2026-09/discounts/batch/read Recupera un lote de objetos del CRM por sus ID internos o valores de propiedad únicos. Este punto de terminación es útil para obtener varios objetos a la vez, lo que le permite especificar qué propiedades incluir en la respuesta. Admite el filtrado de objetos archivados. > **Supported products** > **Required Scopes** # Update discounts Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/discounts/batch/update-discounts specs/2026-09/crm-discounts-v2026-09.json POST /crm/objects/2026-09/discounts/batch/update Actualiza un lote de objetos del CRM especificando sus propiedades. Este punto de terminación permite realizar actualizaciones masivas en objetos de un tipo específico, lo que puede ser útil para sincronizar datos o aplicar cambios de manera eficiente en varios registros. > **Supported products** > **Required Scopes** # Upsert discounts Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/discounts/batch/upsert-discounts specs/2026-09/crm-discounts-v2026-09.json POST /crm/objects/2026-09/discounts/batch/upsert Crea o actualiza un lote de objetos del CRM por sus valores de propiedad únicos. Este punto de conexión permite gestionar eficientemente múltiples objetos en una sola solicitud, lo que garantiza que los objetos existentes se actualicen y se creen otros nuevos según sea necesario. > **Supported products** > **Required Scopes** # Create a discount Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/discounts/create-discount specs/2026-09/crm-discounts-v2026-09.json POST /crm/objects/2026-09/discounts Crea un objeto de CRM con las propiedades especificadas y recibe una copia del objeto, incluyendo su ID. Este punto de terminación es útil para añadir nuevos objetos a tu sistema de CRM y asegura que recibas los detalles del objeto recién creado de inmediato. > **Supported products** > **Required Scopes** # Delete a discount Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/discounts/delete-discount specs/2026-09/crm-discounts-v2026-09.json DELETE /crm/objects/2026-09/discounts/{discountId} Mueve un objeto identificado por `{objectId}` a la papelera de reciclaje. Esta operación permite archivar un objeto de un tipo específico, eliminándolo de su uso activo, pero conservándolo en el sistema para una posible restauración futura. > **Supported products** > **Required Scopes** # Retrieve a discount Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/discounts/get-discount specs/2026-09/crm-discounts-v2026-09.json GET /crm/objects/2026-09/discounts/{discountId} Lee un objeto identificado por `{objectId}`. `{objectId}` se refiere al ID de objeto interno por opción predeterminada o, de manera opcional, a cualquier valor de propiedad único especificado por el parámetro de consulta `idProperty`. Controla lo que se devuelve mediante el parámetro de consulta `properties`. > **Supported products** > **Required Scopes** # Retrieve discounts Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/discounts/get-discounts specs/2026-09/crm-discounts-v2026-09.json GET /crm/objects/2026-09/discounts Leer una página de objetos de un tipo específico en tu cuenta de HubSpot. Puedes controlar los datos devueltos especificando propiedades, asociaciones y si quieres incluir registros archivados. Este punto de conexión permite la paginación mediante el uso de un token de cursor. > **Supported products** > **Required Scopes** # Discounts API Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/discounts/guide # Discount object definition Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/discounts/object-definition # Search for a discount Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/discounts/search/search-discounts specs/2026-09/crm-discounts-v2026-09.json POST /crm/objects/2026-09/discounts/search Busca objetos del CRM de un tipo específico usando varios filtros y criterios. Este punto de terminación permite hacer consultas complejas para recuperar objetos que coinciden con condiciones específicas. Los resultados de la búsqueda incluyen el número total de objetos coincidentes y los objetos en sí. > **Supported products** > **Required Scopes** # Update a discount Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/discounts/update-discount specs/2026-09/crm-discounts-v2026-09.json PATCH /crm/objects/2026-09/discounts/{discountId} Realiza una actualización parcial de un objeto identificado por "{objectId}". "{objectId}" se refiere al ID interno del objeto, por opción predeterminada, u opcionalmente a cualquier valor de propiedad único según lo especificado por el parámetro de consulta "idProperty". Se sobrescribirán los valores de propiedad especificados. Se ignorarán las propiedades de solo lectura y las no existentes. Los valores de las propiedades pueden borrarse pasando una cadena vacía. > **Supported products** > **Required Scopes** # Read a batch of feedback submissions by internal ID, or unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/feedback-submissions/batch/get-feedback-submissions specs/2026-09/crm-feedback-submissions-v2026-09.json POST /crm/objects/2026-09/feedback_submissions/batch/read Recupera un lote de objetos del CRM por sus ID internos o valores de propiedad únicos. Este punto de terminación permite especificar las propiedades que quiere incluir en la respuesta. Es útil para obtener información detallada sobre varios objetos en una sola solicitud, lo que puede ser beneficioso para el análisis de datos o las tareas de sincronización. > **Supported products** > **Required Scopes** # Read Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/feedback-submissions/get-feedback-submission specs/2026-09/crm-feedback-submissions-v2026-09.json GET /crm/objects/2026-09/feedback_submissions/{feedbackSubmissionId} Lee un objeto identificado por `{objectId}` en el CRM de HubSpot. Por defecto, `{objectId}` se refiere al ID de objeto interno, pero puede especificar cualquier valor de propiedad único usando el parámetro de consulta `idProperty`. Personaliza la respuesta seleccionando propiedades específicas con el parámetro de consulta `properties`. Este punto de conexión es útil para recuperar información detallada sobre un objeto del CRM específico, incluyendo sus propiedades, historial, asociaciones y estado de archivado. > **Supported products** > **Required Scopes** # List Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/feedback-submissions/get-feedback-submissions specs/2026-09/crm-feedback-submissions-v2026-09.json GET /crm/objects/2026-09/feedback_submissions Lee una página de objetos del CRM de un tipo específico. Utiliza el parámetro de consulta `properties` para controlar qué propiedades se devuelven. Este punto de conexión admite la paginación y puede incluir ID de objetos asociados si se especifica. > **Supported products** > **Required Scopes** # Survey Responses API Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/feedback-submissions/guide # Feedback submission object definition Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/feedback-submissions/object-definition # Search for feedback submissions using specified criteria. Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/feedback-submissions/search/search-feedback-submissions specs/2026-09/crm-feedback-submissions-v2026-09.json POST /crm/objects/2026-09/feedback_submissions/search Busca objetos del CRM de un tipo específico usando varios filtros y criterios. Este punto de terminación permite hacer búsquedas complejas al especificar grupos de filtros, opciones de clasificación y propiedades para incluir en la respuesta. Es útil para obtener un subconjunto de objetos que cumplen condiciones específicas. > **Supported products** > **Required Scopes** # Create fees Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/fees/batch/create-fees specs/2026-09/crm-fees-v2026-09.json POST /crm/objects/2026-09/fees/batch/create Crea un lote de objetos del CRM de un tipo específico en HubSpot. Este punto de conexión te permite crear varios objetos en una sola solicitud, lo que agiliza el proceso de poblar tu CRM con datos nuevos. Cada objeto debe tener las propiedades necesarias definidas, y la respuesta incluirá los objetos creados junto con sus ID. > **Supported products** > **Required Scopes** # Delete fees Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/fees/batch/delete-fees specs/2026-09/crm-fees-v2026-09.json POST /crm/objects/2026-09/fees/batch/archive Archiva un lote de objetos del CRM por sus ID. Este punto de terminación es útil para mover varios objetos a la papelera de reciclaje en una sola solicitud, lo que agiliza el proceso de gestionar grandes conjuntos de datos. > **Supported products** > **Required Scopes** # Retrieve fees Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/fees/batch/get-fees specs/2026-09/crm-fees-v2026-09.json POST /crm/objects/2026-09/fees/batch/read Obtén un lote de objetos del CRM por sus ID internos o valores de propiedades únicos. Este punto de conexión es útil para obtener varios objetos en una sola solicitud, lo que puede ayudar a optimizar el rendimiento al trabajar con grandes conjuntos de datos. Puedes especificar si quieres incluir objetos archivados en la respuesta. > **Supported products** > **Required Scopes** # Update fees Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/fees/batch/update-fees specs/2026-09/crm-fees-v2026-09.json POST /crm/objects/2026-09/fees/batch/update Actualiza un lote de objetos del CRM en tu cuenta de HubSpot. Este punto de conexión te permite modificar varios objetos del tipo especificado en una sola solicitud. Es útil para actualizaciones masivas en las que necesitas cambiar propiedades de varios objetos a la vez. El cuerpo de la solicitud debe incluir los objetos que se van a actualizar junto con sus nuevos valores de propiedad. > **Supported products** > **Required Scopes** # Upsert fees Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/fees/batch/upsert-fees specs/2026-09/crm-fees-v2026-09.json POST /crm/objects/2026-09/fees/batch/upsert Crea o actualiza un lote de objetos del CRM por valores de propiedad únicos. Este punto de conexión permite gestionar de forma eficiente varios objetos en una sola solicitud, asegurando que cada objeto se cree o actualice según sus propiedades únicas. > **Supported products** > **Required Scopes** # Create a fee Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/fees/create-fee specs/2026-09/crm-fees-v2026-09.json POST /crm/objects/2026-09/fees Crea un objeto del CRM con las propiedades especificadas y recibe una copia del objeto, incluido su ID. Este punto de conexión es útil para agregar nuevos objetos a tu sistema del CRM con atributos predefinidos. Hay documentación y ejemplos disponibles para crear objetos estándar. > **Supported products** > **Required Scopes** # Delete a fee Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/fees/delete-fee specs/2026-09/crm-fees-v2026-09.json DELETE /crm/objects/2026-09/fees/{feeId} Mueve un objeto identificado por `{objectId}` a la papelera de reciclaje. Esta operación te permite archivar un objeto específico del CRM por su identificador único para eliminarlo de su uso activo, pero conservando la opción de restaurarlo más tarde si es necesario. > **Supported products** > **Required Scopes** # Retrieve a fee Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/fees/get-fee specs/2026-09/crm-fees-v2026-09.json GET /crm/objects/2026-09/fees/{feeId} Lee un objeto identificado por `objectId`. Este punto de conexión permite obtener los detalles de un objeto del CRM específico usando su ID interno o cualquier valor de propiedad único especificado por el parámetro de consulta `idProperty`. Se puede controlar el contenido de la respuesta especificando las propiedades deseadas a través del parámetro de consulta `properties`. > **Supported products** > **Required Scopes** # Retrieve fees Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/fees/get-fees specs/2026-09/crm-fees-v2026-09.json GET /crm/objects/2026-09/fees Recupera una página de objetos del CRM de un tipo específico. Personaliza la respuesta seleccionando propiedades específicas para devolver usando el parámetro de consulta `properties`. Este punto de conexión admite paginación y puede incluir ID de objetos asociados si se solicita. > **Supported products** > **Required Scopes** # Fees API Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/fees/guide # Fee object definition Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/fees/object-definition # Search for fees Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/fees/search/search-fees specs/2026-09/crm-fees-v2026-09.json POST /crm/objects/2026-09/fees/search Realiza una búsqueda de objetos del CRM de un tipo específico usando varios filtros y criterios. Este punto de conexión te permite recuperar objetos basándose en propiedades y condiciones específicas, lo que te da flexibilidad al consultar tus datos del CRM. > **Supported products** > **Required Scopes** # Update a fee Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/fees/update-fee specs/2026-09/crm-fees-v2026-09.json PATCH /crm/objects/2026-09/fees/{feeId} Realiza una actualización parcial de un objeto identificado por "{objectId}". "{objectId}" se refiere al ID interno del objeto, por opción predeterminada, u opcionalmente a cualquier valor de propiedad único según lo especificado por el parámetro de consulta "idProperty". Se sobrescribirán los valores de propiedad especificados. Se ignorarán las propiedades de solo lectura y las no existentes. Los valores de las propiedades pueden borrarse pasando una cadena vacía. > **Supported products** > **Required Scopes** # Retrieve a forecast type Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/forecasts/forecast-types/get-forecast-type specs/2026-09/crm-forecast-types-v2026-09.json GET /forecast-settings/2026-09/forecast-types/{forecastTypeId} Obtén un tipo de previsión específico por su ID de la cuenta de HubSpot. Este punto de terminación es útil para acceder a información detallada sobre un tipo de previsión en particular, que define las propiedades usadas en los cálculos de previsión. > **Supported products** # Retrieve forecast types Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/forecasts/forecast-types/get-forecast-types specs/2026-09/crm-forecast-types-v2026-09.json GET /forecast-settings/2026-09/forecast-types Devuelve todos los tipos de previsiones configurados para el portal. Los tipos de previsiones definen qué propiedades se usan para calcular las previsiones. Este punto de terminación es útil para recuperar las diferentes configuraciones de previsiones disponibles en tu cuenta de HubSpot, lo que te permite entender cómo se generan las previsiones según varias propiedades. > **Supported products** # Forecasts API Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/forecasts/guide # Search for forecasts Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/forecasts/search/search-forecasts specs/2026-09/crm-forecasts-v2026-09.json POST /crm/objects/2026-09/{objectType}/search Busca previsiones existentes en tu cuenta de HubSpot. Este punto de terminación te permite filtrar y ordenar objetos según varios criterios, lo que te da una forma flexible de obtener datos específicos. Es útil para encontrar objetos que coincidan con ciertas propiedades o condiciones. > **Supported products** > **Required Scopes** # Create goal targets Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/goals/batch/create-goal-targets specs/2026-09/crm-goal-targets-v2026-09.json POST /crm/objects/2026-09/goal_targets/batch/create Crear múltiples metas en una sola operación por lotes. > **Supported products** > **Required Scopes** # Delete goal targets Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/goals/batch/delete-goal-targets specs/2026-09/crm-goal-targets-v2026-09.json POST /crm/objects/2026-09/goal_targets/batch/archive Archivar múltiples metas en una sola operación por lotes utilizando sus ID. > **Supported products** > **Required Scopes** # Retrieve goal targets Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/goals/batch/get-goal-targets specs/2026-09/crm-goal-targets-v2026-09.json POST /crm/objects/2026-09/goal_targets/batch/read Recupera registros por ID de registro o incluye el parámetro `idProperty` para recuperar registros por propiedad de valor único personalizada. > **Supported products** > **Required Scopes** # Update goal targets Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/goals/batch/update-goal-targets specs/2026-09/crm-goal-targets-v2026-09.json POST /crm/objects/2026-09/goal_targets/batch/update Actualizar múltiples metas en una sola operación por lotes utilizando sus ID internos o valores de propiedades únicos. > **Supported products** > **Required Scopes** # Create or update a batch of goal targets by unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/goals/batch/upsert-goal-targets specs/2026-09/crm-goal-targets-v2026-09.json POST /crm/objects/2026-09/goal_targets/batch/upsert Crea o actualiza registros identificados por un valor único de propiedad según lo especificado por el parámetro de consulta `idProperty`. El parámetro de consulta `idProperty` se refiere a una propiedad cuyos valores son únicos para el objeto. > **Supported products** > **Required Scopes** # Create a goal target Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/goals/create-goal-target specs/2026-09/crm-goal-targets-v2026-09.json POST /crm/objects/2026-09/goal_targets Crea un objetivo de meta con las propiedades dadas y devuelve una copia del objeto, incluyendo el ID. Se proporciona documentación y ejemplos para crear objetivos de meta estándar. > **Supported products** > **Required Scopes** # Delete a goal target Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/goals/delete-goal-target specs/2026-09/crm-goal-targets-v2026-09.json DELETE /crm/objects/2026-09/goal_targets/{goalTargetId} Mueve un objeto identificado por `{goalTargetId}` a la papelera de reciclaje. > **Supported products** > **Required Scopes** # Retrieve goal target Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/goals/get-goal-target specs/2026-09/crm-goal-targets-v2026-09.json GET /crm/objects/2026-09/goal_targets/{goalTargetId} Lee un objeto identificado por `{goalTargetId}`. `{goalTargetId}` se refiere al ID de objeto interno por opción predeterminada o, de manera opcional, a cualquier valor de propiedad único especificado por el parámetro de consulta `idProperty`. Controla lo que se devuelve mediante el parámetro de consulta `properties`. > **Supported products** > **Required Scopes** # Retrieve goal targets Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/goals/get-goal-targets specs/2026-09/crm-goal-targets-v2026-09.json GET /crm/objects/2026-09/goal_targets Lee una página de objetivos de meta. Controla lo que se devuelve a través del parámetro de consulta `properties`. > **Supported products** > **Required Scopes** # Goals API Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/goals/guide # Goal object definition Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/goals/object-definition # Search for goal targets Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/goals/search/search-goal-targets specs/2026-09/crm-goal-targets-v2026-09.json POST /crm/objects/2026-09/goal_targets/search Buscar metas utilizando los criterios especificados. > **Supported products** > **Required Scopes** # Update a goal target Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/goals/update-goal-target specs/2026-09/crm-goal-targets-v2026-09.json PATCH /crm/objects/2026-09/goal_targets/{goalTargetId} Realiza una actualización parcial de un objeto identificado por `{goalTargetId}` o, de manera opcional, a cualquier valor de propiedad único según lo especificado por el parámetro de consulta `idProperty`. `{goalTargetId}` se refiere al ID de objeto interno de manera predeterminada y el parámetro de consulta `idProperty` se refiere a una propiedad cuyos valores son únicos para el objeto. Se sobrescribirán los valores de propiedad especificados. Las propiedades de solo lectura y las no existentes generarán un error. Los valores de las propiedades pueden borrarse pasando una cadena vacía. > **Supported products** > **Required Scopes** # Update Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/goals/update-goal-target-objectId specs/2026-09/crm-goal-targets-v2026-09.json PATCH /crm/objects/2026-09/goal_targets/{goalTargetId} Realiza una actualización parcial de un objeto identificado por `{goalTargetId}` o, de manera opcional, a cualquier valor de propiedad único según lo especificado por el parámetro de consulta `idProperty`. `{goalTargetId}` se refiere al ID de objeto interno de manera predeterminada y el parámetro de consulta `idProperty` se refiere a una propiedad cuyos valores son únicos para el objeto. Se sobrescribirán los valores de propiedad especificados. Las propiedades de solo lectura y las no existentes generarán un error. Los valores de las propiedades pueden borrarse pasando una cadena vacía. > **Supported products** > **Required Scopes** # Create a batch of invoices Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/invoices/batch/create-invoices specs/2026-09/crm-invoices-v2026-09.json POST /crm/objects/2026-09/invoices/batch/create Crea un lote de objetos del CRM con propiedades específicas y obtén los objetos creados, incluidos sus ID. Este punto de conexión es útil para agregar varios objetos a tu CRM en una sola solicitud. > **Supported products** > **Required Scopes** # Archive a batch of invoices by ID Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/invoices/batch/delete-invoices specs/2026-09/crm-invoices-v2026-09.json POST /crm/objects/2026-09/invoices/batch/archive Archiva un lote de objetos del CRM por sus ID. Este punto de conexión te permite mover varios objetos al archivo en una sola solicitud, lo que puede ser útil para gestionar grandes conjuntos de datos o realizar operaciones masivas de forma eficiente. > **Supported products** > **Required Scopes** # Read a batch of invoices by internal ID, or unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/invoices/batch/get-invoices specs/2026-09/crm-invoices-v2026-09.json POST /crm/objects/2026-09/invoices/batch/read Lee un lote de objetos del CRM por sus ID internos o valores de propiedad únicos. Este punto de conexión es útil para recuperar varios objetos en una sola solicitud, lo que puede ser más eficiente que hacer solicitudes individuales para cada objeto. La respuesta incluye los detalles de los objetos, y puedes especificar si quieres incluir objetos archivados. > **Supported products** > **Required Scopes** # Update a batch of invoices by internal ID, or unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/invoices/batch/update-invoices specs/2026-09/crm-invoices-v2026-09.json POST /crm/objects/2026-09/invoices/batch/update Actualiza un lote de objetos del CRM en tu cuenta de HubSpot. Este punto de terminación permite modificar varios objetos a la vez al proporcionar sus detalles en el cuerpo de la solicitud. Es útil para hacer actualizaciones masivas de manera eficiente. La respuesta incluye el estado de cada operación de actualización y cualquier error que se encuentre durante el proceso. > **Supported products** > **Required Scopes** # Create or update a batch of invoices by unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/invoices/batch/upsert-invoices specs/2026-09/crm-invoices-v2026-09.json POST /crm/objects/2026-09/invoices/batch/upsert Crea o actualiza un lote de objetos del CRM por sus valores de propiedad únicos en tu cuenta de HubSpot. Esta operación te permite gestionar eficientemente múltiples objetos a la vez y garantiza que los objetos existentes se actualicen y se creen nuevos según sea necesario. > **Supported products** > **Required Scopes** # Create Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/invoices/create-invoice specs/2026-09/crm-invoices-v2026-09.json POST /crm/objects/2026-09/invoices Crea un objeto del CRM con las propiedades especificadas y devuelve una copia del objeto, incluyendo su ID. Este punto de conexión es útil para agregar nuevos objetos al sistema del CRM, lo que permite definir propiedades durante la creación. La respuesta incluye los detalles del objeto recién creado. > **Supported products** > **Required Scopes** # Archive Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/invoices/delete-invoice specs/2026-09/crm-invoices-v2026-09.json DELETE /crm/objects/2026-09/invoices/{invoiceId} Mueve un objeto identificado por `{objectId}` a la papelera de reciclaje. Esta operación permite archivar un objeto específico del CRM para dejarlo inactivo, pero sin eliminarlo permanentemente del sistema. > **Supported products** > **Required Scopes** # Read Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/invoices/get-invoice specs/2026-09/crm-invoices-v2026-09.json GET /crm/objects/2026-09/invoices/{invoiceId} Lee un objeto identificado por `objectId`. El `objectId` se refiere al ID de objeto interno por opción predeterminada o, de manera opcional, a cualquier valor de propiedad único especificado por el parámetro de consulta `idProperty`. Controla lo que se devuelve mediante el parámetro de consulta `properties`. > **Supported products** > **Required Scopes** # List Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/invoices/get-invoices specs/2026-09/crm-invoices-v2026-09.json GET /crm/objects/2026-09/invoices Lee una página de objetos de un tipo específico en tu cuenta de HubSpot. Puedes controlar los datos que se devuelven especificando qué propiedades incluir con el parámetro de consulta `properties`. Este punto de conexión admite la paginación y puede devolver registros archivados si se especifica. > **Supported products** > **Required Scopes** # Invoices API Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/invoices/guide # Invoice object definition Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/invoices/object-definition # Search for invoices using specified criteria. Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/invoices/search/search-invoices specs/2026-09/crm-invoices-v2026-09.json POST /crm/objects/2026-09/invoices/search Busca objetos del CRM de un tipo específico usando los criterios de búsqueda proporcionados. Este punto de conexión te permite especificar filtros, ordenación y propiedades que se devolverán en los resultados de la búsqueda. Es útil para oobtener objetos específicos basados en consultas complejas. > **Supported products** > **Required Scopes** # Update Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/invoices/update-invoice specs/2026-09/crm-invoices-v2026-09.json PATCH /crm/objects/2026-09/invoices/{invoiceId} Realizar una actualización parcial de un objeto identificado por "objectId". El "objectId" se refiere al ID interno del objeto por opción predeterminada, u opcionalmente a cualquier valor de propiedad único según lo especificado por el parámetro de consulta "idProperty". Los valores de propiedad proporcionados se sobrescribirán, mientras que las propiedades de solo lectura y las no existentes se ignorarán. Las propiedades se pueden borrar pasando una cadena vacía. > **Supported products** > **Required Scopes** # Update Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/invoices/update-invoice-objectId specs/2026-09/crm-invoices-v2026-09.json PATCH /crm/objects/2026-09/invoices/{invoiceId} Realizar una actualización parcial de un objeto identificado por "objectId". El "objectId" se refiere al ID interno del objeto por opción predeterminada, u opcionalmente a cualquier valor de propiedad único según lo especificado por el parámetro de consulta "idProperty". Los valores de propiedad proporcionados se sobrescribirán, mientras que las propiedades de solo lectura y las no existentes se ignorarán. Las propiedades se pueden borrar pasando una cadena vacía. > **Supported products** > **Required Scopes** # Create a batch of leads Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/leads/batch/create-leads specs/2026-09/crm-leads-v2026-09.json POST /crm/objects/2026-09/leads/batch/create Crea varios registros de leads en una sola solicitud proporcionando un lote de datos de leads. Este punto de terminación permite crear leads de manera eficiente al procesarlos juntos, lo que puede ser útil para sincronizar datos de otros sistemas o importar grandes conjuntos de datos. > **Supported products** > **Required Scopes** # Archive a batch of leads by ID Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/leads/batch/delete-leads specs/2026-09/crm-leads-v2026-09.json POST /crm/objects/2026-09/leads/batch/archive Archiva varios leads por sus ID en una sola solicitud y muévelos a la papelera de reciclaje. > **Supported products** > **Required Scopes** # Read a batch of leads by internal ID, or unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/leads/batch/get-leads specs/2026-09/crm-leads-v2026-09.json POST /crm/objects/2026-09/leads/batch/read Recupera registros por ID de registro o incluye el parámetro `idProperty` para recuperar registros por propiedad de valor único personalizada. > **Supported products** > **Required Scopes** # Update a batch of leads by internal ID, or unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/leads/batch/update-leads specs/2026-09/crm-leads-v2026-09.json POST /crm/objects/2026-09/leads/batch/update Actualizar varios registros de leads usando sus ID internos o valores de propiedad únicos. Este punto de terminación permite el procesamiento por lotes de actualizaciones, donde las propiedades de cada lead pueden modificarse en función de la entrada proporcionada. Asegúrate de que las propiedades que se están actualizando existan en los objetos de leads para evitar errores. > **Supported products** > **Required Scopes** # Create or update a batch of leads by unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/leads/batch/upsert-leads specs/2026-09/crm-leads-v2026-09.json POST /crm/objects/2026-09/leads/batch/upsert Crea o actualiza registros identificados por un valor único de propiedad según lo especificado por el parámetro de consulta `idProperty`. El parámetro de consulta `idProperty` se refiere a una propiedad cuyos valores son únicos para el objeto. > **Supported products** > **Required Scopes** # Create Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/leads/create-lead specs/2026-09/crm-leads-v2026-09.json POST /crm/objects/2026-09/leads Crea un lead con las propiedades dadas y devuelve una copia del objeto, incluyendo el ID. Se proporciona documentación y ejemplos para crear leads estándar. > **Supported products** > **Required Scopes** # Archive Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/leads/delete-lead specs/2026-09/crm-leads-v2026-09.json DELETE /crm/objects/2026-09/leads/{leadsId} Mueve un objeto identificado por `{leadsId}` a la papelera de reciclaje. > **Supported products** > **Required Scopes** # Read Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/leads/get-lead specs/2026-09/crm-leads-v2026-09.json GET /crm/objects/2026-09/leads/{leadsId} Lee un objeto identificado por `{leadsId}`. `{leadsId}` se refiere al ID de objeto interno por opción predeterminada o, de manera opcional, a cualquier valor de propiedad único especificado por el parámetro de consulta `idProperty`. Controla lo que se devuelve mediante el parámetro de consulta `properties`. > **Supported products** > **Required Scopes** # List Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/leads/get-leads specs/2026-09/crm-leads-v2026-09.json GET /crm/objects/2026-09/leads Lee una página de leads. Controla lo que se devuelve a través del parámetro de consulta `properties`. > **Supported products** > **Required Scopes** # Leads API Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/leads/guide # Lead object definition Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/leads/object-definition # Search for leads Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/leads/search/search-leads specs/2026-09/crm-leads-v2026-09.json POST /crm/objects/2026-09/leads/search Realiza una búsqueda de leads según los grupos de filtros, las propiedades y las opciones de clasificación proporcionadas. La solicitud permite la paginación y puede devolver hasta 200 resultados por página. > **Supported products** > **Required Scopes** # Update Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/leads/update-lead specs/2026-09/crm-leads-v2026-09.json PATCH /crm/objects/2026-09/leads/{leadsId} Realiza una actualización parcial de un objeto identificado por `{leadsId}` o, de manera opcional, a cualquier valor de propiedad único según lo especificado por el parámetro de consulta `idProperty`. `{leadsId}` se refiere al ID de objeto interno de manera predeterminada y el parámetro de consulta `idProperty` se refiere a una propiedad cuyos valores son únicos para el objeto. Se sobrescribirán los valores de propiedad especificados. Las propiedades de solo lectura y las no existentes generarán un error. Los valores de las propiedades pueden borrarse pasando una cadena vacía. > **Supported products** > **Required Scopes** # Create a batch of line items Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/line-items/batch/create-line-items specs/2026-09/crm-line-items-v2026-09.json POST /crm/objects/2026-09/line_items/batch/create Crea un lote de objetos del CRM de un tipo específico en tu cuenta de HubSpot. Este punto de terminación te permite crear varios objetos en una sola solicitud, lo que puede ser útil para importar datos de manera eficiente o para sincronizar con sistemas externos. La respuesta incluirá los detalles de los objetos creados, incluyendo sus ID. > **Supported products** > **Required Scopes** # Archive a batch of line items by ID Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/line-items/batch/delete-line-items specs/2026-09/crm-line-items-v2026-09.json POST /crm/objects/2026-09/line_items/batch/archive Archiva un lote de objetos del CRM por sus ID. Este punto de terminación permite mover varios objetos de un tipo específico a la papelera de reciclaje en una sola solicitud, lo que puede ser útil para la gestión masiva de datos y las operaciones de limpieza. > **Supported products** > **Required Scopes** # Read a batch of line items by internal ID, or unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/line-items/batch/get-line-items specs/2026-09/crm-line-items-v2026-09.json POST /crm/objects/2026-09/line_items/batch/read Recupera un lote de objetos del CRM por sus ID internos o valores de propiedad únicos. Este punto de terminación permite especificar qué propiedades e historiales de propiedades devolver para cada objeto. Admite filtrar los resultados para incluir solo objetos archivados si es necesario. > **Supported products** > **Required Scopes** # Update a batch of line items by internal ID, or unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/line-items/batch/update-line-items specs/2026-09/crm-line-items-v2026-09.json POST /crm/objects/2026-09/line_items/batch/update Actualiza un lote de objetos del CRM en tu cuenta de HubSpot. Este punto de terminación te permite modificar varios objetos simultáneamente al proporcionar sus propiedades actualizadas. Es útil para actualizaciones masivas donde los cambios deben aplicarse a varios registros a la vez. > **Supported products** > **Required Scopes** # Create or update a batch of line items by unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/line-items/batch/upsert-line-items specs/2026-09/crm-line-items-v2026-09.json POST /crm/objects/2026-09/line_items/batch/upsert Crea o actualiza un lote de objetos del CRM por sus valores de propiedad únicos. Este punto de terminación permite gestionar eficientemente múltiples objetos en una sola solicitud, lo que garantiza que los objetos existentes se actualicen y se creen otros nuevos según sea necesario. > **Supported products** > **Required Scopes** # Create Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/line-items/create-line-item specs/2026-09/crm-line-items-v2026-09.json POST /crm/objects/2026-09/line_items Crea un objeto del CRM con las propiedades especificadas y obtener una copia del objeto, incluyendo su ID. Este punto de terminación te permite crear objetos estándar en tu cuenta de HubSpot y proporciona documentación y ejemplos para el proceso. > **Supported products** > **Required Scopes** # Archive Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/line-items/delete-line-item specs/2026-09/crm-line-items-v2026-09.json DELETE /crm/objects/2026-09/line_items/{lineItemId} Mueve un objeto identificado por `{objectId}` a la papelera de reciclaje. Esta operación te permite archivar un objeto del CRM específico para eliminarlo de su uso activo, pero conservando la opción de restaurarlo más tarde si es necesario. > **Supported products** > **Required Scopes** # Read Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/line-items/get-line-item specs/2026-09/crm-line-items-v2026-09.json GET /crm/objects/2026-09/line_items/{lineItemId} Lee un objeto identificado por `objectId` en tu cuenta de HubSpot. Por opción predeterminada, `objectId` se refiere al ID de objeto interno, pero puedes especificar una propiedad única usando el parámetro de consulta `idProperty`. Usa el parámetro de consulta `properties` para controlar qué propiedades se devuelven en la respuesta. > **Supported products** > **Required Scopes** # List Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/line-items/get-line-items specs/2026-09/crm-line-items-v2026-09.json GET /crm/objects/2026-09/line_items Lee una página de objetos de un tipo específico en tu cuenta de HubSpot. Puedes controlar los datos que se devuelven especificando las propiedades deseadas a través de parámetros de consulta. Este punto de terminación es útil para recuperar una lista de objetos del CRM, como contactos o negocios, con filtrado y paginación opcionales. > **Supported products** > **Required Scopes** # API del CRM | Elementos de pedido Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/line-items/guide > **[Run in Postman](https://app.getpostman.com/run-collection/c6e6832eb67946d66554)** > **Requisitos de ámbito** En HubSpot, los elementos de pedido son instancias individuales de los [productos](/docs/api-reference/crm-products-v3/guide). Cuando un producto está adjunto a un negocio, se convierte en un elemento de pedido. Puedes crear elementos de pedido únicos para una cotización individual, pero no se agregarán a tu biblioteca de productos. Los endpoints de elementos de pedido permiten gestionar estos datos y sincronizarlos entre HubSpot y otros sistemas. **Ejemplo de uso:** al crear un conjunto de [cotizaciones](/docs/api-reference/crm-quotes-v3/guide) para que los representantes de ventas las envíen a compradores potenciales, puedes usar esta API para crear elementos de pedido independientes por cotización, así como elementos de pedido que se adjuntan a productos existentes. ## Permisos necesarios Dependiendo de los endpoints que pienses utilizar, tendrás que autorizar los siguientes permisos: * `crm.objects.line_items.read`: proporciona acceso para recuperar datos de elementos de pedido. * `crm.objects.line_items.write`: proporciona acceso para crear y actualizar elementos de pedido. * `tax_rates.read`: proporciona acceso para recuperar los datos de las tasas de impuestos que hayas configurado en tu cuenta. ## Crear un elemento de pedido Para crear un elemento de pedido, haz una solicitud `POST` a `/crm/v3/objects/line_items`. En el cuerpo de la solicitud, incluye los detalles del elemento de pedido, como su nombre, la cantidad y el precio. También puedes incluir datos adicionales en el cuerpo de la solicitud: * Para crear un elemento de pedido basado en un producto existente (creado a través de la [API de productos](/docs/api-reference/crm-products-v3/guide) o [n HubSpot](https://knowledge.hubspot.com/es/products/create-and-manage-products)), incluye `hs_product_id` en el cuerpo de la solicitud. * Para incluir la [tasa de impuestos](#retrieve-tax-rates) de tu elemento de pedido, incluye su ID como `hs_tax_rate_group_id` en el campo `properties` del cuerpo de la solicitud. * También puedes asociar el elemento de pedido con negocios, cotizaciones, facturas, enlaces de pago o suscripciones, incluyendo una matriz de `associations` en el cuerpo de la solicitud. Por ejemplo, el cuerpo de la siguiente solicitud crearía un elemento de pedido llamado "New standalone line item" (Nuevo elemento de pedido independiente) que está asociado con un negocio (ID: `12345`). ```js theme={null} { "properties": { "price": 10, "quantity": 1, "name": "New standalone line item", "hs_tax_rate_group_id": "2148420997" }, "associations": [ { "to": { "id": 12345 }, "types": [ { "associationCategory": "HUBSPOT_DEFINED", "associationTypeId": 20 } ] } ] } ``` > [!WARNING] > > ### Nota: > > * Los elementos de pedido pertenecen a un único objeto principal. Si se asocian objetos, los elementos de pedido deben ser individuales para cada objeto. Por ejemplo, si estás creando un negocio y una cotización, debes crear un conjunto de elementos de pedido para el negocio y otro conjunto para la cotización. Esto ayudará a agilizar los datos del CRM en todos los objetos y evitará la pérdida inesperada de datos cuando se necesite modificar los elementos de pedido (por ejemplo, eliminar una cotización eliminará los elementos de pedido de la cotización, y si esos elementos de pedido están asociados con un negocio, los elementos de pedido de los negocios también se eliminarán). > * El valor `price` especificado dentro del campo `properties` no puede ser negativo. > * La propiedad *Plazo* de los elementos de pedido (`hs_recurring_billing_period`) acepta los [formatos de período ISO-8601](https://docs.oracle.com/javase/8/docs/api/java/time/Period.html) de PnYnMnD y PnW. ## Obtener un elemento de pedido Puedes obtener elementos de pedido de forma individual o en bloque. * Para obtener un elemento de pedido específico, haz una solicitud `GET` a `/crm/v3/objects/line_items/{lineItemId}`, donde `lineItemId` es el ID del elemento de pedido. * Para obtener todos los elementos de pedido, haz una solicitud `GET` a `/crm/v3/objects/line_items`. En la URL de la solicitud, puedes incluir los siguientes parámetros: | Parámetro | Descripción | | - | - | | `properties` | Una lista separada con comas de las propiedades que se devolverán en la respuesta. Si alguna de las propiedades especificadas no está presente en los objetos solicitados, se ignorará. | | `propertiesWithHistory` | Una lista separada por comas de las propiedades que se devolverán junto con su historial de valores anteriores. Si alguna de las propiedades especificadas no está presente en los objetos solicitados, se ignorará. | ## Actualizar un elemento de pedido Para actualizar un elemento de pedido, haz una solicitud `PATCH` a `/crm/v3/objects/line_items/{lineItemId}`, donde `lineItemId` es el ID del elemento de pedido. En el cuerpo de la solicitud, incluye los valores de propiedad que quieres actualizar. No puedes actualizar asociaciones con este método. En su lugar, deberás usar la [API de asociaciones](/docs/api-reference/crm-associations-v4/guide). Por ejemplo, el cuerpo de la solicitud puede tener un aspecto similar al siguiente: ```js theme={null} { "properties": { "price": 25, "quantity": 3, "name": "Updated line item" } } ``` ## Eliminar un elemento de pedido Para eliminar un elemento de pedido, haz una solicitud `DELETE` a `/crm/v3/objects/line_items/{lineItemId}`, donde `lineItemId` es el ID del elemento de pedido. ## Propiedades de los elementos de pedido Al gestionar los datos de los elementos de pedido, puede que quieras usar algunas de las propiedades comunes de esta tabla. Para obtener todas las propiedades de los elementos de pedido, haz una solicitud `GET` a `/crm/v3/properties/line_item`. Consulta más información sobre el uso de la [API de propiedades](/docs/api-reference/crm-properties-v3/guide). | Nombre de la propiedad | Etiqueta en la interfaz de usuario | Descripción | | - | - | - | | `name` | Nombre | El nombre del elemento de pedido. | | `description` | Descripción | Descripción completa del producto | | `hs_sku` | SKU | Identificador único del producto | | `hs_recurring_billing_start_date` | Fecha de inicio de la facturación | Facturación recurrente de un elemento de pedido | | `hs_recurring_billing_end_date` | Fecha de finalización de la facturación | Facturación recurrente de un elemento de pedido | | `recurringbillingfrequency` | Frecuencia de facturación | Con qué frecuencia se factura un elemento de pedido con facturación periódica. Indica el cálculo de precios para negocios y cotizaciones. Los elementos de pedido con facturación única no están incluidos. | | `quantity` | Cantidad | Cuántas unidades de un producto hay en este elemento de pedido | | `price` | Precio unitario | El coste del producto | | `amount` | Precio neto | El coste total del elemento de pedido (es decir, la cantidad multiplicada por el precio unitario). | | `hs_line_item_currency_code` | Divisa | Código de la divisa del elemento de pedido | ## Recuperar tasas de impuestos Puedes aplicar una tasa de impuestos a elementos de pedido individuales (por ejemplo, un impuesto sobre las ventas de MA del 6,26%). Una vez que hayas [configurado tu biblioteca de tasas de impuestos](https://knowledge.hubspot.com/es/payments/set-up-automated-tax-and-tax-rates#add-a-tax-rate-to-the-tax-library) en tu cuenta de HubSpot, puedes hacer una solicitud `GET` a `/tax-rates/v1/tax-rates` para obtener todos las tasas de impuestos, o a `/tax-rates/v1/tax-rates/{taxRateId}` para obtener una tasa de impuestos por su ID. Tu aplicación tendrá que autorizar el permiso `tax_rates.read` para realizar esta solicitud. La respuesta tendrá el siguiente formato: ```json theme={null} { "name": "MA Sales tax 2025", "percentageRate": 6.25 "label": "Sales Tax", "active": true, "id": "2148420997", "createdAt": "2024-12-12T23:20:39.923Z", "updatedAt": "2024-12-12T23:20:39.923Z" } ``` Cada objeto de tasas de impuestos incluirá las siguientes propiedades: | Tipo de propiedad | Descripción | | - | - | | `name` | El descriptor interno de la tasa de impuestos. | | `percentageRate` | El valor de la tasa de impuestos, expresado en porcentaje. | | `label` | El descriptor de la tasa de impuestos orientado al comprador, que se muestra en la cotización, factura u otros objetos padre. | | `active` | Un booleano que indica si la tasa de impuestos puede aplicarse a una nueva cotización o factura. Puedes ajustarlo a `false` para una tasa de impuestos de un año anterior que ya no es aplicable. | | `id` | El ID de la tasa de impuestos. | | `createdAt` | Una marca de tiempo ISO 8601 que indica cuándo se creó la tasa de impuestos. | | `updatedAt` | Una marca de tiempo ISO 8601 que indica cuándo se actualizó por última vez la tasa de impuestos. | Una vez que tengas el ID de la tasa de impuestos que quieres aplicar, proporciona ese `id` para el `hs_tax_rate_group_id` dentro del campo `properties` al crear un elemento de pedido. Más información sobre la creación de elementos de pedido en la [sección anterior](#create-a-line-item). # Line item object definition Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/line-items/object-definition # Search for line items using specified criteria. Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/line-items/search/search-line-items specs/2026-09/crm-line-items-v2026-09.json POST /crm/objects/2026-09/line_items/search Busca objetos del CRM de un tipo específico usando varios filtros y criterios. Este punto de terminación permite hacer búsquedas complejas y recuperar objetos que coincidan con las condiciones especificadas. Es útil para encontrar registros específicos basados en valores de propiedades u otros atributos. > **Supported products** > **Required Scopes** # Update Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/line-items/update-line-item specs/2026-09/crm-line-items-v2026-09.json PATCH /crm/objects/2026-09/line_items/{lineItemId} Realiza una actualización parcial de un objeto identificado por "{objectId}". "{objectId}" se refiere al ID interno del objeto, por opción predeterminada, u opcionalmente a cualquier valor de propiedad único según lo especificado por el parámetro de consulta "idProperty". Se sobrescribirán los valores de propiedad especificados. Se ignorarán las propiedades de solo lectura y las no existentes. Los valores de las propiedades pueden borrarse pasando una cadena vacía. > **Supported products** > **Required Scopes** # Create a batch of listings Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/listings/batch/create-listings specs/2026-09/crm-listings-v2026-09.json POST /crm/objects/2026-09/0-420/batch/create Crea un lote de objetos del CRM para un tipo de objeto específico en HubSpot. Este punto de terminación te permite crear varios objetos en una sola solicitud, lo que puede ser útil para agregar grandes cantidades de datos de forma eficiente. La respuesta incluirá los objetos creados, cada uno con su ID único. > **Supported products** > **Required Scopes** # Archive a batch of listings by ID Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/listings/batch/delete-listings specs/2026-09/crm-listings-v2026-09.json POST /crm/objects/2026-09/0-420/batch/archive Archiva un lote de objetos del CRM por sus ID. Este punto de terminación es útil para mover varios objetos a la papelera de reciclaje en una sola solicitud, lo que agiliza el proceso de gestionar grandes conjuntos de datos. > **Supported products** > **Required Scopes** # Read a batch of listings by internal ID, or unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/listings/batch/get-listings specs/2026-09/crm-listings-v2026-09.json POST /crm/objects/2026-09/0-420/batch/read Lee un lote de objetos del CRM por sus ID internos o valores de propiedad únicos. Este punto de terminación te permite recuperar varios objetos en una sola solicitud, lo que puede ser útil para gestionar grandes conjuntos de datos de manera eficiente. Puedes especificar si quieres incluir objetos archivados en los resultados. > **Supported products** > **Required Scopes** # Update a batch of listings by internal ID, or unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/listings/batch/update-listings specs/2026-09/crm-listings-v2026-09.json POST /crm/objects/2026-09/0-420/batch/update Actualiza un lote de objetos del CRM en tu cuenta de HubSpot. Este punto de terminación te permite modificar varios objetos a la vez, lo que agiliza el proceso de actualización de datos. Devuelve un estado que indica el éxito o el fracaso de la operación, y puede manejar éxitos parciales con información detallada de errores si algunas actualizaciones fallan. > **Supported products** > **Required Scopes** # Create or update a batch of listings by unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/listings/batch/upsert-listings specs/2026-09/crm-listings-v2026-09.json POST /crm/objects/2026-09/0-420/batch/upsert Crea o actualiza un lote de objetos del CRM por valores de propiedad únicos. Este punto de terminación te permite gestionar eficientemente múltiples objetos en una sola solicitud, asegurando que los objetos se creen o actualicen según sus identificadores únicos. > **Supported products** > **Required Scopes** # Create Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/listings/create-listing specs/2026-09/crm-listings-v2026-09.json POST /crm/objects/2026-09/0-420 Crea un objeto del CRM con las propiedades especificadas y devuelve una copia del objeto, incluyendo su ID. Este punto de terminación permite crear objetos estándar en tu sistema del CRM, proporcionando documentación y ejemplos para guiarte. > **Supported products** > **Required Scopes** # Archive Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/listings/delete-listing specs/2026-09/crm-listings-v2026-09.json DELETE /crm/objects/2026-09/0-420/{listingId} Mueve un objeto identificado por `{objectId}` a la papelera de reciclaje. Esta operación te permite archivar un objeto específico del CRM por su identificador único para eliminarlo de su uso activo, pero reteniéndolo en el sistema para una posible recuperación o referencia. > **Supported products** > **Required Scopes** # Read Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/listings/get-listing specs/2026-09/crm-listings-v2026-09.json GET /crm/objects/2026-09/0-420/{listingId} Lee un objeto identificado por `{objectId}`. Por defecto, `{objectId}` se refiere al ID de objeto interno, pero también puede referirse a cualquier valor de propiedad único especificado por el parámetro de consulta `idProperty`. Puedes controlar los datos devueltos usando el parámetro de consulta `properties`. Este punto de conexión es útil para obtener información detallada sobre un objeto específico, incluyendo sus propiedades y asociaciones. > **Supported products** > **Required Scopes** # List Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/listings/get-listings specs/2026-09/crm-listings-v2026-09.json GET /crm/objects/2026-09/0-420 Lee una página de objetos del CRM de un tipo específico. Puedes controlar los datos devueltos especificando las propiedades deseadas a través de los parámetros de consulta. Este punto de terminación admite la paginación y puede incluir valores de propiedades históricas y asociaciones si se solicita. > **Supported products** > **Required Scopes** # Listings API Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/listings/guide # Search for listings using various criteria and filters. Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/listings/search/search-listings specs/2026-09/crm-listings-v2026-09.json POST /crm/objects/2026-09/0-420/search Busca objetos del CRM de un tipo específico usando varios filtros y criterios. Este punto de terminación te permite realizar búsquedas complejas en objetos del CRM al especificar grupos de filtros, opciones de clasificación y propiedades para incluir en los resultados. Es útil para obtener conjuntos de datos específicos de tu CRM basados en condiciones de búsqueda detalladas. > **Supported products** > **Required Scopes** # Update Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/listings/update-listing specs/2026-09/crm-listings-v2026-09.json PATCH /crm/objects/2026-09/0-420/{listingId} Realizar una actualización parcial de un objeto identificado por "objectId". El "objectId" se refiere al ID interno del objeto por opción predeterminada, u opcionalmente a cualquier valor de propiedad único según lo especificado por el parámetro de consulta "idProperty". Los valores de propiedad proporcionados se sobrescribirán, mientras que las propiedades de solo lectura y las no existentes se ignorarán. Las propiedades se pueden borrar pasando una cadena vacía. > **Supported products** > **Required Scopes** # Update Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/listings/update-listing-objectId specs/2026-09/crm-listings-v2026-09.json PATCH /crm/objects/2026-09/0-420/{listingId} Realizar una actualización parcial de un objeto identificado por "objectId". El "objectId" se refiere al ID interno del objeto por opción predeterminada, u opcionalmente a cualquier valor de propiedad único según lo especificado por el parámetro de consulta "idProperty". Los valores de propiedad proporcionados se sobrescribirán, mientras que las propiedades de solo lectura y las no existentes se ignorarán. Las propiedades se pueden borrar pasando una cadena vacía. > **Supported products** > **Required Scopes** # Create tag Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/object-tags/create-object-tag specs/2026-09/crm-object-tags-v2026-09.json POST /crm/object-tags/2026-09/{objectTypeId} Crea una nueva etiqueta de objeto del CRM para un tipo de objeto específico en tu cuenta de HubSpot. Este punto de conexión te permite definir propiedades como el nombre, el color y los criterios del filtro para la etiqueta. Es útil para categorizar y organizar objetos del CRM según criterios personalizados. > **Supported products** > **Required Scopes** # Delete Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/object-tags/delete-object-tag specs/2026-09/crm-object-tags-v2026-09.json DELETE /crm/object-tags/2026-09/{objectTypeId}/{tagId} Elimina una etiqueta de objeto del CRM específica identificada por el ID de tipo de objeto y el ID de etiqueta. Esta operación eliminará la etiqueta del sistema y ya no estará disponible para su uso o referencia. > **Supported products** > **Required Scopes** # Retrieve Tag Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/object-tags/get-object-tag specs/2026-09/crm-object-tags-v2026-09.json GET /crm/object-tags/2026-09/{objectTypeId}/{tagId} Obtén una etiqueta específica de un objeto del CRM usando sus identificadores únicos. Este punto de conexión es útil para obtener detalles sobre una etiqueta específica asociada a un tipo de objeto del CRM, lo que puede ayudarte a gestionar o analizar datos etiquetados en tu cuenta de HubSpot. > **Supported products** > **Required Scopes** # Retrieve tags Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/object-tags/get-object-tags specs/2026-09/crm-object-tags-v2026-09.json GET /crm/object-tags/2026-09/{objectTypeId} Obtén las etiquetas de objetos del CRM para un tipo de objeto específico en tu cuenta de HubSpot. Este punto de conexión te permite acceder a las etiquetas asociadas con un tipo de objeto en particular, lo que puede ser útil para categorizar y gestionar los datos del CRM de forma eficaz. > **Supported products** > **Required Scopes** # Object Tags API Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/object-tags/guide # Update tag (Partial) Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/object-tags/partially-update-object-tag specs/2026-09/crm-object-tags-v2026-09.json PATCH /crm/object-tags/2026-09/{objectTypeId}/{tagId} Actualiza una etiqueta de objeto del CRM existente en tu cuenta de HubSpot. Este punto de conexión te permite modificar las propiedades de una etiqueta específica identificada por su tagId y objectTypeId. Usar esto para cambiar atributos de la etiqueta como el color, la descripción o los filtros asociados. > **Supported products** > **Required Scopes** # Update tag (Replace) Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/object-tags/update-object-tag specs/2026-09/crm-object-tags-v2026-09.json PUT /crm/object-tags/2026-09/{objectTypeId}/{tagId} Actualiza una etiqueta de objeto del CRM existente en tu cuenta de HubSpot. Esta operación te permite modificar las propiedades de una etiqueta identificada por su objectTypeId y tagId. Usa este punto de conexión para cambiar detalles de la etiqueta como el nombre, el color y los filtros asociados. > **Supported products** > **Required Scopes** # Create a batch of objects Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/objects/batch/create-objects specs/2026-09/crm-objects-v2026-09.json POST /crm/objects/2026-09/{objectType}/batch/create > **Supported products** > **Required Scopes** # Archive a batch of objects by ID Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/objects/batch/delete-objects specs/2026-09/crm-objects-v2026-09.json POST /crm/objects/2026-09/{objectType}/batch/archive > **Supported products** > **Required Scopes** # Read a batch of objects by internal ID, or unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/objects/batch/get-objects specs/2026-09/crm-objects-v2026-09.json POST /crm/objects/2026-09/{objectType}/batch/read Retrieve records by record ID or include the `idProperty` parameter to retrieve records by a custom unique value property. > **Supported products** > **Required Scopes** # Update a batch of objects by internal ID, or unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/objects/batch/update-objects specs/2026-09/crm-objects-v2026-09.json POST /crm/objects/2026-09/{objectType}/batch/update > **Supported products** > **Required Scopes** # Create or update a batch of objects by unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/objects/batch/upsert-objects specs/2026-09/crm-objects-v2026-09.json POST /crm/objects/2026-09/{objectType}/batch/upsert Create or update records identified by a unique property value as specified by the `idProperty` query param. `idProperty` query param refers to a property whose values are unique for the object. > **Supported products** > **Required Scopes** # Create Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/objects/create-object specs/2026-09/crm-objects-v2026-09.json POST /crm/objects/2026-09/{objectType} Create a CRM object with the given properties and return a copy of the object, including the ID. Documentation and examples for creating standard objects is provided. > **Supported products** > **Required Scopes** # Archive Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/objects/delete-object specs/2026-09/crm-objects-v2026-09.json DELETE /crm/objects/2026-09/{objectType}/{objectId} Move an Object identified by `{objectId}` to the recycling bin. > **Supported products** > **Required Scopes** # Read Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/objects/get-object specs/2026-09/crm-objects-v2026-09.json GET /crm/objects/2026-09/{objectType}/{objectId} Read an Object identified by `{objectId}`. `{objectId}` refers to the internal object ID by default, or optionally any unique property value as specified by the `idProperty` query param. Control what is returned via the `properties` query param. > **Supported products** > **Required Scopes** # List Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/objects/get-objects specs/2026-09/crm-objects-v2026-09.json GET /crm/objects/2026-09/{objectType} Read a page of objects. Control what is returned via the `properties` query param. > **Supported products** > **Required Scopes** # Search records Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/objects/search/search-objects specs/2026-09/crm-objects-v2026-09.json POST /crm/objects/2026-09/{objectType}/search > **Supported products** > **Required Scopes** # Update Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/objects/update-object specs/2026-09/crm-objects-v2026-09.json PATCH /crm/objects/2026-09/{objectType}/{objectId} Perform a partial update of an Object identified by `{objectId}`or optionally a unique property value as specified by the `idProperty` query param. `{objectId}` refers to the internal object ID by default, and the `idProperty` query param refers to a property whose values are unique for the object. Provided property values will be overwritten. Read-only and non-existent properties will result in an error. Properties values can be cleared by passing an empty string. > **Supported products** > **Required Scopes** # Create a batch of orders Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/orders/batch/create-orders specs/2026-09/crm-orders-v2026-09.json POST /crm/objects/2026-09/orders/batch/create Crea un lote de objetos del CRM de un tipo específico en tu cuenta de HubSpot. Este punto de terminación te permite crear varios objetos en una sola solicitud, lo que puede ser útil para importaciones masivas de datos o para sincronizar datos de sistemas externos. La respuesta incluirá los objetos creados junto con sus ID. > **Supported products** > **Required Scopes** # Archive a batch of orders by ID Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/orders/batch/delete-orders specs/2026-09/crm-orders-v2026-09.json POST /crm/objects/2026-09/orders/batch/archive Archiva un lote de objetos del CRM identificados por sus ID. Esta operación mueve los objetos especificados a la papelera de reciclaje y los archiva de forma efectiva. Es útil para gestionar grandes conjuntos de objetos que necesitan archivarse simultáneamente. > **Supported products** > **Required Scopes** # Read a batch of orders by internal ID, or unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/orders/batch/get-orders specs/2026-09/crm-orders-v2026-09.json POST /crm/objects/2026-09/orders/batch/read Obtén un lote de objetos del CRM por sus ID internos o valores de propiedad únicos. Este punto de conexión es útil para obtener varios objetos en una sola solicitud, lo que puede mejorar el rendimiento y reducir el número de llamadas a la API necesarias. La respuesta puede incluir objetos archivados si se especifica. > **Supported products** > **Required Scopes** # Update a batch of orders by internal ID, or unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/orders/batch/update-orders specs/2026-09/crm-orders-v2026-09.json POST /crm/objects/2026-09/orders/batch/update Actualiza un lote de objetos del CRM especificados por su tipo. Este punto de conexión te permite modificar varios objetos en una sola solicitud, lo que garantiza actualizaciones eficientes de tus datos del CRM. El cuerpo de la solicitud debe incluir los objetos que se van a actualizar junto con sus propiedades. > **Supported products** > **Required Scopes** # Create or update a batch of orders by unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/orders/batch/upsert-orders specs/2026-09/crm-orders-v2026-09.json POST /crm/objects/2026-09/orders/batch/upsert Crea o actualiza un lote de objetos del CRM basándose en valores de propiedades únicos. Este punto de conexión permite gestionar de forma eficiente grandes conjuntos de objetos, ya sea creando nuevas entradas o actualizando las existentes en una sola solicitud. Es especialmente útil para sincronizar datos de sistemas externos con HubSpot. > **Supported products** > **Required Scopes** # Create Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/orders/create-order specs/2026-09/crm-orders-v2026-09.json POST /crm/objects/2026-09/orders Crea un objeto de CRM con las propiedades dadas y devuelve una copia del objeto, incluyendo el ID. Se proporciona documentación y ejemplos para crear objetos estándar. > **Supported products** > **Required Scopes** # Archive Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/orders/delete-order specs/2026-09/crm-orders-v2026-09.json DELETE /crm/objects/2026-09/orders/{orderId} Mueve un objeto identificado por `{objectId}` a la papelera de reciclaje. Esta operación te permite archivar un objeto específico del CRM por su tipo e identificador único para eliminarlo de su uso activo, pero conservando la opción de restaurarlo más tarde si es necesario. > **Supported products** > **Required Scopes** # Read Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/orders/get-order specs/2026-09/crm-orders-v2026-09.json GET /crm/objects/2026-09/orders/{orderId} Lee un objeto identificado por `objectId`. Por opción predeterminada, `objectId` se refiere al ID de objeto interno, pero puede ser cualquier valor de propiedad único especificado por el parámetro de consulta `idProperty`. Puedes controlar el contenido de la respuesta usando el parámetro de consulta `properties`. > **Supported products** > **Required Scopes** # List Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/orders/get-orders specs/2026-09/crm-orders-v2026-09.json GET /crm/objects/2026-09/orders Lee una página de objetos de un tipo específico en tu cuenta de HubSpot. Puedes controlar los datos que se devuelven especificando propiedades, asociaciones y el estado de archivado a través de los parámetros de consulta. Este punto de conexión admite la paginación para navegar por grandes conjuntos de objetos. > **Supported products** > **Required Scopes** # Orders API Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/orders/guide # Merge two orders Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/orders/merge/merge-orders specs/2026-09/crm-orders-v2026-09.json POST /crm/objects/2026-09/orders/merge Fusiona dos objetos del CRM del mismo tipo en tu cuenta de HubSpot. Esta operación combina las propiedades y asociaciones de los objetos especificados en un solo objeto, identificado por el id del objeto principal. Usa este punto de conexión para consolidar registros duplicados o unificar datos. > **Supported products** > **Required Scopes** # Order object definition Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/orders/object-definition # Update Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/orders/update-order specs/2026-09/crm-orders-v2026-09.json PATCH /crm/objects/2026-09/orders/{orderId} Realiza una actualización parcial de un objeto identificado por `{objectId}`. El `{objectId}` se refiere al ID interno del objeto por opción predeterminada, u opcionalmente a cualquier valor de propiedad único según lo especificado por el parámetro de consulta `idProperty`. Los valores de propiedad proporcionados se sobrescribirán, mientras que las propiedades de solo lectura y las no existentes se ignorarán. Las propiedades se pueden borrar pasando una cadena vacía. > **Supported products** > **Required Scopes** # Update Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/orders/update-order-objectId specs/2026-09/crm-orders-v2026-09.json PATCH /crm/objects/2026-09/orders/{orderId} Realiza una actualización parcial de un objeto identificado por `{objectId}`. El `{objectId}` se refiere al ID interno del objeto por opción predeterminada, u opcionalmente a cualquier valor de propiedad único según lo especificado por el parámetro de consulta `idProperty`. Los valores de propiedad proporcionados se sobrescribirán, mientras que las propiedades de solo lectura y las no existentes se ignorarán. Las propiedades se pueden borrar pasando una cadena vacía. > **Supported products** > **Required Scopes** # Search for orders in the CRM using various filters and sorting options to retrieve specific order data. Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/orders/search/search-orders specs/2026-09/crm-orders-v2026-09.json POST /crm/objects/2026-09/orders/search Busca objetos del CRM de un tipo específico usando varios filtros y criterios. Este punto de conexión te permite obtener objetos basados en propiedades y condiciones específicas, lo que le da flexibilidad al consultar tus datos del CRM. Los resultados de la búsqueda incluyen el número total de objetos que coinciden con los criterios. > **Supported products** > **Required Scopes** # Retrieve a batch of partner client objects. Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/partner-clients/batch/get-partner-clients specs/2026-09/crm-partner-clients-v2026-09.json POST /crm/objects/2026-09/partner_clients/batch/read Obtén un lote de objetos del CRM por sus ID internos o valores de propiedad únicos. Este punto de conexión es útil para obtener varios objetos en una sola solicitud, lo que permite una recuperación eficiente de los datos. La respuesta incluye los detalles de los objetos y puedes especificar si se incluirán objetos archivados. > **Supported products** > **Required Scopes** # Retrieve a partner client Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/partner-clients/get-partner-client specs/2026-09/crm-partner-clients-v2026-09.json GET /crm/objects/2026-09/partner_clients/{partnerClientId} Lee un objeto identificado por `objectId`. Por opción predeterminada, `objectId` se refiere al ID de objeto interno, pero también puede referirse a cualquier valor de propiedad único especificado por el parámetro de consulta `idProperty`. Puedes controlar los datos devueltos especificando el parámetro de consulta `properties`. > **Supported products** > **Required Scopes** # Retrieve partner clients Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/partner-clients/get-partner-clients specs/2026-09/crm-partner-clients-v2026-09.json GET /crm/objects/2026-09/partner_clients Obtén una página de objetos del CRM de un tipo específico. Puedes controlar los datos que se devuelven especificando propiedades, asociaciones y si quieres incluir registros archivados. Este punto de conexión admite la paginación para navegar por grandes conjuntos de datos. > **Supported products** > **Required Scopes** # Search for partner clients Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/partner-clients/search/search-partner-clients specs/2026-09/crm-partner-clients-v2026-09.json POST /crm/objects/2026-09/partner_clients/search Busca objetos del CRM de un tipo específico usando varios filtros y criterios. Este punto de conexión te permite hacer consultas complejas para recuperar objetos del CRM basándose en propiedades o condiciones específicas. Es útil para encontrar objetos que cumplen ciertos criterios dentro de tu cuenta de HubSpot. > **Supported products** > **Required Scopes** # Update a partner client Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/partner-clients/update-partner-client specs/2026-09/crm-partner-clients-v2026-09.json PATCH /crm/objects/2026-09/partner_clients/{partnerClientId} Realiza una actualización parcial de un objeto identificado por "{objectId}". "{objectId}" se refiere al ID interno del objeto, por opción predeterminada, u opcionalmente a cualquier valor de propiedad único según lo especificado por el parámetro de consulta "idProperty". Se sobrescribirán los valores de propiedad especificados. Se ignorarán las propiedades de solo lectura y las no existentes. Los valores de las propiedades pueden borrarse pasando una cadena vacía. > **Supported products** > **Required Scopes** # Update properties of a specific partner client. Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/partner-clients/update-partner-client-objectId specs/2026-09/crm-partner-clients-v2026-09.json PATCH /crm/objects/2026-09/partner_clients/{partnerClientId} Realiza una actualización parcial de un objeto identificado por "{objectId}". "{objectId}" se refiere al ID interno del objeto, por opción predeterminada, u opcionalmente a cualquier valor de propiedad único según lo especificado por el parámetro de consulta "idProperty". Se sobrescribirán los valores de propiedad especificados. Se ignorarán las propiedades de solo lectura y las no existentes. Los valores de las propiedades pueden borrarse pasando una cadena vacía. > **Supported products** > **Required Scopes** # Read a batch of partner services by internal ID, or unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/partner-services/batch/get-partner-services specs/2026-09/crm-partner-services-v2026-09.json POST /crm/objects/2026-09/partner_services/batch/read Obtén un lote de objetos del CRM por sus ID internos o valores de propiedades únicos. Este punto de conexión es útil para obtener varios objetos en una sola solicitud, lo que permite una obtención eficiente de los datos. Se puede especificar si se quieren incluir objetos archivados en los resultados. > **Supported products** > **Required Scopes** # Update a batch of partner services by internal ID, or unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/partner-services/batch/update-partner-services specs/2026-09/crm-partner-services-v2026-09.json POST /crm/objects/2026-09/partner_services/batch/update Actualiza un lote de objetos de CRM en tu cuenta de HubSpot. Este punto de conexión te permite modificar varios objetos a la vez dando sus propiedades. Es útil para hacer actualizaciones masivas de datos del CRM de manera eficiente. La respuesta incluirá los objetos actualizados y cualquier error que se encuentre durante el proceso de actualización. > **Supported products** > **Required Scopes** # Read Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/partner-services/get-partner-service specs/2026-09/crm-partner-services-v2026-09.json GET /crm/objects/2026-09/partner_services/{partnerServiceId} Lee un objeto identificado por `{objectId}`. `{objectId}` se refiere al ID de objeto interno por opción predeterminada o, de manera opcional, a cualquier valor de propiedad único especificado por el parámetro de consulta `idProperty`. Controla lo que se devuelve mediante el parámetro de consulta `properties`. > **Supported products** > **Required Scopes** # List Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/partner-services/get-partner-services specs/2026-09/crm-partner-services-v2026-09.json GET /crm/objects/2026-09/partner_services Lee una página de objetos del CRM de un tipo específico. Puedes controlar los datos que se devuelven especificando las propiedades que quieres incluir en la respuesta. Este punto de conexión es útil para recuperar una lista de objetos con detalles específicos y admite la paginación para grandes conjuntos de datos. > **Supported products** > **Required Scopes** # Search for partner services using specified criteria. Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/partner-services/search/search-partner-services specs/2026-09/crm-partner-services-v2026-09.json POST /crm/objects/2026-09/partner_services/search Haz una búsqueda de objetos del CRM de un tipo específico. Este punto de conexión te permite filtrar y recuperar objetos según varios criterios definidos en el cuerpo de la solicitud. Es útil para encontrar registros específicos o conjuntos de registros que coincidan con tus parámetros de búsqueda. > **Supported products** > **Required Scopes** # Update Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/partner-services/update-partner-service specs/2026-09/crm-partner-services-v2026-09.json PATCH /crm/objects/2026-09/partner_services/{partnerServiceId} Realiza una actualización parcial de un objeto identificado por "{objectId}". "{objectId}" se refiere al ID interno del objeto, por opción predeterminada, u opcionalmente a cualquier valor de propiedad único según lo especificado por el parámetro de consulta "idProperty". Se sobrescribirán los valores de propiedad especificados. Se ignorarán las propiedades de solo lectura y las no existentes. Los valores de las propiedades pueden borrarse pasando una cadena vacía. > **Supported products** > **Required Scopes** # Update Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/partner-services/update-partner-service-objectId specs/2026-09/crm-partner-services-v2026-09.json PATCH /crm/objects/2026-09/partner_services/{partnerServiceId} Realiza una actualización parcial de un objeto identificado por "{objectId}". "{objectId}" se refiere al ID interno del objeto, por opción predeterminada, u opcionalmente a cualquier valor de propiedad único según lo especificado por el parámetro de consulta "idProperty". Se sobrescribirán los valores de propiedad especificados. Se ignorarán las propiedades de solo lectura y las no existentes. Los valores de las propiedades pueden borrarse pasando una cadena vacía. > **Supported products** > **Required Scopes** # Batch retrieve price book items Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/price-book-items/batch/get-price-book-items specs/2026-09/crm-price-book-items-crm-reads-api-v2026-09.json POST /crm/objects/2026-09/{objectType}/batch/read Obtén un lote de objetos del CRM por sus ID internos o valores de propiedades únicos. Este punto de conexión es útil para obtener varios objetos en una sola solicitud, lo que permite una obtención eficiente de los datos. Se puede especificar si se quieren incluir objetos archivados en los resultados. > **Supported products** > **Required Scopes** # Retrieve a price book item Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/price-book-items/get-price-book-item specs/2026-09/crm-price-book-items-crm-reads-api-v2026-09.json GET /crm/objects/2026-09/{objectType}/{objectId} Lee un objeto identificado por `{objectId}`. `{objectId}` se refiere al ID de objeto interno por opción predeterminada o, de manera opcional, a cualquier valor de propiedad único especificado por el parámetro de consulta `idProperty`. Controla lo que se devuelve mediante el parámetro de consulta `properties`. > **Supported products** > **Required Scopes** # Retrieve price book items Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/price-book-items/get-price-book-items specs/2026-09/crm-price-book-items-crm-reads-api-v2026-09.json GET /crm/objects/2026-09/{objectType} Obtén una página de objetos del CRM de un tipo específico. Puedes controlar los datos que se devuelven especificando propiedades, asociaciones y si quieres incluir registros archivados. Este punto de conexión es útil para obtener una lista de objetos con atributos o asociaciones específicas. > **Supported products** > **Required Scopes** # Batch retrieve price books Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/price-books/batch/get-price-books specs/2026-09/crm-price-books-crm-reads-api-v2026-09.json POST /crm/objects/2026-09/{objectType}/batch/read Obtén un lote de objetos del CRM por sus ID internos o valores de propiedades únicos. Este punto de conexión permite especificar las propiedades y su historial para incluirlos en la respuesta. Es útil para obtener de forma eficiente los datos de varios objetos en una sola solicitud. > **Supported products** > **Required Scopes** # Retrieve a price book Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/price-books/get-price-book specs/2026-09/crm-price-books-crm-reads-api-v2026-09.json GET /crm/objects/2026-09/{objectType}/{objectId} Lee un objeto identificado por `{objectId}`. Por opción predeterminada, `{objectId}` se refiere al ID de objeto interno, pero puede especificar cualquier valor de propiedad único usando el parámetro de consulta `idProperty`. Use el parámetro de consulta `properties` para controlar qué propiedades se devuelven en la respuesta. > **Supported products** > **Required Scopes** # Retrieve price books Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/price-books/get-price-books specs/2026-09/crm-price-books-crm-reads-api-v2026-09.json GET /crm/objects/2026-09/{objectType} Lee una página de objetos de un tipo específico en tu cuenta de HubSpot. Puedes controlar los datos devueltos especificando propiedades, asociaciones y si quieres incluir registros archivados. Este punto de conexión permite la paginación mediante el uso de un token de cursor. > **Supported products** > **Required Scopes** # CRM API | Price books Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/price-books/guide # Create a batch of products Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/products/batch/create-products specs/2026-09/crm-products-v2026-09.json POST /crm/objects/2026-09/products/batch/create Crea un lote de objetos del CRM con las propiedades especificadas. Este punto de conexión permite crear varios objetos en una sola solicitud, lo que puede ser útil para importar grandes conjuntos de datos de manera eficiente o para sincronizar datos de sistemas externos. La respuesta incluye los objetos creados con sus ID. > **Supported products** > **Required Scopes** # Archive a batch of products by ID Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/products/batch/delete-products specs/2026-09/crm-products-v2026-09.json POST /crm/objects/2026-09/products/batch/archive Archiva un lote de objetos del CRM por sus ID. Este punto de conexión es útil para gestionar grandes conjuntos de objetos que necesitan archivarse simultáneamente. La operación no devuelve ningún contenido al completarse con éxito, lo que indica que los objetos se han archivado correctamente. > **Supported products** > **Required Scopes** # Read a batch of products by internal ID, or unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/products/batch/get-products specs/2026-09/crm-products-v2026-09.json POST /crm/objects/2026-09/products/batch/read Lee un lote de objetos del CRM por sus ID internos o valores de propiedades únicos. Este punto de conexión es útil para obtener varios objetos en una sola solicitud, lo que permite una obtención eficiente de los datos. Puedes especificar si quieres incluir objetos archivados en los resultados. > **Supported products** > **Required Scopes** # Update a batch of products by internal ID, or unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/products/batch/update-products specs/2026-09/crm-products-v2026-09.json POST /crm/objects/2026-09/products/batch/update Actualiza un lote de objetos del CRM en tu cuenta de HubSpot. Este punto de conexión te permite actualizar varios objetos de un tipo específico al proporcionar sus propiedades en el cuerpo de la solicitud. Es útil para hacer actualizaciones masivas de objetos sin tener que actualizarlos individualmente. > **Supported products** > **Required Scopes** # Create or update a batch of products by unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/products/batch/upsert-products specs/2026-09/crm-products-v2026-09.json POST /crm/objects/2026-09/products/batch/upsert Crea o actualiza un lote de objetos del CRM por valores de propiedad únicos. Este punto de conexión permite una gestión eficiente de múltiples objetos en una sola solicitud, asegurando que cada objeto se cree o actualice según sus identificadores únicos. > **Supported products** > **Required Scopes** # Create Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/products/create-product specs/2026-09/crm-products-v2026-09.json POST /crm/objects/2026-09/products Crea un objeto del CRM con las propiedades especificadas y devuelve una copia del objeto, incluyendo su ID. Este punto de terminación te permite crear objetos estándar en tu cuenta de HubSpot, proporcionando documentación y ejemplos para guiarte. > **Supported products** > **Required Scopes** # Archive Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/products/delete-product specs/2026-09/crm-products-v2026-09.json DELETE /crm/objects/2026-09/products/{productId} Mueve un objeto identificado por `{objectId}` a la papelera de reciclaje. Esta operación te permite archivar un objeto específico del CRM por su identificador único para eliminarlo de su uso activo, pero reteniéndolo en el sistema para una posible recuperación o fines de auditoría. > **Supported products** > **Required Scopes** # Read Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/products/get-product specs/2026-09/crm-products-v2026-09.json GET /crm/objects/2026-09/products/{productId} Lee un objeto identificado por `objectId`. El `objectId` se refiere al ID de objeto interno por opción predeterminada, o, de forma opcional, a cualquier valor de propiedad único especificado por el parámetro de consulta `idProperty`. Puedes controlar el contenido de la respuesta especificando las propiedades deseadas con el parámetro de consulta `properties`. > **Supported products** > **Required Scopes** # List Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/products/get-products specs/2026-09/crm-products-v2026-09.json GET /crm/objects/2026-09/products Obtén una página de objetos del CRM de un tipo específico. Puedes controlar los datos que se devuelven especificando ciertas propiedades, asociaciones y si quieres incluir registros archivados. Este punto de conexión es útil para obtener una lista de objetos con atributos y asociaciones específicas. > **Supported products** > **Required Scopes** # API del CRM | Productos Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/products/guide > **[Run in Postman](https://app.getpostman.com/run-collection/b4ad6241d1138c449a57)** > **Requisitos de ámbito** # Productos En HubSpot, los productos representan los bienes o servicios que vendes. Crear una [biblioteca de productos](https://knowledge.hubspot.com/es/products/create-and-manage-products) te permite agregar rápidamente productos a los negocios, generar cotizaciones y generar informes sobre el rendimiento del producto. Los endpoints de los productos te permiten administrar estos datos y sincronizarlos entre HubSpot y otros sistemas. Los productos, junto con las empresas, los contactos, los negocios, los tickets, los elementos de pedido y las cotizaciones, son objetos en el CRM de HubSpot. Descubre más sobre las propiedades de los objetos, las asociaciones, las relaciones y otros temas en nuestra guía [Comprender los objetos de CRM](/docs/guides/crm/understanding-the-crm). **Ejemplo de uso:** usa la API de productos para importar tu catálogo de productos a HubSpot, así los representantes de ventas podrán agregar fácilmente bienes y servicios a los negocios y las cotizaciones, entre otros. ## Crear un producto Para crear un producto, haz una solicitud `POST` a `crm/v3/objects/products`. En el cuerpo de la solicitud, incluye un objeto `properties` que contenga las propiedades del producto que quieras establecer. Más tarde podrás actualizar las propiedades de un producto mediante una solicitud `PATCH` al mismo endpoint. Para ver todas las propiedades disponibles para el producto, haz una solicitud `GET` a la [API de propiedades](/docs/api-reference/crm-properties-v3/guide). Para recuperar las propiedades del producto, la URL de la solicitud será `/crm/v3/properties/products`. ```json theme={null} { "properties": { "name": "Implementation Service", "price": "6000.00", "hs_sku": "123456", "description": "Onboarding service for data product", "hs_cost_of_goods_sold": "600.00", "hs_recurring_billing_period": "P12M" } } ``` > [!NOTE] > > Ten en cuenta que el valor `hs_recurring_billing_period` tiene el formato `P#M`, donde # es el número de meses. ## Asociar productos Los productos en sí no se pueden asociar con otros objetos del CRM. Sin embargo, para asociar la información de un producto con un negocio o cotización, puedes crear un [elemento de pedido](/docs/api-reference/crm-line-items-v3/guide) basado en ese producto. Los elementos de pedido son instancias individuales de los productos y constituyen un objeto separado para que puedas adaptar los bienes y servicios en un negocio o cotización según sea necesario sin necesidad de cambiar el producto en sí. Por ejemplo, si estás definiendo un negocio en el que se vende uno de tus productos, primero debes crear un elemento de pedido a partir del producto y después lo debes asociar con el negocio. Puedes hacerlo mediante dos llamadas independientes o con una llamada para crear y asociar el elemento de pedido. Ambas opciones se muestran a continuación. > [!WARNING] > > ### Nota: > > Los elementos de pedido pertenecen a un único objeto principal. Si se asocian objetos, los elementos de pedido deben ser individuales para cada objeto. Por ejemplo, si estás creando un negocio y una cotización, debes crear un conjunto de elementos de pedido para el negocio y otro conjunto para la cotización. Esto permitirá organizar los datos del CRM en todos los objetos y evitará la pérdida inesperada de datos cuando sea necesario modificar elementos de pedido. Por ejemplo, al eliminar una cotización también se eliminarán los elementos de pedido de la cotización. Si esos elementos también están asociados con un negocio, los elementos de pedido del negocio también se eliminarán. ### Crear y asociar un elemento de pedido (varias llamadas) Primero, debes crear un elemento de pedido basado en un producto con el ID `1234567`. Para obtener una lista completa de las propiedades disponibles de los elementos de pedido, haz una solicitud `GET` a la [API de propiedades](/docs/api-reference/crm-properties-v3/guide). La URL de los elementos de pedido sería `crm/v3/properties/line_items`. Debido a que el elemento de pedido se crea a partir de un producto existente, heredará los valores de las propiedades del producto, como el precio. ```json theme={null} { "properties": { "quantity": 1, "hs_object_id": "1234567", //the object ID of the product "name": "New line item (product-based)" } } ``` La respuesta será un ID de elemento de pedido que puedes usar para asociarlo con un negocio utilizando la [API de asociaciones](/docs/api-reference/crm-associations-v4/guide). Para este ejemplo, supongamos que el ID del elemento de pedido en la respuesta es `7791176460`. Para asociar el elemento de pedido con un negocio existente (ID: `14795354663`), debes hacer una solicitud `PUT` a `/crm/v4/objects/line_items/7791176460/associations/default/deals/14795354663`. Esta solicitud utiliza el tipo de asociación predeterminado. Una respuesta `200` tendrá información similar a lo siguiente: ```json theme={null} { "status": "COMPLETE", "results": [ { "from": { "id": "14795354663" }, "to": { "id": "7791176460" }, "associationSpec": { "associationCategory": "HUBSPOT_DEFINED", "associationTypeId": 19 } }, { "from": { "id": "7791176460" }, "to": { "id": "14795354663" }, "associationSpec": { "associationCategory": "HUBSPOT_DEFINED", "associationTypeId": 20 } } ], "startedAt": "2023-12-21T20:06:52.083Z", "completedAt": "2023-12-21T20:06:52.192Z" } ``` En HubSpot, el registro de negocio mostrará el elemento de pedido en la tarjeta *Elementos de pedido*. ![deal-record-line-item-association](https://www.hubspot.es/hubfs/Knowledge_Base_2023/deal-record-line-item-association.png) ### Crear y asociar un elemento de pedido (llamada única) Para crear un elemento de pedido a partir de un producto existente y asociarlo con un negocio mediante una sola llamada, puedes incluir una matriz `associations` en la solicitud de creación del elemento de pedido. Para crear el elemento de pedido, haz una solicitud `POST` a `crm/v3/objects/line_item`. El cuerpo de la solicitud será similar a lo que se ve abajo. Ten en cuenta que la etiqueta `associationTypeId` para la asociación del elemento de pedido del negocio es `20`. Obtén más información sobre los tipos de [asociación entre diferentes tipos de registros del CRM](/docs/api-reference/crm-associations-v4/guide#association-type-id-values). ```json theme={null} { "properties": { "quantity": 1, "hs_object_id": "1234567", //the object ID of the product "name": "New line item (product-based)" }, "associations": [ { "to": { "id": "14795354663" }, "types": [ { "associationCategory": "HUBSPOT_DEFINED", "associationTypeId": 20 } ] } ] } ``` Una respuesta `200` tendrá detalles sobre el nuevo elemento de pedido. En HubSpot, el registro de negocio mostrará el elemento de pedido en la tarjeta *Elementos de pedido*. ![deal-record-line-item-association](https://www.hubspot.es/hubfs/Knowledge_Base_2023/deal-record-line-item-association.png) # Product object definition Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/products/object-definition # Search for products using specified criteria. Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/products/search/search-products specs/2026-09/crm-products-v2026-09.json POST /crm/objects/2026-09/products/search Busca objetos del CRM de un tipo específico usando varios filtros y criterios. Este punto de conexión permite recuperar una colección de objetos basándose en los parámetros de búsqueda definidos en el cuerpo de la solicitud. Es útil para encontrar registros específicos que coincidan con ciertas condiciones dentro de tu cuenta de HubSpot. > **Supported products** > **Required Scopes** # Update Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/products/update-product specs/2026-09/crm-products-v2026-09.json PATCH /crm/objects/2026-09/products/{productId} Realiza una actualización parcial de un objeto identificado por "{objectId}". "{objectId}" se refiere al ID interno del objeto, por opción predeterminada, u opcionalmente a cualquier valor de propiedad único según lo especificado por el parámetro de consulta "idProperty". Se sobrescribirán los valores de propiedad especificados. Se ignorarán las propiedades de solo lectura y las no existentes. Los valores de las propiedades pueden borrarse pasando una cadena vacía. > **Supported products** > **Required Scopes** # Create a batch of projects Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/projects/batch/create-projects specs/2026-09/crm-projects-v2026-09.json POST /crm/objects/2026-09/projects/batch/create Crea un lote de objetos del CRM con propiedades específicas en HubSpot. Este punto de terminación te permite crear varios objetos en una sola solicitud, lo que lo hace eficiente para operaciones masivas. La respuesta incluye los objetos creados junto con sus ID. Utiliza este punto de terminación para optimizar la creación de grandes conjuntos de datos dentro de tu CRM. > **Supported products** > **Required Scopes** # Archive a batch of projects Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/projects/batch/delete-projects specs/2026-09/crm-projects-v2026-09.json POST /crm/objects/2026-09/projects/batch/archive Archiva un lote de objetos del CRM por sus ID. Esta operación mueve los objetos especificados a la papelera de reciclaje, archivándolos de forma efectiva. Usa este punto de terminación para gestionar grandes conjuntos de objetos que necesitan ser archivados simultáneamente. > **Supported products** > **Required Scopes** # Read a batch of projects Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/projects/batch/get-projects specs/2026-09/crm-projects-v2026-09.json POST /crm/objects/2026-09/projects/batch/read Lee un lote de objetos del CRM por sus ID internos o valores de propiedad únicos. Este punto de terminación permite recuperar varios objetos en una sola solicitud, lo que es útil para recopilar datos de manera eficiente sobre un conjunto de objetos. Puedes especificar si quieres incluir objetos archivados en los resultados. > **Supported products** > **Required Scopes** # Update a batch of projects Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/projects/batch/update-projects specs/2026-09/crm-projects-v2026-09.json POST /crm/objects/2026-09/projects/batch/update Actualiza un lote de objetos del CRM en tu cuenta de HubSpot. Este punto de terminación te permite modificar varios objetos a la vez al proporcionar sus detalles en el cuerpo de la solicitud. Es útil para actualizaciones masivas donde necesitas cambiar propiedades para varios objetos simultáneamente. La respuesta incluirá el estado de cada operación de actualización. > **Supported products** > **Required Scopes** # Create or update a batch of projects Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/projects/batch/upsert-projects specs/2026-09/crm-projects-v2026-09.json POST /crm/objects/2026-09/projects/batch/upsert Crea o actualiza un lote de objetos del CRM por sus valores de propiedad únicos. Este punto de terminación permite una gestión eficiente de múltiples objetos en una sola solicitud, asegurando que cada objeto se cree o actualice según los identificadores únicos proporcionados. > **Supported products** > **Required Scopes** # Create Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/projects/create-project specs/2026-09/crm-projects-v2026-09.json POST /crm/objects/2026-09/projects Crea un objeto del CRM con las propiedades especificadas y recibe una copia del objeto, incluido su ID. Este punto de terminación permite la creación de objetos estándar, con documentación y ejemplos para asistirte en el proceso. > **Supported products** > **Required Scopes** # Archive Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/projects/delete-project specs/2026-09/crm-projects-v2026-09.json DELETE /crm/objects/2026-09/projects/{projectId} Mueve un objeto identificado por `{objectId}` a la papelera de reciclaje. Esta operación te permite archivar un objeto específico del CRM para eliminarlo de su uso activo, pero reteniéndolo en el sistema para una posible recuperación o auditoría. > **Supported products** > **Required Scopes** # Read Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/projects/get-project specs/2026-09/crm-projects-v2026-09.json GET /crm/objects/2026-09/projects/{projectId} Lee un objeto identificado por `{objectId}`. `{objectId}` se refiere al ID de objeto interno por opción predeterminada o, de manera opcional, a cualquier valor de propiedad único especificado por el parámetro de consulta `idProperty`. Controla lo que se devuelve mediante el parámetro de consulta `properties`. > **Supported products** > **Required Scopes** # List Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/projects/get-projects specs/2026-09/crm-projects-v2026-09.json GET /crm/objects/2026-09/projects Lee una página de objetos del CRM de un tipo específico. Puedes controlar los datos que se devuelven especificando las propiedades que quieres incluir en la respuesta. Este punto de terminación admite la paginación y te permite recuperar los ID de objetos asociados y los registros archivados. > **Supported products** > **Required Scopes** # Projects API Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/projects/guide # Merge two projects Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/projects/merge-projects specs/2026-09/crm-projects-v2026-09.json POST /crm/objects/2026-09/projects/merge Fusiona dos objetos del CRM del mismo tipo en tu cuenta de HubSpot. Esta operación combina las propiedades de los objetos especificados en un solo objeto, conservando el ID del objeto principal. Usa este punto de terminación para consolidar registros duplicados o unificar datos en un solo objeto. > **Supported products** > **Required Scopes** # Search for projects Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/projects/search/search-projects specs/2026-09/crm-projects-v2026-09.json POST /crm/objects/2026-09/projects/search Busca objetos del CRM de un tipo específico usando varios filtros y criterios. Este punto de terminación permite hacer consultas complejas para encontrar objetos que coincidan con condiciones específicas. Devuelve una colección de objetos que cumplen los criterios de búsqueda, junto con el recuento total de resultados. > **Supported products** > **Required Scopes** # Update Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/projects/update-project specs/2026-09/crm-projects-v2026-09.json PATCH /crm/objects/2026-09/projects/{projectId} Realiza una actualización parcial de un objeto identificado por "{objectId}". "{objectId}" se refiere al ID interno del objeto, por opción predeterminada, u opcionalmente a cualquier valor de propiedad único según lo especificado por el parámetro de consulta "idProperty". Se sobrescribirán los valores de propiedad especificados. Se ignorarán las propiedades de solo lectura y las no existentes. Los valores de las propiedades pueden borrarse pasando una cadena vacía. > **Supported products** > **Required Scopes** # Create a batch of quotes Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/quotes/batch/create-quotes specs/2026-09/crm-quotes-v2026-09.json POST /crm/objects/2026-09/quotes/batch/create Para crear varias cotizaciones en una sola solicitud, proporciona un lote de objetos de cotización, cada uno con sus propias propiedades y asociaciones opcionales. > **Supported products** > **Required Scopes** # Archive a batch of quotes by ID Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/quotes/batch/delete-quotes specs/2026-09/crm-quotes-v2026-09.json POST /crm/objects/2026-09/quotes/batch/archive Archiva varias cotizaciones por sus ID en una sola solicitud, lo que permite moverlas efectivamente a la papelera de reciclaje. > **Supported products** > **Required Scopes** # Read a batch of quotes by internal ID, or unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/quotes/batch/get-quotes specs/2026-09/crm-quotes-v2026-09.json POST /crm/objects/2026-09/quotes/batch/read Recupera registros por ID de registro o incluye el parámetro `idProperty` para recuperar registros por propiedad de valor único personalizada. > **Supported products** > **Required Scopes** # Update a batch of quotes by internal ID, or unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/quotes/batch/update-quotes specs/2026-09/crm-quotes-v2026-09.json POST /crm/objects/2026-09/quotes/batch/update Para actualizar varias cotizaciones, usa sus ID internos o valores de propiedad únicos. Este punto de terminación permite el procesamiento por lotes de actualizaciones de cotizaciones, lo que garantiza una gestión eficiente de varios registros en una sola solicitud. > **Supported products** > **Required Scopes** # Create or update a batch of quotes by unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/quotes/batch/upsert-quotes specs/2026-09/crm-quotes-v2026-09.json POST /crm/objects/2026-09/quotes/batch/upsert Crea o actualiza registros identificados por un valor único de propiedad según lo especificado por el parámetro de consulta `idProperty`. El parámetro de consulta `idProperty` se refiere a una propiedad cuyos valores son únicos para el objeto. > **Supported products** > **Required Scopes** # Create Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/quotes/create-quote specs/2026-09/crm-quotes-v2026-09.json POST /crm/objects/2026-09/quotes Crea una cotización con las propiedades dadas y devuelve una copia del objeto, incluyendo el ID. Se proporciona documentación y ejemplos para crear cotizaciones estándar. > **Supported products** > **Required Scopes** # Archive Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/quotes/delete-quote specs/2026-09/crm-quotes-v2026-09.json DELETE /crm/objects/2026-09/quotes/{quoteId} Mueve un objeto identificado por `{quoteId}` a la papelera de reciclaje. > **Supported products** > **Required Scopes** # Read Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/quotes/get-quote specs/2026-09/crm-quotes-v2026-09.json GET /crm/objects/2026-09/quotes/{quoteId} Lee un objeto identificado por `{quoteId}`. `{quoteId}` se refiere al ID de objeto interno por opción predeterminada o, de manera opcional, a cualquier valor de propiedad único especificado por el parámetro de consulta `idProperty`. Controla lo que se devuelve mediante el parámetro de consulta `properties`. > **Supported products** > **Required Scopes** # List Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/quotes/get-quotes specs/2026-09/crm-quotes-v2026-09.json GET /crm/objects/2026-09/quotes Lee una página de cotizaciones. Controla lo que se devuelve a través del parámetro de consulta `properties`. > **Supported products** > **Required Scopes** # API de CRM | Cotizaciones Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/quotes/guide > **Requisitos de ámbito** Utiliza la API de cotizaciones para crear, gestionar y obtener cotizaciones de ventas, y así compartir información sobre precios con posibles compradores. Una vez configurada, una cotización se puede compartir con un comprador, ya sea en una URL especificada o a través de un PDF. Los usuarios también pueden [gestionar cotizaciones en HubSpot](https://knowledge.hubspot.com/es/quotes/set-up-legacy-quotes-legacy#manage-quotes) para agregar detalles, actualizar asociaciones y mucho más. Si has configurado los [pagos de HubSpot](https://knowledge.hubspot.com/es/payment-processing/set-up-payments) o el [procesamiento de pagos con Stripe](https://knowledge.hubspot.com/es/payment-processing/connect-your-stripe-account-as-a-payment-processor-in-hubspot), puedes configurar una cotización para que se pague a través de esta API. Obtén más información sobre las [cotizaciones por pagar](https://developers.hubspot.es/docs/api-reference/crm-quotes-v3/guide#enable-payments). ![example-quote-api](https://www.hubspot.es/hubfs/Knowledge_Base_2023/example-quote-api.png) **Ejemplo de uso:** necesitas crear una propuesta de contrato para un cliente interesado en adquirir uno de tus paquetes anuales de servicios de auditoría SEO. A continuación, aprende cómo crear una cotización a través de la API y configurar sus diversas propiedades, asociaciones, estados y mucho más. ## Resumen El proceso de creación de cotizaciones se puede dividir en los siguientes pasos: 1. **Crear una cotización:** crea una cotización con algunos detalles, como el nombre y la fecha de vencimiento. También puedes configurar la cotización para [habilitar las firmas electrónicas](https://developers.hubspot.es/docs/api-reference/crm-quotes-v3/guide#enable-e-signatures) y [los pagos](https://developers.hubspot.es/docs/api-reference/crm-quotes-v3/guide#enable-payments)[](https://knowledge.hubspot.com/es/quotes/use-e-signatures-with-quotes). 2. **Configurar asociaciones:** asocia la cotización con otros tipos de objetos del CRM, como elementos de pedido, plantillas de cotización, un negocio, entre otros. Durante el siguiente paso, la cotización heredará los valores de propiedad de algunos de estos registros asociados, así como la configuración de la cuenta. 3. **Establecer el estado de la cotización:** establece el estado de la cotización para que refleje que está lista para ser compartida con los compradores. Al establecer el estado de la cotización, como convertirla en un borrador editable o en una cotización publicada y accesible de forma pública, [heredará ciertas propiedades](#properties-set-by-quote-state) de los registros de CRM asociados y de la configuración de la cuenta. 4. **Compartir la cotización:** una vez que se ha publicado una cotización, puedes compartirla con tus compradores. ## Crear una cotización Para crear una cotización, primero debes configurar sus detalles básicos realizando una solicitud `POST` a `/crm/v3/objects/quotes`. Luego, deberás hacer una llamada separada para asociar la cotización con otros objetos, como la plantilla de cotización, los elementos de pedido o un negocio. > [!NOTE] > > Dependiendo de tu flujo de trabajo preferido, puedes [crear una cotización con asociaciones a través de una solicitud POST](#create-a-quote-with-associations-single-request). En el cuerpo de la solicitud, incluye las siguientes propiedades obligatorias para configurar los detalles básicos: ```json theme={null} { "properties": { "hs_title": "CustomerName - annual SEO audit", "hs_expiration_date": "2023-12-10" } } ``` | Parámetro | Tipo | Descripción | | - | - | - | | `hs_title` | Cadena | El nombre de la cotización. | | `hs_expiration_date` | Cadena | La fecha en la que vence la cotización. | Las anteriores son solo las propiedades mínimas requeridas para comenzar una cotización, pero se necesitan [otras propiedades](https://developers.hubspot.es/docs/api-reference/crm-quotes-v3/guide#adding-associations) para publicar una cotización. Para ver todas las propiedades disponibles para las cotizaciones, haz una solicitud `GET` a `crm/v3/properties/quotes`. Más información sobre la [API de propiedades](/docs/api-reference/crm-properties-v3/guide). La respuesta incluirá un `id`, que utilizarás para seguir configurando la cotización. Puedes actualizar las propiedades de la cotización en cualquier momento realizando una solicitud `PATCH` a `/crm/v3/objects/quotes/{quoteId}`. ### Propietario de la cotización Establecer la propiedad `hubspot_owner_id` manualmente no es posible debido a que es una propiedad calculada, y cualquier valor será anulado. Cuando se utilizan cotizaciones, la propiedad funciona del siguiente modo: * Si hay un [negocio asociado a la cotización](#adding-associations), la propiedad `hubspot_owner_id` reflejará la propiedad `hs_associated_deal_owner_id` (`hs_associated_deal_owner_id` es una propiedad calculada). * Si no hay una cotización asociada a un negocio, la propiedad `hubspot_owner_id` mostrará la propiedad `hs_quote_owner_id`. ### Habilitar firmas electrónicas Para habilitar las firmas electrónicas en la cotización, incluye la propiedad booleana `hs_esign_enabled` en el cuerpo de la solicitud con un valor de `true`. Ten en cuenta que no podrás agregar firmantes adicionales a través de la API, por lo que deberán agregarse en HubSpot antes de publicar la cotización. Tampoco puedes publicar una cotización con firma electrónica si has [excedido tu límite mensual de firmas electrónicas](https://knowledge.hubspot.com/es/quotes/use-e-signatures-with-quotes#monitor-e-signature-usage). ```json theme={null} { "properties": { "hs_title": "CustomerName - annual SEO audit", "hs_expiration_date": "2023-12-10", "hs_esign_enabled": "true" } } ``` Más adelante, podrás asociar la cotización con todos sus firmantes. Si bien los contactos que firman la cotización existen como contactos en HubSpot, se almacenan como un tipo de asociación independiente de los contactos. Más información sobre cómo [asociar cotizaciones con los firmantes de la cotización](#associating-quote-signers). ### Habilitar los pagos Para activar los pagos en una cotización, incluye la propiedad booleana `hs_payment_enabled` en el cuerpo de la solicitud con un valor de `true`. Dependiendo del procesador de pagos que utilices y de los métodos de pago aceptados, también tendrás que establecer `hs_payment_type` y `hs_allowed_payment_methods`. > [!WARNING] > > ### Nota: > > La cuenta de HubSpot debe tener configurados los [Pagos de HubSpot](https://knowledge.hubspot.com/es/payment-processing/set-up-payments) o el [Procesamiento de pagos con Stripe](https://knowledge.hubspot.com/es/payment-processing/connect-your-stripe-account-as-a-payment-processor-in-hubspot) antes de utilizar esta función. | Parámetro | Tipo | Descripción | | - | - | - | | `hs_payment_enabled` | Booleano | Cuando se establece como `true`, permite que la cotización pueda procesar el pago utilizando los pagos de HubSpot o el procesamiento de pagos con Stripe. Por opción predeterminada es `false`. | | `hs_payment_type` | Enumeración | Determina qué procesador de pagos se va a utilizar. El valor puede ser `HUBSPOT` o `BYO_STRIPE`. | | `hs_allowed_payment_methods` | Enumeración | Los métodos de pago que se utilizarán (por ejemplo, tarjeta de crédito). | | `hs_collect_billing_address` | Booleano | Cuando se establece como `true`, le permite al comprador introducir su dirección de facturación durante el proceso de pago. | | `hs_collect_shipping_address` | Booleano | Cuando se establece como `true`, le permite al comprador introducir su dirección de envío durante el proceso de pago. | Por ejemplo, para crear una cotización y habilitar los pagos de HubSpot con tarjeta de crédito, débito o ACH, tu solicitud sería la siguiente: ```json theme={null} { "properties": { "hs_title": "CustomerName - annual SEO audit", "hs_expiration_date": "2023-12-10", "hs_payment_enabled": "true", "hs_payment_type": "HUBSPOT", "hs_allowed_payment_methods": "CREDIT_OR_DEBIT_CARD;ACH" } } ``` Para hacer seguimiento del pago, HubSpot actualizará automáticamente las propiedades `hs_payment_status` y `hs_payment_date`: * Cuando publiques una cotización con los pagos habilitados, HubSpot establecerá automáticamente la propiedad `hs_payment_status` como `PENDING`. * Si utilizas ACH, cuando se procese el pago, HubSpot establecerá automáticamente la propiedad `hs_payment_status` a `PROCESSING`. * Cuando se confirme el pago, HubSpot establecerá automáticamente la propiedad `hs_payment_status` como `PAID`. * Una vez que se pague la cotización, HubSpot establecerá automáticamente `hs_payment_date` en la fecha y hora en que se confirmó el pago. * Una vez confirmado el pago, este se asocia automáticamente a la cotización. Si deseas obtener más información sobre los pagos, consulta la [API de pagos](/docs/api-reference/crm-commerce-payments-v3/guide). ## Agregar asociaciones Para crear una cotización completa, deberás asociarla con otros registros de CRM, como elementos de pedido, utilizando la [API de asociaciones](/docs/api-reference/crm-associations-v4/guide). La siguiente tabla muestra qué asociaciones de registros de CRM se requieren para que una cotización esté completa y cuáles son opcionales. Sigue leyendo para obtener más información sobre cómo buscar los ID de registros y usarlos para crear las asociaciones necesarias. | Tipo de objeto | Requerido | Descripción | | - | - | - | | [Elementos de pedido](https://developers.hubspot.es/docs/api-reference/crm-line-items-v3/guide) | Sí | Los bienes o servicios que se venden a través de la cotización. Puedes crear elementos de pedido a partir de los [productos de tu biblioteca de productos](https://developers.hubspot.es/docs/api-reference/crm-products-v3/guide) o crear elementos de pedido personalizados. | | [Plantilla de cotización](https://knowledge.hubspot.com/es/quotes/set-up-legacy-quotes-legacy) | Sí | La plantilla que representa la cotización, además de proporcionar algunos ajustes de configuración predeterminados para la cotización, como el idioma. Cada cotización se puede asociar con una plantilla. | | [Negocio](/docs/api-reference/crm-deals-v3/guide) | Sí | El registro del negocio para el seguimiento de los ingresos y el ciclo de vida de las ventas. Una cotización hereda los valores del negocio asociado, incluidos el usuario responsable y la divisa. Cada cotización se puede asociar a un negocio. | | [Contacto](/docs/api-reference/crm-contacts-v3/guide) | No | Compradores específicos a los que te estás dirigiendo en la cotización. | | [Empresa](/docs/api-reference/crm-companies-v3/guide) | No | Una empresa específica a la que te estás dirigiendo en la cotización. Cada cotización se puede asociar a una empresa. | | [Descuentos](/docs/api-reference/crm-discounts-v3/guide), [tarifas](/docs/api-reference/crm-fees-v3/guide) e [impuestos](/docs/api-reference/crm-taxes-v3/guide) | No | Todos los descuentos, tarifas e impuestos que se apliquen al momento de pagar. Al determinar la cantidad total de la cotización, HubSpot aplica primero los descuentos, seguidos de las tarifas y luego los impuestos. Puedes usar el campo `hs_sort_order` para reordenar los objetos del mismo tipo. Se pueden establecer en valores o porcentajes fijos en el campo `hs_type` en `FIXED` o en `PERCENT`. | ### Buscar ID para asociaciones Para realizar cada asociación, primero tendrás que buscar el ID de cada objeto que quieras asociar. Para obtenerr cada ID, debes realizar una solicitud `GET` al endpoiny del objeto correspondiente, el cual sigue el mismo patrón en cada objeto del CRM. Al realizar cada solicitud, también puedes incluir un parámetro de consulta de `properties` para obtener propiedades específicas cuando sea necesario. A continuación se muestran ejemplos de solicitudes `GET` para cada tipo de objeto. ```text hubl.txt theme={null} GET request for line items /crm/v3/objects/line_items?properties=name GET request for quote templates /crm/v3/objects/quote_template?properties=hs_name GET request for deals /crm/v3/objects/deals?properties=dealname GET request for contacts /crm/v3/objects/contacts?properties=email GET request for companies /crm/v3/objects/companies?properties=name GET request for discounts crm/v3/objects/discounts?properties=hs_type,hs_value GET request for fees crm/v3/objects/fees?properties=hs_type,hs_value GET request for taxes crm/v3/objects/taxes?properties=hs_type,hs_value ``` ```bash example.sh theme={null} #GET request for line items curl --request GET \ --url 'https://api.hubapi.com/crm/v3/properties/line_items?archived=false' \ --header 'authorization: Bearer YOUR_ACCESS_TOKEN' #GET request for quote templates curl --request GET \ --url 'https://api.hubapi.com/crm/v3/properties/quote_templates?archived=false' \ --header 'authorization: Bearer YOUR_ACCESS_TOKEN' #GET request for deals curl --request GET \ --url 'https://api.hubapi.com/crm/v3/properties/deals?archived=false' \ --header 'authorization: Bearer YOUR_ACCESS_TOKEN' #GET request for contacts curl --request GET \ --url 'https://api.hubapi.com/crm/v3/properties/contacts?archived=false' \ --header 'authorization: Bearer YOUR_ACCESS_TOKEN' #GET request for companies curl --request GET \ --url 'https://api.hubapi.com/crm/v3/properties/companies?archived=false' \ --header 'authorization: Bearer YOUR_ACCESS_TOKEN' #GET request for discounts curl --request GET \ --url 'https://api.hubapi.com/crm/v3/properties/discounts?archived=false' \ --header 'authorization: Bearer YOUR_ACCESS_TOKEN' #GET request for fees curl --request GET \ --url 'https://api.hubapi.com/crm/v3/properties/fees?archived=false' \ --header 'authorization: Bearer YOUR_ACCESS_TOKEN' #GET request for taxes curl --request GET \ --url 'https://api.hubapi.com/crm/v3/properties/taxes?archived=false' \ --header 'authorization: Bearer YOUR_ACCESS_TOKEN' ``` Cada llamada exitosa devolverá una respuesta `200` con detalles para cada tipo de objeto obtenido. Usarás el valor en el campo `id` para establecer asociaciones en el siguiente paso. ```json theme={null} { "results": [ { "id": "235425923863", "properties": { "hs_createdate": "2023-06-12T16:27:32.794Z", "hs_lastmodifieddate": "2023-06-12T16:27:32.794Z", "hs_name": "Default Basic", "hs_object_id": "235425923863" }, "createdAt": "2023-06-12T16:27:32.794Z", "updatedAt": "2023-06-12T16:27:32.794Z", "archived": false }, { "id": "235425923864", "properties": { "hs_createdate": "2023-06-12T16:27:32.794Z", "hs_lastmodifieddate": "2023-06-12T16:27:32.794Z", "hs_name": "Default Modern", "hs_object_id": "235425923864" }, "createdAt": "2023-06-12T16:27:32.794Z", "updatedAt": "2023-06-12T16:27:32.794Z", "archived": false }, { "id": "235425923865", "properties": { "hs_createdate": "2023-06-12T16:27:32.794Z", "hs_lastmodifieddate": "2023-06-12T16:27:32.794Z", "hs_name": "Default Original", "hs_object_id": "235425923865" }, "createdAt": "2023-06-12T16:27:32.794Z", "updatedAt": "2023-06-12T16:27:32.794Z", "archived": false } ] } ``` ### Crear asociaciones Una vez tengas los ID, ahora puedes realizar llamadas a la [API de asociaciones](/docs/api-reference/crm-associations-v4/guide) para crear las asociaciones. Para cada tipo de objeto que quieras asociar con una cotización, deberás realizar una llamada por separado haciendo una solicitud `PUT` utilizando la siguiente estructura de URL: `/crm/v4/objects/quotes/{fromObjectId}/associations/default/{toObjectType}/{toObjectId}` | Parámetro | Descripción | | - | - | | `fromObjectId` | El ID de la cotización. | | `toObjectType` | El tipo de objeto con el que se está asociando. Por ejemplo, `line_items`, `deals` y `quote_template`. | | `toObjectId` | El ID del objeto con el que asocias la cotización. | A continuación se muestran ejemplos de solicitudes `PUT` para cada tipo de objeto. ```text hubl.txt theme={null} PUT request to associate a line item /crm/v4/objects/quotes/{quoteId}/associations/default/line_items/{lineItemId} PUT request to associate a quote template /crm/v4/objects/quotes/{quoteId}/associations/default/quote_template/{quoteTemplateId} PUT request to associate a deal /crm/v4/objects/quotes/{quoteId}/associations/default/deals/{dealId} PUT request to associate contacts /crm/v4/objects/quotes/{quoteId}/associations/default/contacts/{contactId} PUT request to associate companies /crm/v4/objects/quotes/{quoteId}/associations/default/companies/{companyId} PUT request to associate discounts /crm/v4/objects/quotes/{quoteId}/associations/default/discounts/{discountId} PUT request to associate fees /crm/v4/objects/quotes/{quoteId}/associations/default/fees/{feeId} PUT request to associate taxes /crm/v4/objects/quotes/{quoteId}/associations/default/taxes/{taxId} ``` ```bash example.sh theme={null} #PUT request to associate line items curl --request PUT \ --url https://api.hubapi.com/crm/v4/objects/quotes/{quoteId}/associations/default/line_items/{lineItemId} \ --header 'authorization: Bearer YOUR_ACCESS_TOKEN' #PUT request to associate a quote template curl --request PUT \ --url https://api.hubapi.com/crm/v4/objects/quotes/{quote_ID}/associations/default/quote_template/{quoteTemplateId} \ --header 'authorization: Bearer YOUR_ACCESS_TOKEN' #PUT request to associate a deal curl --request PUT \ --url https://api.hubapi.com/crm/v4/objects/quotes/{quoteId}/associations/default/deals/{dealId} \ --header 'authorization: Bearer YOUR_ACCESS_TOKEN' #PUT request to associate contacts curl --request PUT \ --url https://api.hubapi.com/crm/v4/objects/quotes/{quoteId}/associations/default/contacts/{contactId} \ --header 'authorization: Bearer YOUR_ACCESS_TOKEN' #PUT request to associate a company curl --request PUT \ --url https://api.hubapi.com/crm/v4/objects/quotes/{quoteId}/associations/default/companies/{companyId} \ --header 'authorization: Bearer YOUR_ACCESS_TOKEN' #PUT request to associate discounts curl --request PUT \ --url https://api.hubapi.com/crm/v4/objects/quotes/{quoteId}/associations/default/discounts/{discountId} \ --header 'authorization: Bearer YOUR_ACCESS_TOKEN' #PUT request to associate fees curl --request PUT \ --url https://api.hubapi.com/crm/v4/objects/quotes/{quoteId}/associations/default/fees/{feeId} \ --header 'authorization: Bearer YOUR_ACCESS_TOKEN' #PUT request to associate taxes curl --request PUT \ --url https://api.hubapi.com/crm/v4/objects/quotes/{quoteId}/associations/default/line_items/{taxId} \ --header 'authorization: Bearer YOUR_ACCESS_TOKEN' ``` Por ejemplo, si tu cotización tiene el ID `123456`, las solicitudes para asociar la cotización podrían incluir lo siguiente: * **Elementos de pedido (ID: `55555`, `66666`):** * `/crm/v4/objects/quotes/123456/associations/default/line_items/55555` * `/crm/v4/objects/quotes/123456/associations/default/line_items/66666` * **Plantilla de cotización (ID:** `987654`**):** `/crm/v4/objects/quotes/123456/associations/default/quote_template/987654` * **Negocio (ID: `345345`):** `/crm/v4/objects/quotes/123456/associations/default/deals/345345` Cada asociación exitosa devolverá una respuesta `200` con detalles sobre la asociación. Las llamadas anteriores asociarán los objetos en ambas direcciones, con cada dirección teniendo su propio ID. Por ejemplo, si asocias la cotización con una plantilla de cotización, la respuesta describirá la asociación desde ambos lados. En la respuesta del ejemplo a continuación, `286` es el ID del tipo de asociación de cotización a la plantilla de cotización, y `285` es el ID del tipo de asociación de la plantilla de cotización a cotización. ```json theme={null} { "status": "COMPLETE", "results": [ { "from": { "id": "115045534742" }, "to": { "id": "102848290" }, "associationSpec": { "associationCategory": "HUBSPOT_DEFINED", "associationTypeId": 285 } }, { "from": { "id": "102848290" }, "to": { "id": "115045534742" }, "associationSpec": { "associationCategory": "HUBSPOT_DEFINED", "associationTypeId": 286 } } ], "startedAt": "2023-10-12T16:48:40.624Z", "completedAt": "2023-10-12T16:48:40.712Z" } ``` > [!WARNING] > > ### Ten en cuenta los siguientes límites al asociar una cotización a una plantilla de cotización: > > * Las plantillas de cotizaciones deben [crearse](https://knowledge.hubspot.com/es/quotes/set-up-legacy-quotes-legacy) antes de que puedan asociarse con una cotización. > * Una cotización solo se puede asociar con una plantilla de cotización. > * Esta API no admite cotizaciones preexistentes o propuestas. Solo se puede usar el tipo de plantilla `CUSTOMIZABLE_QUOTE_TEMPLATE`. ### Asociar firmantes de cotizaciones Si [habilitaste la cotización para firmas electrónicas](#enable-e-signatures), también deberás crear una asociación entre la cotización y los contactos que están firmando mediante el uso de una [etiqueta de asociación](/docs/api-reference/crm-associations-v4/guide#associate-records-with-a-label) específica de cotización a contacto. En lugar de utilizar los endpoints de asociación predeterminados que se muestran arriba, deberás realizar una solicitud `PUT` a la siguiente URL: `/crm/v4/objects/quote/{quoteId}/associations/contact/{contactId}` En el cuerpo de la solicitud, deberás especificar `associationCategory` y `associationTypeId`, como se muestra a continuación: ```json theme={null} [ { "associationCategory": "HUBSPOT_DEFINED", "associationTypeId": 702 } ] ``` ## Crear una cotización con asociaciones (solicitud única) El siguiente cuerpo de solicitud creará una nueva cotización con asociaciones a una plantilla de cotización, un negocio, dos elementos de pedido y un contacto. > [!NOTE] > > Para que el cuerpo de la solicitud que aparece a continuación cree correctamente una cotización en la cuenta, tendrás que actualizar los ID de objeto en el campo `associations` para que coincidan con los datos existentes en el CRM. Revisa la sección [buscar ID para asociaciones](#retrieving-ids-for-associations) para obtener más información. `POST` `/crm/v3/objects/quote` ```json theme={null} { "properties": { "hs_title": "CustomerName - annual SEO audit", "hs_expiration_date": "2023-09-30" }, "associations": [ { "to": { "id": 115045534742 }, "types": [ { "associationCategory": "HUBSPOT_DEFINED", "associationTypeId": 286 } ] }, { "to": { "id": 14795354663 }, "types": [ { "associationCategory": "HUBSPOT_DEFINED", "associationTypeId": 64 } ] }, { "to": { "id": 75895447 }, "types": [ { "associationCategory": "HUBSPOT_DEFINED", "associationTypeId": 67 } ] }, { "to": { "id": 256143985 }, "types": [ { "associationCategory": "HUBSPOT_DEFINED", "associationTypeId": 67 } ] } ] } ``` | Parámetro | Tipo | Descripción | | - | - | - | | `properties` | Objeto | Valores de propiedad para definir los detalles de la cotización. Las propiedades requeridas son `hs_title` y `hs_expiration_date`:
        • `hs_title`: el nombre de la cotización.
        • `hs_expiration_date`: la fecha de caducidad de la cotización.
        • `hs_status`: el [estado de la cotización](#update-quote-state). Si no se proporciona en el momento de la creación, los usuarios no podrán editar la cotización en HubSpot.
        | | `associations` | Matriz | Los demás registros y objetos del CRM asociados a la cotización. Para que una cotización se pueda publicar, debe tener un negocio asociado y una plantilla de cotización. Los elementos de pedido asociados a una cotización deben ser distintos de los elementos de pedido asociados a la cotización del negocio (es decir, debes crear copias de los elementos de pedido). Para establecer cada asociación, incluye un objeto independiente en esta matriz con los siguientes campos:
        • `to`: el ID del registro u objeto que se va a asociar a la cotización.
        • `associationCategory`: la [categoría de etiqueta](/docs/api-reference/crm-associations-v4/guide#associate-records-with-a-label) del tipo de asociación, ya sea `"HUBSPOT_DEFINED"` (etiqueta predeterminada) o `"USER_DEFINED"` (etiqueta personalizada).
        • `associationTypeId`: el [ID del tipo de asociación](/docs/api-reference/crm-associations-v4/guide#association-type-id-values) que se está realizando. Por ejemplo:
          • `286`: plantilla de cotización a cotización
          • `64`: cotización a negocio
          • `67`: cotización a elemento de pedido
        | > [!WARNING] > > ### Nota: > > Estos elementos de pedido deben ser diferentes a los elementos de pedido de otros objetos, incluso si están asociados (por ejemplo, asociar una cotización a un negocio). Consulta la [documentación de la API de elementos de pedido](https://developers.hubspot.es/docs/api-reference/crm-line-items-v3/guide) para obtener más información. ## Actualizar el estado de la cotización El estado de una cotización describe qué tan avanzado está en el proceso de creación, desde la configuración inicial hasta su publicación y el acceso público. El estado de la cotización también puede reflejar el [proceso de aprobación de la cotización](https://knowledge.hubspot.com/es/quotes/set-up-legacy-quotes), si las aprobaciones de cotizaciones están habilitadas para la cuenta. Al establecer el estado de una cotización, HubSpot completará [automáticamente ciertas propiedades](#properties-set-by-quote-state). Puedes actualizar el estado de una cotización haciendo una solicitud `PATCH` a `/crm/v3/objects/quote/{quoteId}`. El estado de una cotización se basa en el campo `hs_status`. Ciertos estados de cotización permiten a los usuarios editar, publicar y usar la cotización en los flujos de trabajo de aprobación de cotizaciones. A continuación se muestran los estados de cotización disponibles. * **Sin estado:** si no se proporciona ningún valor para el campo `hs_status`, la cotización estará en el estado *Mínimo*. La cotización aparecerá en la página de índice de la herramienta cotizaciones, pero no se podrá editar directamente. Las cotizaciones en este estado todavía se pueden usar en la automatización, como la herramienta de secuencias y también están disponibles para analizar dentro de la herramienta de informes. * `DRAFT`: permite editar la cotización en HubSpot. Este estado puede ser útil cuando la cotización no está completamente configurada o si prefieres permitir que los representantes de ventas completen el proceso de configuración de la cotización en HubSpot. * `APPROVAL_NOT_NEEDED`: publica la cotización en una URL de acceso público (`hs_quote_link`) sin necesidad de [aprobación](https://knowledge.hubspot.com/es/quotes/set-up-legacy-quotes). * `PENDING_APPROVAL`: indica que la cotización está a la [espera de ser aprobada](https://knowledge.hubspot.com/es/quotes/set-up-legacy-quotes) antes de que pueda ser publicada. * `APPROVED`: la cotización ha sido [aprobada](https://knowledge.hubspot.com/es/quotes/set-up-legacy-quotes) y ahora está publicada en una URL de acceso público (`hs_quote_link`). * `REJECTED`: indica que la cotización ha sido configurada pero no ha sido [aprobada](https://knowledge.hubspot.com/es/quotes/set-up-legacy-quotes) para su publicación y debe editarse antes de que pueda enviarse de nuevo para su aprobación. > [!WARNING] > > ### Nota: > > Si [habilitas las firmas electrónicas](#enabling-e-signatures) en la cotización, no podrás publicarla si has superado el [límite mensual de firmas electrónicas](https://knowledge.hubspot.com/es/quotes/use-e-signatures-with-quotes#monitor-e-signature-usage). Por ejemplo, la siguiente solicitud publicaría la cotización en una URL de acceso público. ```json theme={null} { "properties": { "hs_status": "APPROVAL_NOT_NEEDED" } } ``` > [!WARNING] > > ### Nota: > > Por opción predeterminada, HubSpot establecerá la propiedad `hs_template_type` de la cotización en `CUSTOMIZABLE_QUOTE_TEMPLATE` después de que [actualices el estado de la cotización](https://developers.hubspot.es/docs/api-reference/crm-quotes-v3/guide#update-quote-state). Este tipo de plantilla es compatible con la API v3, mientras que los siguientes tipos de plantilla son plantillas preexistentes que ya no son compatibles: > > * `QUOTE` > * `PROPOSAL` ### Propiedades establecidas por el estado de la cotización Actualizar el estado de la cotización actualizará las siguientes propiedades: * `hs_quote_amount`: se calcula en función de cualquier elemento de pedido asociado, impuesto, descuento y tarifa. * `hs_domain`: se establece a partir de la plantilla de cotización asociada. * `hs_slug`: se genera de forma aleatoria si no se proporciona un valor. * `hs_quote_total_preference`: se establece en función de la configuración de tu cuenta. Si no has configurado este ajuste, por opción predeterminada será el valor del campo total\_first\_payment. * `hs_timezone`: es la zona horaria predeterminada de tu cuenta de HubSpot. * `hs_locale`: se establece a partir de la plantilla de cotización asociada. * `hs_quote_number`: se establece en función de la fecha y hora actuales, a menos que se proporcione una. * `hs_language`: se establece a partir de la plantilla de cotización asociada. * `hs_currency`: se establece en función del negocio asociado. Si no has asociado un negocio con la cotización, esta cambiará por opción predeterminada a la divisa predeterminada de tu cuenta de HubSpot. Además, las propiedades a continuación se calcularán cuando la cotización esté en un estado publicado: * `hs_pdf_download_link`: se rellena con una URL de un PDF para la cotización. * `hs_locked`: se establece en `true`. Para modificar cualquier propiedad después de haber publicado una cotización, primero debes actualizar el `hs_status` de la cotización a `DRAFT`, `PENDING_APPROVAL` o `REJECTED`. * `hs_quote_link`: la URL de acceso público de la cotización. Esta es una propiedad de solo lectura y no se puede configurar a través de la API después de la publicación. * `hs_esign_num_signers_required`: si has [habilitado las firmas electrónicas](#enable-e-signatures), muestra el número de firmas necesarias. * `hs_payment_status`: el estado de cobro del pago, si habilitaste los pagos. Al publicar con los pagos habilitados, esta propiedad se establecerá en PENDING. Una vez que el comprador envíe el pago a través de la cotización, el estado se actualizará automáticamente. Más información sobre cómo [habilitar los pagos](https://developers.hubspot.es/docs/api-reference/crm-quotes-v3/guide#enable-payments). ## Buscar cotizaciones Puedes buscar cotizaciones individualmente o en lotes. * Para buscar una cotización individual, haz una solicitud `GET` a `/crm/v3/objects/quotes/{quoteID}`. * Para solicitar una lista de todas las cotizaciones, envía una solicitud `GET` a `/crm/v3/objects/quotes`. En estos endpoints, puedes incluir los siguientes parámetros de consulta en la URL de la solicitud: | Parámetro | Descripción | | - | - | | `properties` | Una lista separada con comas de las propiedades que se devolverán en la respuesta. Si el contacto de la cotización solicitada no tiene un valor para una propiedad, no aparecerá en la respuesta. | | `propertiesWithHistory` | Una lista separada con comas de las propiedades actuales y anteriores que se devolverán en la respuesta. Si la cotización solicitada no tiene un valor para una propiedad, no aparecerá en la respuesta. | | `associations` | Una lista separada con comas de los objetos para los que se deben obtener los ID asociados. No se devolverán en la respuesta las asociaciones especificadas que no existan. Encuentra más información sobre la [API de asociaciones.](/docs/api-reference/crm-associations-v4/guide) | Para obtener un lote de cotizaciones específicas por sus ID, haz una solicitud `POST` a `crm/v3/objects/quotes/batch/read` e incluye los ID en el cuerpo de la solicitud. También puedes incluir una matriz de `properties` para especificar qué propiedades devolver. El endpoint por lotes no puede obtener asociaciones. Encuentra más información sobre cómo leer asociaciones en bloques con la [API de asociaciones](/docs/api-reference/crm-associations-v4/guide). ```json theme={null} { "inputs": [ { "id": "342007287" }, { "id": "81204505203" } ], "properties": ["hs_content", "hs_sentiment", "hs_submission_timestamp"] } ``` ## Permisos Se requieren los siguientes permisos para que una aplicación cree una cotización que sea válida para publicar: * `crm.objects.quotes.write`, `crm.objects.quotes.read`, `crm.objects.line_items.write`, `crm.objects.line_items.read`, `crm.objects.owners.read`, `crm.objects.contacts.write`, `crm.objects.contacts.read`, `crm.objects.deals.write`, `crm.objects.deals.read`, `crm.objects.companies.write`, `crm.objects.companies.read` * `crm.schemas.quote.read`, `crm.schemas.line_items.read`, `crm.schemas.contacts.read`, `crm.schemas.deals.read`, `crm.schemas.companies.read` # Quote rules syntax Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/quotes/quote-rules-syntax # Search for quotes using specified criteria. Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/quotes/search/search-quotes specs/2026-09/crm-quotes-v2026-09.json POST /crm/objects/2026-09/quotes/search Ejecuta una búsqueda de cotizaciones basada en los criterios definidos en el cuerpo de la solicitud, tales como filtros, propiedades y opciones de ordenación. Este punto final permite realizar consultas detalladas de registros de cotizaciónes para recuperar conjuntos de datos específicos. > **Supported products** > **Required Scopes** # Partially update a quote Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/quotes/update-quote specs/2026-09/crm-quotes-v2026-09.json PATCH /crm/objects/2026-09/quotes/{quoteId} Realiza una actualización parcial de un objeto identificado por `{quoteId}` o, de manera opcional, a cualquier valor de propiedad único según lo especificado por el parámetro de consulta `idProperty`. `{quoteId}` se refiere al ID de objeto interno de manera predeterminada y el parámetro de consulta `idProperty` se refiere a una propiedad cuyos valores son únicos para el objeto. Se sobrescribirán los valores de propiedad especificados. Las propiedades de solo lectura y las no existentes generarán un error. Los valores de las propiedades pueden borrarse pasando una cadena vacía. > **Supported products** > **Required Scopes** # Update a quote Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/quotes/update-quote-objectId specs/2026-09/crm-quotes-v2026-09.json PATCH /crm/objects/2026-09/quotes/{quoteId} Realiza una actualización parcial de un objeto identificado por `{quoteId}` o, de manera opcional, a cualquier valor de propiedad único según lo especificado por el parámetro de consulta `idProperty`. `{quoteId}` se refiere al ID de objeto interno de manera predeterminada y el parámetro de consulta `idProperty` se refiere a una propiedad cuyos valores son únicos para el objeto. Se sobrescribirán los valores de propiedad especificados. Las propiedades de solo lectura y las no existentes generarán un error. Los valores de las propiedades pueden borrarse pasando una cadena vacía. > **Supported products** > **Required Scopes** # Retrieve multiple custom object schemas in a batch request. Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/schemas/batch/get-schemas specs/2026-09/crm-schemas-v2026-09.json POST /crm-object-schemas/2026-09/schemas/batch/read Obtén los detalles de varios esquemas de objetos personalizados enviando una solicitud por lotes con las entradas especificadas. Esta operación te permite obtener información del esquema, incluidas las propiedades y asociaciones, para varios objetos personalizados en una sola llamada a la API. > **Supported products** > **Required Scopes** # Create a new custom object schema. Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/schemas/create-schema specs/2026-09/crm-schemas-v2026-09.json POST /crm-object-schemas/2026-09/schemas Crea un nuevo esquema de objeto personalizado definiendo sus propiedades y asociaciones. > **Supported products** > **Required Scopes** # Delete the schema of a specified custom object. Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/schemas/delete-schema specs/2026-09/crm-schemas-v2026-09.json DELETE /crm-object-schemas/2026-09/schemas/{objectType} Elimina el esquema de un objeto personalizado de la cuenta usando su ID de tipo de objeto o su nombre completo. > **Supported products** > **Required Scopes** # Retrieve the schema of a specified custom object. Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/schemas/get-schema specs/2026-09/crm-schemas-v2026-09.json GET /crm-object-schemas/2026-09/schemas/{objectType} Obtén los detalles de un esquema de objeto personalizado, incluidas sus propiedades y asociaciones, usando el ID de tipo de objeto o el nombre completo. > **Supported products** > **Required Scopes** # Retrieve all custom object schemas. Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/schemas/get-schemas specs/2026-09/crm-schemas-v2026-09.json GET /crm-object-schemas/2026-09/schemas Recupera todos los esquemas de objetos personalizados, con opciones para incluir definiciones de propiedades, definiciones de asociaciones y metadatos de auditoría. > **Supported products** > **Required Scopes** # Schemas API Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/schemas/guide # Update the schema of a specified custom object. Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/schemas/update-schema specs/2026-09/crm-schemas-v2026-09.json PATCH /crm-object-schemas/2026-09/schemas/{objectType} Actualiza los atributos de un esquema de objeto personalizado, como las propiedades y las etiquetas, usando el ID de tipo de objeto o el nombre completo. > **Supported products** > **Required Scopes** # Create a batch of services Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/services/batch/create-services specs/2026-09/crm-services-v2026-09.json POST /crm/objects/2026-09/0-162/batch/create Crea un lote de objetos del CRM de un tipo específico en HubSpot. Este punto de terminación permite crear varios objetos en una sola solicitud, lo que agiliza el proceso de poblar tu CRM con datos nuevos. Cada objeto debe incluir las propiedades necesarias para su creación. > **Supported products** > **Required Scopes** # Archive a batch of services by ID Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/services/batch/delete-services specs/2026-09/crm-services-v2026-09.json POST /crm/objects/2026-09/0-162/batch/archive Archiva un lote de objetos del CRM por sus ID. Esta operación mueve los objetos especificados a la papelera de reciclaje, archivándolos de forma efectiva. Usa este punto de terminación para gestionar un gran número de objetos que necesitan ser archivados simultáneamente. > **Supported products** > **Required Scopes** # Read a batch of services by internal ID, or unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/services/batch/get-services specs/2026-09/crm-services-v2026-09.json POST /crm/objects/2026-09/0-162/batch/read Obtén un lote de objetos del CRM por sus ID internos o valores de propiedad únicos. Este punto de terminación es útil para obtener varios objetos a la vez, lo que te permite especificar si quieres incluir objetos archivados en la respuesta. > **Supported products** > **Required Scopes** # Update a batch of services by internal ID, or unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/services/batch/update-services specs/2026-09/crm-services-v2026-09.json POST /crm/objects/2026-09/0-162/batch/update Actualiza un lote de objetos del CRM en tu cuenta de HubSpot. Este punto de terminación te permite modificar varios objetos a la vez al proporcionar sus detalles en el cuerpo de la solicitud. Es útil para hacer actualizaciones masivas de propiedades de objetos de manera eficiente. > **Supported products** > **Required Scopes** # Create or update a batch of services by unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/services/batch/upsert-services specs/2026-09/crm-services-v2026-09.json POST /crm/objects/2026-09/0-162/batch/upsert Crea o actualiza un lote de objetos del CRM en HubSpot usando valores de propiedades únicos. Este punto de terminación permite gestionar de forma eficiente varios objetos, ya sea creando nuevas entradas o actualizando las existentes según las propiedades especificadas. > **Supported products** > **Required Scopes** # Create Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/services/create-service specs/2026-09/crm-services-v2026-09.json POST /crm/objects/2026-09/0-162 Crea un objeto del CRM con las propiedades especificadas y devuelve una copia del objeto, incluyendo su ID. Este punto de terminación te permite crear objetos estándar en tu cuenta de HubSpot, proporcionando documentación y ejemplos para guiarte. > **Supported products** > **Required Scopes** # Archive Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/services/delete-service specs/2026-09/crm-services-v2026-09.json DELETE /crm/objects/2026-09/0-162/{serviceId} Mueve un objeto identificado por `{objectId}` a la papelera de reciclaje. Esta operación te permite archivar un objeto específico del CRM de un tipo determinado, identificado por su ID único. > **Supported products** > **Required Scopes** # Read Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/services/get-service specs/2026-09/crm-services-v2026-09.json GET /crm/objects/2026-09/0-162/{serviceId} Lee un objeto identificado por `objectId`. Por opción predeterminada, `objectId` se refiere al ID de objeto interno, pero también puede ser cualquier valor de propiedad único especificado por el parámetro de consulta `idProperty`. La respuesta se puede personalizar usando el parámetro de consulta `properties` para incluir propiedades de objeto específicas. > **Supported products** > **Required Scopes** # List Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/services/get-services specs/2026-09/crm-services-v2026-09.json GET /crm/objects/2026-09/0-162 Obtén una página de objetos del CRM de un tipo específico. Puedes controlar los datos que se devuelven especificando qué propiedades incluir con el parámetro de consulta `properties`. Este punto de terminación admite la paginación y permite filtrar los resultados según el estado de archivado. > **Supported products** > **Required Scopes** # Services API Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/services/guide # Merge two services Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/services/merge/merge-services specs/2026-09/crm-services-v2026-09.json POST /crm/objects/2026-09/services/merge Fusiona dos objetos del CRM del mismo tipo en tu cuenta de HubSpot. Esta operación combina las propiedades y asociaciones de los objetos especificados en un solo objeto, identificado por el ID del objeto principal. Usa este punto de terminación para consolidar registros duplicados o unificar datos bajo una sola entidad. > **Supported products** > **Required Scopes** # Search across objects Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/services/search/search-services specs/2026-09/crm-services-v2026-09.json POST /crm/objects/2026-09/0-162/search Busca objetos del CRM de un tipo específico usando varios filtros y criterios. Este punto de terminación te permite consultar objetos según sus propiedades y devolver resultados que coincidan con los criterios de búsqueda especificados. Es útil para obtener subconjuntos específicos de datos de tu sistema del CRM. > **Supported products** > **Required Scopes** # Update Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/services/update-service specs/2026-09/crm-services-v2026-09.json PATCH /crm/objects/2026-09/0-162/{serviceId} Realiza una actualización parcial de un objeto identificado por "{objectId}". "{objectId}" se refiere al ID interno del objeto, por opción predeterminada, u opcionalmente a cualquier valor de propiedad único según lo especificado por el parámetro de consulta "idProperty". Se sobrescribirán los valores de propiedad especificados. Se ignorarán las propiedades de solo lectura y las no existentes. Los valores de las propiedades pueden borrarse pasando una cadena vacía. > **Supported products** > **Required Scopes** # Update Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/services/update-service-objectId specs/2026-09/crm-services-v2026-09.json PATCH /crm/objects/2026-09/0-162/{serviceId} Realiza una actualización parcial de un objeto identificado por "{objectId}". "{objectId}" se refiere al ID interno del objeto, por opción predeterminada, u opcionalmente a cualquier valor de propiedad único según lo especificado por el parámetro de consulta "idProperty". Se sobrescribirán los valores de propiedad especificados. Se ignorarán las propiedades de solo lectura y las no existentes. Los valores de las propiedades pueden borrarse pasando una cadena vacía. > **Supported products** > **Required Scopes** # Create a batch of taxes Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/taxes/batch/create-taxes specs/2026-09/crm-taxes-v2026-09.json POST /crm/objects/2026-09/taxes/batch/create Crea un lote de objetos del CRM con las propiedades especificadas. Este punto de terminación permite crear de forma eficiente varios objetos en una sola solicitud, y devuelve una copia de cada objeto creado, incluidos sus ID. Es útil para operaciones masivas en las que es necesario crear varios objetos simultáneamente. > **Supported products** > **Required Scopes** # Archive a batch of taxes by ID Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/taxes/batch/delete-taxes specs/2026-09/crm-taxes-v2026-09.json POST /crm/objects/2026-09/taxes/batch/archive Archiva un lote de objetos del CRM identificados por sus ID. Este punto de terminación es útil para mover varios objetos a la papelera de reciclaje en una sola solicitud, lo que agiliza el proceso de gestionar grandes conjuntos de datos. > **Supported products** > **Required Scopes** # Read a batch of taxes by internal ID, or unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/taxes/batch/get-taxes specs/2026-09/crm-taxes-v2026-09.json POST /crm/objects/2026-09/taxes/batch/read Obtén un lote de objetos del CRM por sus ID internos o valores de propiedades únicos. Este punto de conexión es útil para obtener varios objetos en una sola solicitud, lo que agiliza los procesos de obtención de datos. Puedes especificar si se incluyen objetos archivados en los resultados. > **Supported products** > **Required Scopes** # Update a batch of taxes by internal ID, or unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/taxes/batch/update-taxes specs/2026-09/crm-taxes-v2026-09.json POST /crm/objects/2026-09/taxes/batch/update Actualiza un lote de objetos del CRM en tu cuenta de HubSpot. Este punto de terminación te permite modificar varios objetos a la vez proporcionando sus detalles en el cuerpo de la solicitud. Es útil para actualizaciones masivas en las que necesitas cambiar las propiedades de varios objetos simultáneamente. > **Supported products** > **Required Scopes** # Create or update a batch of taxes by unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/taxes/batch/upsert-taxes specs/2026-09/crm-taxes-v2026-09.json POST /crm/objects/2026-09/taxes/batch/upsert Crea o actualiza un lote de objetos del CRM por valores de propiedad únicos en tu cuenta de HubSpot. Este punto de terminación te permite gestionar de forma eficiente grandes conjuntos de objetos, ya sea creando nuevas entradas o actualizando las existentes basándose en identificadores únicos. > **Supported products** > **Required Scopes** # Create Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/taxes/create-tax specs/2026-09/crm-taxes-v2026-09.json POST /crm/objects/2026-09/taxes Crea un objeto del CRM con las propiedades especificadas y recibe una copia del objeto, incluyendo su ID. Este punto de conexión es útil para agregar nuevos objetos a tu sistema del CRM, lo que permite definir las propiedades del objeto al crearlo. > **Supported products** > **Required Scopes** # Archive Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/taxes/delete-tax specs/2026-09/crm-taxes-v2026-09.json DELETE /crm/objects/2026-09/taxes/{taxId} Mueve un objeto identificado por `{objectId}` a la papelera de reciclaje. Esta operación te permite archivar un objeto específico del CRM, lo que hace que ya no esté activo, pero que se pueda recuperar de la papelera de reciclaje si es necesario. > **Supported products** > **Required Scopes** # Read Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/taxes/get-tax specs/2026-09/crm-taxes-v2026-09.json GET /crm/objects/2026-09/taxes/{taxId} Lee un objeto identificado por `objectId` en el `objectType` especificado. Por opción predeterminada, `objectId` se refiere al ID de objeto interno, pero también puede referirse a cualquier valor de propiedad único, según lo especificado por el parámetro de consulta `idProperty`. Puede controlar el contenido de la respuesta usando el parámetro de consulta `properties`. > **Supported products** > **Required Scopes** # List Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/taxes/get-taxes specs/2026-09/crm-taxes-v2026-09.json GET /crm/objects/2026-09/taxes Lee una página de objetos del CRM de un tipo específico. Se pueden controlar los datos que se devuelven usando el parámetro de consulta `properties` para especificar qué propiedades de objeto incluir. Este punto de terminación admite la paginación y permite obtener ID asociados para tipos de objeto específicos. > **Supported products** > **Required Scopes** # Taxes API Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/taxes/guide # Search for taxes using specified criteria. Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/taxes/search/search-taxes specs/2026-09/crm-taxes-v2026-09.json POST /crm/objects/2026-09/taxes/search Para buscar objetos del CRM de un tipo específico. Este punto de terminación te permite filtrar y ordenar objetos según varios criterios, y obtener propiedades específicas de los objetos. Es útil para encontrar objetos que coincidan con ciertas condiciones o para obtener un subconjunto de datos para análisis. > **Supported products** > **Required Scopes** # Update Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/taxes/update-tax specs/2026-09/crm-taxes-v2026-09.json PATCH /crm/objects/2026-09/taxes/{taxId} Realiza una actualización parcial de un objeto identificado por "{objectId}". "{objectId}" se refiere al ID interno del objeto, por opción predeterminada, u opcionalmente a cualquier valor de propiedad único según lo especificado por el parámetro de consulta "idProperty". Se sobrescribirán los valores de propiedad especificados. Se ignorarán las propiedades de solo lectura y las no existentes. Los valores de las propiedades pueden borrarse pasando una cadena vacía. > **Supported products** > **Required Scopes** # Create Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/tickets/create-ticket specs/2026-09/crm-tickets-v2026-09.json POST /crm/objects/2026-09/tickets Crea un objeto del CRM con las propiedades especificadas y devuelve una copia del objeto, incluyendo su ID. Este punto de conexión es útil para añadir nuevos objetos a tu sistema de CRM, lo que permite definir las propiedades del objeto al crearlo. > **Supported products** > **Required Scopes** # Read Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/tickets/get-ticket specs/2026-09/crm-tickets-v2026-09.json GET /crm/objects/2026-09/tickets/{ticketId} Lee un objeto identificado por `objectId`. El `objectId` se refiere al ID de objeto interno opción predeterminada, o, de manera opcional, cualquier valor de propiedad único según lo especificado por el parámetro de consulta `idProperty`. Puedes controlar lo que se devuelve con el parámetro de consulta `properties`. Este punto de conexión te permite recuperar información detallada sobre un objeto del CRM específico, como sus propiedades, asociaciones e historial. > **Supported products** > **Required Scopes** # List Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/tickets/get-tickets specs/2026-09/crm-tickets-v2026-09.json GET /crm/objects/2026-09/tickets Permite leer una página de objetos de un tipo específico en tu cuenta de HubSpot. Puedes controlar los datos que se devuelven especificando las propiedades que quieres incluir en la respuesta. Este punto de conexión admite la paginación y te permite recuperar los ID de objetos asociados y los registros archivados. > **Supported products** > **Required Scopes** # API del CRM | Tickets Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/tickets/guide > **[Run in Postman](https://app.getpostman.com/run-collection/26126890-98d91102-ed47-41b0-8304-23f04f12ed0f)** > **Requisitos de ámbito** # Tickets En HubSpot, los tickets representan las solicitudes de asistencia de los clientes. A los tickets se les hace seguimiento a través del proceso de asistencia técnica mediante los [estados de la pipeline](https://knowledge.hubspot.com/es/object-settings/set-up-and-customize-pipelines) hasta que se cierren. Los endpoints de tickets te permiten crear y administrar registros de tickets, así como sincronizar los datos entre HubSpot y otros sistemas. Obtén más información sobre las API de objetos, registros, propiedades y asociaciones en la guía [Comprender el CRM](/docs/guides/crm/understanding-the-crm). También, para obtener más información sobre los objetos y registros de HubSpot, puedes ver este artículo sobre [aprender a administrar la base de datos del CRM](https://knowledge.hubspot.com/es/get-started/manage-your-crm-database). ## Crear tickets Para crear nuevos tickets, haz una solicitud `POST` a `/crm/v3/objects/tickets`. En tu solicitud, incluye los datos del ticket en las propiedades del objeto. También puedes agregar el objeto asociaciones para asociar el nuevo ticket con los registros existentes (por ejemplo, contactos o empresas) o actividades (por ejemplo, reuniones o notas). ### Propiedades Los detalles del ticket se almacenan en las propiedades del ticket. Hay [propiedades de ticket predeterminadas de HubSpot](https://knowledge.hubspot.com/es/properties/hubspots-default-ticket-properties), pero también puedes [crear propiedades personalizadas](https://knowledge.hubspot.com/es/properties/create-and-edit-properties). Al crear un nuevo ticket, debes incluir las siguientes propiedades en tu solicitud: `subject` (el nombre del ticket), `hs_pipeline_stage` (el estado del ticket) y si tienes varias pipelines, `hs_pipeline`. Si no se especifica una pipeline, se utilizará la pipeline predeterminada. Para ver todas las propiedades disponibles, puedes obtener una lista de las propiedades de tickets de tu cuenta haciendo una solicitud `GET` a `/crm/v3/properties/tickets`. Más información sobre la[ API de propiedades](/docs/api-reference/crm-properties-v3/guide). > [!WARNING] > > **Nota**: Debes usar el ID interno de un estado del ticket o del pipeline al crear un ticket a través de la API. El ID interno es un número, que también saldrá en los resultados cuando busques tickets a través de la API. Puedes encontrar el ID interno de un estado de ticket o una pipeline en la [configuración de tu pipeline de tickets.](https://knowledge.hubspot.com/es/object-settings/set-up-and-customize-pipelines) Por ejemplo, para crear un nuevo ticket, la solicitud puede ser similar a la siguiente: **JSON** ```json theme={null} ///Example request body { "properties": { "hs_pipeline": "0", "hs_pipeline_stage": "1", "hs_ticket_priority": "HIGH", "subject": "troubleshoot report" } } ``` ### Asociaciones Al crear un nuevo ticket, también puedes asociar el ticket con [registros](https://knowledge.hubspot.com/es/records/associate-activities-with-records) o [actividades existentes](https://knowledge.hubspot.com/es/records/associate-records) al incluir un objeto de asociación. Por ejemplo, para asociar un nuevo ticket con un registro de contacto y de empresa existentes, la solicitud debería hacerse de la siguiente manera: **JSON** ```json theme={null} ///Example request body { "properties": { "hs_pipeline": "0", "hs_pipeline_stage": "1", "hs_ticket_priority": "HIGH", "subject": "troubleshoot report" }, "associations": [ { "to": { "id": 201 }, "types": [ { "associationCategory": "HUBSPOT_DEFINED", "associationTypeId": 16 } ] }, { "to": { "id": 301 }, "types": [ { "associationCategory": "HUBSPOT_DEFINED", "associationTypeId": 26 } ] } ] } ``` Para el objeto asociaciones, debes incluir lo siguiente: | Parámetro | Descripción | | - | - | | `to` | El registro o actividad que quieres asociar con el ticket, especificado por su valor `id` único. | | `types` | El tipo de asociación entre el ticket y el registro o actividad. Incluye `associationCategory` y `associationTypeId`. Los ID de los tipos de asociación predeterminados se enumeran en [esta página](/docs/api-reference/crm-associations-v4/guide#association-type-id-values), y también puedes obtener el valor de los tipos de asociación personalizados (es decir, de las etiquetas) con la [API de asociaciones](/docs/api-reference/crm-associations-v4/guide#retrieve-association-types). | ## Buscar tickets Puedes buscar tickets individualmente o en lotes. * Para buscar un solo ticket, haz una solicitud `GET` a `/crm/v3/objects/tickets/{ticketId}`. * Para obtener una lista de todos los tickets, envía una solicitud `GET` a `/crm/v3/objects/tickets`. En estos endpoints, puedes incluir los siguientes parámetros de consulta en la URL de la solicitud: | Parámetro | Descripción | | - | - | | `properties` | Una lista separada con comas de las propiedades que estarán en la respuesta. Si el ticket solicitado no tiene un valor para una propiedad, no aparecerá en la respuesta. | | `propertiesWithHistory` | Una lista separada por comas de las propiedades actuales y antiguas que estarán en la respuesta. Si el un ticket solicitado no tiene un valor para una propiedad, no aparecerá en la respuesta. | | `associations` | Una lista separada con comas de los objetos para los que se deben obtener los ID asociados. En la respuesta no aparecerán las asociaciones especificadas que no existan. Encuentra más información sobre la [API de asociaciones.](/docs/api-reference/crm-associations-v4/guide) | * Para obtener un lote de tickets específicos por ID de registro o una [propiedad de identificador único personalizado](/docs/api-reference/crm-properties-v3/guide#create-unique-identifier-properties), haz una solicitud `POST` a `crm/v3/objects/tickets/batch/read`. El endpoint en bloques no puede obtener asociaciones. Encuentra más información sobre cómo leer asociaciones por lotes con la [API de asociaciones](/docs/api-reference/crm-associations-v4/guide). Para el endpoint de lectura por lotes, también puedes utilizar el parámetro opcional `idProperty` para buscar tickets mediante una [propiedad de identificador único personalizado](/docs/api-reference/crm-properties-v3/guide#create-unique-identifier-properties). De forma predeterminada, los valores `id` de la solicitud se refieren al ID de registro (`hs_object_id`), por lo que no se requiere el parámetro `idProperty` al obtener información por el ID de registro. Para utilizar una propiedad de valor único personalizada para buscar tickets, debes incluir el parámetro `idProperty`. Por ejemplo, para buscar un lote de tickets, la solicitud podría verse de una de estas dos maneras: ```json theme={null} ///Example request body with record ID { "properties": ["subject", "hs_pipeline_stage", "hs_pipeline"], "inputs": [ { "id": "4444888856" }, { "id": "666699988" } ] } ``` ```json theme={null} ///Example request body with a unique value property { "properties": ["subject", "hs_pipeline_stage", "hs_pipeline"], "idProperty": "uniquepropertyexample", "inputs": [ { "id": "abc" }, { "id": "def" } ] } ``` Para buscar tickets con valores actuales y antiguos con respecto a una propiedad, la solicitud podría ser la siguiente: ```json theme={null} ///Example request body with record ID (current and historical values) { "propertiesWithHistory": ["hs_pipeline_stage"], "inputs": [ { "id": "4444888856" }, { "id": "666699988" } ] } ``` ## Actualizar tickets Puedes actualizar tickets individualmente o por lotes. Para los tickets existentes, el ID del registro es un valor único predeterminado que puedes usar para actualizar el ticket a través de la API, pero también puedes identificar y actualizar los tickets utilizando [propiedades personalizadas de identificadores únicos](/docs/api-reference/crm-properties-v3/guide#create-unique-identifier-properties). * Para actualizar un solo ticket por su ID de registro, haz una solicitud `PATCH` a `/crm/v3/objects/tickets/{ticketId}` e incluye los datos que quieres actualizar. * Para actualizar varios tickets, haz una solicitud `POST` a `/crm/v3/objects/tickets/batch/update`. En el cuerpo de la solicitud, incluye una matriz con los identificadores de los tickets y las propiedades que quieres actualizar. ### Asociar tickets existentes con registros o actividades Para asociar un ticket con otros registros del CRM o una actividad, haz una solicitud `PUT` a `/crm/v3/objects/tickets/{ticketId}/associations/{toObjectType}/{toObjectId}/{associationTypeId}`. > [!NOTE] > > Para obtener el valor `associationTypeId`, consulta [esta lista](/docs/api-reference/crm-associations-v4/guide#association-type-id-values) de valores predeterminados o haz una solicitud `GET` a `/crm/v4/associations/{fromObjectType}/{toObjectType}/labels`. Encuentra más información sobre la [API de asociaciones.](/docs/api-reference/crm-associations-v4/guide) ### Eliminar una asociación Para eliminar una asociación entre un ticket y un registro o actividad, realiza una solicitud `DELETE` a la siguiente URL: `/crm/v3/objects/tickets/{ticketId}/associations/{toObjectType}/{toObjectId}/{associationTypeId}`. ## Anclar una actividad en el registro de un ticket Puedes anclar una actividad en un registro de ticket a través de la API incluyendo el campo `hs_pinned_engagement_id` en tu solicitud. En el campo, incluye el `id` de la actividad que quieres anclar, que se puede obtener a través de las [API de interacciones](/docs/api-reference/overview). Puedes anclar una actividad por registro, y la actividad ya debe estar asociada con el ticket antes de anclarla. Para establecer o cambiar la actividad anclada de un ticket, la solicitud podría hacerse de la siguiente manera: ```json theme={null} ///Example request body PATCH /crm/v3/objects/tickets/{ticketId} { "properties": { "hs_pinned_engagement_id": 123456789 } } ``` También puedes crear un ticket, asociarlo a una actividad existente y anclar la actividad en la misma solicitud. Por ejemplo: ```json theme={null} ///Example request body POST /crm/v3/objects/tickets { "properties": { "hs_pipeline": "0", "hs_pipeline_stage": "1", "hs_ticket_priority": "HIGH", "subject": "troubleshoot report", "hs_pinned_engagement_id": 123456789 }, "associations": [ { "to": { "id": 123456789 }, "types": [ { "associationCategory": "HUBSPOT_DEFINED", "associationTypeId": 227 } ] } ] } ``` ## Eliminar tickets Puedes eliminar tickets individualmente o por lotes, lo que agregará el ticket a la papelera de reciclaje en HubSpot. Más tarde puedes [restaurar el ticket en HubSpot](https://knowledge.hubspot.com/es/records/restore-deleted-records). Para eliminar un solo ticket usando su ID, haz una solicitud `DELETE` a `/crm/v3/objects/tickets/{ticketId}`. Obtén más información sobre la eliminación de tickets en [esta documentación de referencia](/docs/api-reference/crm-tickets-v3/guide#delete-%2Fcrm%2Fv3%2Fobjects%2Ftickets%2F%7Bticketid%7D). # Merge two tickets Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/tickets/merge-tickets specs/2026-09/crm-tickets-v2026-09.json POST /crm/objects/2026-09/tickets/merge Combina dos objetos del CRM del mismo tipo en tu cuenta de HubSpot. Esta operación combina las propiedades y asociaciones de los objetos especificados en un solo objeto identificado por el ID del objeto principal. > **Supported products** > **Required Scopes** # Ticket object definition Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/tickets/object-definition # Create a batch of tickets Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/tickets/batch/create-tickets specs/2026-09/crm-tickets-v2026-09.json POST /crm/objects/2026-09/tickets/batch/create Crea un lote de objetos del CRM con las propiedades especificadas. Este punto de terminación te permite crear varios objetos en una sola solicitud, lo que puede ser útil para agregar grandes conjuntos de datos a tu cuenta de HubSpot de forma eficiente. La respuesta incluye una copia de cada objeto creado, incluyendo sus ID. > **Supported products** > **Required Scopes** # Archive a batch of tickets by ID Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/tickets/batch/delete-tickets specs/2026-09/crm-tickets-v2026-09.json POST /crm/objects/2026-09/tickets/batch/archive Archiva un lote de objetos del CRM identificados por sus ID. Este punto de terminación es útil para mover varios objetos a la papelera de reciclaje en una sola solicitud, lo que agiliza el proceso de gestionar grandes conjuntos de datos. > **Supported products** > **Required Scopes** # Read a batch of tickets by internal ID, or unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/tickets/batch/get-tickets specs/2026-09/crm-tickets-v2026-09.json POST /crm/objects/2026-09/tickets/batch/read Recupera un lote de objetos del CRM por sus ID internos o valores de propiedad únicos. Este punto de terminación es útil para obtener varios objetos en una sola solicitud, lo que puede ayudar a optimizar el rendimiento y reducir el número de llamadas a la API necesarias. Se puede especificar si se quieren incluir objetos archivados en los resultados. > **Supported products** > **Required Scopes** # Update a batch of tickets by internal ID, or unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/tickets/batch/update-tickets specs/2026-09/crm-tickets-v2026-09.json POST /crm/objects/2026-09/tickets/batch/update Actualiza un lote de objetos del CRM en tu cuenta de HubSpot. Este punto de terminación te permite modificar varios objetos a la vez proporcionando sus detalles en el cuerpo de la solicitud. Es útil para actualizaciones masivas en las que necesitas cambiar las propiedades de varios objetos simultáneamente. > **Supported products** > **Required Scopes** # Create or update a batch of tickets by unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/tickets/batch/upsert-tickets specs/2026-09/crm-tickets-v2026-09.json POST /crm/objects/2026-09/tickets/batch/upsert Crea o actualiza un lote de objetos del CRM por sus valores de propiedad únicos. Este punto de terminación permite gestionar eficientemente múltiples objetos en una sola solicitud, lo que asegura que los objetos existentes se actualicen mientras se crean nuevos. Es útil para sincronizar datos con sistemas externos o mantener registros actualizados en tu cuenta de HubSpot. > **Supported products** > **Required Scopes** # Archive Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/tickets/delete-ticket specs/2026-09/crm-tickets-v2026-09.json DELETE /crm/objects/2026-09/tickets/{ticketId} Mueve un objeto identificado por `{objectId}` a la papelera de reciclaje. Esta operación te permite archivar un objeto específico del CRM por su ID, con lo que se elimina de su uso activo, pero se conserva en el sistema para una posible restauración futura. > **Supported products** > **Required Scopes** # Search for tickets Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/tickets/search/search-tickets specs/2026-09/crm-tickets-v2026-09.json POST /crm/objects/2026-09/tickets/search Busca objetos del CRM de un tipo específico usando varios filtros y criterios. Este punto de conexión permite hacer búsquedas complejas al especificar grupos de filtros, propiedades y opciones de clasificación. Es útil para obtener objetos específicos basados en parámetros de búsqueda detallados. > **Supported products** > **Required Scopes** # Update Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/tickets/update-ticket specs/2026-09/crm-tickets-v2026-09.json PATCH /crm/objects/2026-09/tickets/{ticketId} Realiza una actualización parcial de un objeto identificado por "{objectId}". "{objectId}" se refiere al ID interno del objeto, por opción predeterminada, u opcionalmente a cualquier valor de propiedad único según lo especificado por el parámetro de consulta "idProperty". Se sobrescribirán los valores de propiedad especificados. Se ignorarán las propiedades de solo lectura y las no existentes. Los valores de las propiedades pueden borrarse pasando una cadena vacía. > **Supported products** > **Required Scopes** # Update Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/tickets/update-ticket-objectId specs/2026-09/crm-tickets-v2026-09.json PATCH /crm/objects/2026-09/tickets/{ticketId} Realiza una actualización parcial de un objeto identificado por "{objectId}". "{objectId}" se refiere al ID interno del objeto, por opción predeterminada, u opcionalmente a cualquier valor de propiedad único según lo especificado por el parámetro de consulta "idProperty". Se sobrescribirán los valores de propiedad especificados. Se ignorarán las propiedades de solo lectura y las no existentes. Los valores de las propiedades pueden borrarse pasando una cadena vacía. > **Supported products** > **Required Scopes** # Create a batch of users Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/users/batch/create-users specs/2026-09/crm-users-v2026-09.json POST /crm/objects/2026-09/users/batch/create Para crear varios usuarios en una sola solicitud, proporciona un lote de propiedades de usuario y asociaciones. Este punto de terminación devuelve los usuarios creados junto con sus identificadores. > **Supported products** > **Required Scopes** # Archive a batch of users by ID Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/users/batch/delete-users specs/2026-09/crm-users-v2026-09.json POST /crm/objects/2026-09/users/batch/archive Archiva varios usuarios por sus ID únicos en una sola solicitud. Esta operación mueve los usuarios especificados a la papelera de reciclaje, lo que efectivamente los desactiva del uso activo. > **Supported products** > **Required Scopes** # Read a batch of users by internal ID, or unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/users/batch/get-users specs/2026-09/crm-users-v2026-09.json POST /crm/objects/2026-09/users/batch/read Recupera registros por ID de registro o incluye el parámetro `idProperty` para recuperar registros por propiedad de valor único personalizada. > **Supported products** > **Required Scopes** # Update a batch of users by internal ID, or unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/users/batch/update-users specs/2026-09/crm-users-v2026-09.json POST /crm/objects/2026-09/users/batch/update Para actualizar varios registros de usuarios en una sola solicitud, especifica sus ID internos o valores de propiedad únicos. Esta operación permite el procesamiento por lotes de actualizaciones de datos de usuarios, lo que garantiza actualizaciones eficientes en varios perfiles de usuario. > **Supported products** > **Required Scopes** # Create or update a batch of users by unique property values Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/users/batch/upsert-users specs/2026-09/crm-users-v2026-09.json POST /crm/objects/2026-09/users/batch/upsert Crea o actualiza registros identificados por un valor único de propiedad según lo especificado por el parámetro de consulta `idProperty`. El parámetro de consulta `idProperty` se refiere a una propiedad cuyos valores son únicos para el objeto. > **Supported products** > **Required Scopes** # Create Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/users/create-user specs/2026-09/crm-users-v2026-09.json POST /crm/objects/2026-09/users Crea un usuario con las propiedades dadas y devuelve una copia del objeto, incluyendo el ID. Se proporciona documentación y ejemplos para crear usuarios estándar. > **Supported products** > **Required Scopes** # Archive Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/users/delete-user specs/2026-09/crm-users-v2026-09.json DELETE /crm/objects/2026-09/users/{userId} Mueve un objeto identificado por `{userId}` a la papelera de reciclaje. > **Supported products** > **Required Scopes** # Read Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/users/get-user specs/2026-09/crm-users-v2026-09.json GET /crm/objects/2026-09/users/{userId} Lee un objeto identificado por `{userId}`. `{userId}` se refiere al ID de objeto interno por opción predeterminada o, de manera opcional, a cualquier valor de propiedad único especificado por el parámetro de consulta `idProperty`. Controla lo que se devuelve mediante el parámetro de consulta `properties`. > **Supported products** > **Required Scopes** # List Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/users/get-users specs/2026-09/crm-users-v2026-09.json GET /crm/objects/2026-09/users Lee una página de usuarios. Controla lo que se devuelve a través del parámetro de consulta `properties`. > **Supported products** > **Required Scopes** # Users API Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/users/guide # Search for users based on specified criteria. Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/users/search/search-users specs/2026-09/crm-users-v2026-09.json POST /crm/objects/2026-09/users/search Para ejecutar una búsqueda de usuarios, utiliza filtros definidos, propiedades y opciones de orden. La solicitud debe incluir una consulta de búsqueda y puede devolver hasta 200 resultados por solicitud. > **Supported products** > **Required Scopes** # Update user Source: https://developers.hubspot.es/docs/api-reference/latest/crm/objects/users/update-user specs/2026-09/crm-users-v2026-09.json PATCH /crm/objects/2026-09/users/{userId} Realiza una actualización parcial de un objeto identificado por `{userId}` o, de manera opcional, a cualquier valor de propiedad único según lo especificado por el parámetro de consulta `idProperty`. `{userId}` se refiere al ID de objeto interno de manera predeterminada y el parámetro de consulta `idProperty` se refiere a una propiedad cuyos valores son únicos para el objeto. Se sobrescribirán los valores de propiedad especificados. Las propiedades de solo lectura y las no existentes generarán un error. Los valores de las propiedades pueden borrarse pasando una cadena vacía. > **Supported products** > **Required Scopes** # Retrieve an owner Source: https://developers.hubspot.es/docs/api-reference/latest/crm/owners/get-owner specs/2026-09/crm-crm-owners-v2026-09.json GET /crm/owners/2026-09/{ownerId} Obtener detalles de un propietario específico utilizando su 'id' o 'userId'. > **Supported products** > **Required Scopes** # Retrieve all owners Source: https://developers.hubspot.es/docs/api-reference/latest/crm/owners/get-owners specs/2026-09/crm-crm-owners-v2026-09.json GET /crm/owners/2026-09 Recupera una lista paginada de propietarios de tu cuenta de HubSpot. Este punto de terminación permite filtrar por correo electrónico y admite la paginación a través del parámetro "after". También puedes especificar el número máximo de resultados por página y elegir incluir propietarios archivados en la respuesta. > **Supported products** > **Required Scopes** # API de CRM | Propietarios Source: https://developers.hubspot.es/docs/api-reference/latest/crm/owners/guide > **[Run in Postman](https://app.getpostman.com/run-collection/78f10c037170a05f3b3a)** > **Requisitos de ámbito** # Propietarios Los propietarios de HubSpot [asignan](https://knowledge.hubspot.com/records/how-to-set-a-record-owner) usuarios específicos a registros, actividades o tareas de marketing, y se pueden usar en tokens de personalización para tu contenido. Los propietarios se crean y actualizan automáticamente en HubSpot cuando se agregan nuevos usuarios o los propietarios existentes se sincronizan desde [Salesforce](https://knowledge.hubspot.com/salesforce/install-the-hubspot-salesforce-integration). Los puntos finales de la API de propietarios son de solo lectura, por lo que puedes usarlos para recuperar los detalles de identificación de un propietario, incluido el ID de propietario. Este identificador puede usarse para asignar propiedad a registros de CRM en HubSpot, mediante una integración o mediante llamadas de API de cambio de propiedad. ## Recuperar una lista de propietarios Para recuperar los propietarios de tu cuenta, haz una solicitud `GET` a `/crm/v3/owners`. La respuesta devolverá el nombre, el correo electrónico, los valores de identificación, las fechas de creación/actualización y, si corresponde, la información del equipo de cada usuario. Se devuelven dos valores de ID, que se utilizan para diferentes propósitos: * `id`: el ID del propietario. Este valor debe usarse al recuperar información sobre un propietario específico y al asignar un propietario a un registro o actividad. * `userId`: el ID del usuario Este valor se puede usar para especificar usuarios en la [API de configuración](/docs/api-reference/settings-user-provisioning-v3/guide), pero se producirá un error si se usa para asignar la propiedad. Tu respuesta será similar a la siguiente: ```json theme={null} ///Example response GET crm/v3/owners { "results": [ { "id": "41629779", "email": "email@hubspot.com", "type": "PERSON", "firstName": "HubSpot", "lastName": "Test Owner", "userId": 9586504, "userIdIncludingInactive": 9586504, "createdAt": "2019-12-25T13:01:35.228Z", "updatedAt": "2023-08-22T13:40:26.790Z", "archived": false, "teams": [ { "id": "368389", "name": "Sales Team", "primary": true } ] }, { "id": "60158084", "email": "email@gmail.com", "type": "PERSON", "firstName": "Test", "lastName": "Email", "userId": 9274996, "userIdIncludingInactive": 9274996, "createdAt": "2021-02-10T17:59:04.891Z", "updatedAt": "2023-02-09T17:41:52.767Z", "archived": false, "teams": [ { "id": "368389", "name": "Sales Team", "primary": true } ] }, { "id": "81538190", "email": "salesmanager@hubspot.com", "type": "PERSON", "firstName": "Sales", "lastName": "Manager Example", "userId": 3892666, "userIdIncludingInactive": 3892666, "createdAt": "2021-05-27T16:55:57.242Z", "updatedAt": "2022-08-02T18:34:35.039Z", "archived": false } ] } ``` También puedes recuperar propietarios archivados para ver los usuarios que fueron desactivados. Para ello, añade el parámetro `archived` con el valor `true`. Para los usuarios archivados, todavía hay un valor `id`, pero el valor `userId` será `null`. En su lugar, el ID de usuario se almacena en el ampo `userIdIncludingInactive`. Por ejemplo: ```json theme={null} ///Example response GET crm/v3/owners/?archived=true { "results": [ { "id": "42103462", "email": "useremail@hubspot.com", "type": "PERSON", "firstName": "", "lastName": "", "userId": null, "userIdIncludingInactive": 9685555, "createdAt": "2020-01-09T20:28:50.080Z", "updatedAt": "2020-01-09T20:28:50.080Z", "archived": true } ] } ``` ## Recuperar información sobre un propietario individual Para recuperar un propietario específico, haz una solicitud `GET` a `/crm/v3/owners/{ownerId}`. Debes usar el valor de `id` para especificar el propietario para el que deseas más detalles. > [!WARNING] > > **Nota**: el valor de `updatedAt` en la respuesta cambia según las actualizaciones del objeto del propietario en sí. No se actualizará para cambios en el objeto del usuario. Por ejemplo, cambiar los permisos de un usuario no actualizará el valor `updatedAt`. # Create pipeline Source: https://developers.hubspot.es/docs/api-reference/latest/crm/pipelines/create-pipeline specs/2026-09/crm-pipelines-v2026-09.json POST /crm/pipelines/2026-09/{objectType} Crea un nuevo pipeline para un tipo de objeto específico en tu cuenta de HubSpot. Este punto de conexión requiere un cuerpo de solicitud JSON con detalles sobre el pipeline, como su etiqueta, orden de visualización y etapas. La operación devuelve los detalles del pipeline recién creado si tiene éxito. > **Supported products** > **Required Scopes** # Delete pipeline Source: https://developers.hubspot.es/docs/api-reference/latest/crm/pipelines/delete-pipeline specs/2026-09/crm-pipelines-v2026-09.json DELETE /crm/pipelines/2026-09/{objectType}/{pipelineId} Elimina un pipeline específico en tu cuenta de HubSpot, identificado por su tipo de objeto y ID de pipeline. Esta operación puede validar opcionalmente las referencias y los usos de las etapas del negocio antes de la eliminación para asegurar la integridad de los datos. > **Supported products** > **Required Scopes** # Retrieve pipeline Source: https://developers.hubspot.es/docs/api-reference/latest/crm/pipelines/get-pipeline specs/2026-09/crm-pipelines-v2026-09.json GET /crm/pipelines/2026-09/{objectType}/{pipelineId} Obtén información detallada sobre un pipeline específico en tu cuenta de HubSpot. Este punto de conexión te permite acceder a las propiedades y etapas del pipeline identificado por el pipelineId y objectType dados. Es útil para obtener la configuración y el estado actuales de un pipeline. > **Supported products** > **Required Scopes** # Retrieve pipelines Source: https://developers.hubspot.es/docs/api-reference/latest/crm/pipelines/get-pipelines specs/2026-09/crm-pipelines-v2026-09.json GET /crm/pipelines/2026-09/{objectType} Obtén todos los pipelines para un tipo de objeto específico en tu cuenta de HubSpot. Este punto de conexión te permite acceder a la información de los pipelines sin paginación, lo que lo hace útil para obtener una lista completa de los pipelines asociados a un tipo de objeto en particular. > **Supported products** > **Required Scopes** # Retrieve audit logs Source: https://developers.hubspot.es/docs/api-reference/latest/crm/pipelines/get-pipelines-audit specs/2026-09/crm-pipelines-v2026-09.json GET /crm/pipelines/2026-09/{objectType}/{pipelineId}/audit Obtén los registros de auditoría de un pipeline específico en tu cuenta de HubSpot. Este punto de conexión proporciona información detallada sobre los cambios realizados en el pipeline especificado, lo que puede ser útil para hacer seguimiento de las modificaciones y entender el historial de la configuración del pipeline. > **Supported products** > **Required Scopes** # API de CRM | Pipelines Source: https://developers.hubspot.es/docs/api-reference/latest/crm/pipelines/guide > **[Run in Postman](https://app.getpostman.com/run-collection/2c67a53481327b3678ec)** > **Requisitos de ámbito** # Pipelines En HubSpot, un pipeline es donde se establecen las etapas de negocios o los estados de tickets. Para las ventas, se pueden usar pipelines para predecir los ingresos e identificar obstáculos. Para el servicio, se pueden usar pipelines para administrar los estados de tickets y analizar los bloqueadores. Cada etapa en un pipeline se identifica mediante un ID interno único, lo que significa que solo puede ser miembro de un pipeline. Cada pipeline siempre tiene al menos una etapa y cada cuenta tiene al menos un pipeline. ### Pipelines predeterminados Cada cuenta contiene inicialmente un pipeline predeterminado con el valor «predeterminado» para `pipelineId`. En las cuentas con un solo pipeline, la propiedad de pipeline para cualquier objeto se establecerá automáticamente como «predeterminado». En las cuentas con múltiples pipelines, si estás configurando una etapa que no está en el pipeline predeterminado, también deberás establecer la propiedad de pipeline correspondiente. ### Varios pipelines Solo cuentas de Sales Hub Pro o Enterprise pueden crear [varios pipelines de negocios](https://knowledge.hubspot.com/object-settings/set-up-and-customize-pipelines). De manera similar, debes tener una suscripción de Service Hub Pro o Enterprise para crear varios [pipelines de tickets](https://knowledge.hubspot.com/object-settings/set-up-and-customize-pipelines). Más información sobre los niveles de suscripción de HubSpot [aquí](https://legal.hubspot.com/hubspot-product-and-services-catalog). **Casos de uso de ejemplo:** Cuando trabajas con negocios, una cuenta podría tener un pipeline para «Nuevas ventas» y otro para «Renovaciones de contratos». Para tickets, podrías tener una cola de asistencia técnica principal y otra diferente para escalaciones. Cada uno de esas colas sería un pipeline de tickets independiente. Los puntos de terminación de los pipelines se pueden usar para sincronizar un pipeline u otro para un CRM externo. # Update pipeline (Partial) Source: https://developers.hubspot.es/docs/api-reference/latest/crm/pipelines/partially-update-pipeline specs/2026-09/crm-pipelines-v2026-09.json PATCH /crm/pipelines/2026-09/{objectType}/{pipelineId} Actualiza un pipeline existente en tu cuenta de HubSpot. Este endpoint te permite modificar propiedades específicas de un pipeline, como su etiqueta, orden de visualización o estado de archivado. Úsalo para mantener los datos de tu pipeline actualizados y organizados. > **Supported products** > **Required Scopes** # Delete Source: https://developers.hubspot.es/docs/api-reference/latest/crm/pipelines/rules/delete-pipeline-rules specs/2026-09/crm-pipeline-governance-v2026-09.json DELETE /crm/pipelines-rules/2026-09/{objectTypeId}/{pipelineId} Elimina un conjunto específico de reglas de pipeline asociadas a un tipo de objeto y un ID de pipeline determinados en tu cuenta de HubSpot. Esta operación es útil para eliminar reglas obsoletas o incorrectas de un pipeline. Asegúrate de que objectTypeId y pipelineId estén correctamente especificados para evitar eliminaciones no previstas. > **Supported products** > **Required Scopes** # Retrieve Approval Source: https://developers.hubspot.es/docs/api-reference/latest/crm/pipelines/rules/get-pipeline-approvals specs/2026-09/crm-pipeline-governance-v2026-09.json GET /crm/pipelines-rules/2026-09/{objectTypeId}/{pipelineId}/approvals/{objectId} Obtén el estado de aprobación de un objeto específico dentro de un pipeline. Este punto de conexión es útil para verificar el estado de aprobación actual de un objeto, lo cual puede ser fundamental en workflows que requieren pasos de validación o autorización. > **Supported products** > **Required Scopes** # Retrieve rules Source: https://developers.hubspot.es/docs/api-reference/latest/crm/pipelines/rules/get-pipeline-permissions specs/2026-09/crm-pipeline-governance-v2026-09.json GET /crm/pipelines-rules/2026-09/{objectTypeId}/{pipelineId} Obtén las reglas asociadas a un pipeline específico en tu cuenta de HubSpot. Este punto de conexión te permite acceder a las reglas de validación de gobernanza y a las etapas de aprobación para el pipeline especificado. Es útil para entender las restricciones y los procesos de aprobación aplicados al pipeline. > **Supported products** > **Required Scopes** # Retrieve permissions Source: https://developers.hubspot.es/docs/api-reference/latest/crm/pipelines/rules/get-pipeline-stage-permissions specs/2026-09/crm-pipeline-governance-v2026-09.json GET /crm/pipelines-rules/2026-09/{objectTypeId}/{pipelineId}/stage-edit-permissions Obtén los permisos de edición de etapas para un pipeline específico en tu cuenta de HubSpot. Este punto de conexión te permite ver los permisos configurados para editar etapas dentro de un pipeline dado, identificado por su tipo de objeto e ID de pipeline. Esto puede ser útil para gestionar el acceso y asegurar que solo los usuarios autorizados puedan modificar las etapas del pipeline. > **Supported products** > **Required Scopes** # Pipeline Rules API Source: https://developers.hubspot.es/docs/api-reference/latest/crm/pipelines/rules/guide # Update rules (Partial) Source: https://developers.hubspot.es/docs/api-reference/latest/crm/pipelines/rules/partially-update-pipeline-rules specs/2026-09/crm-pipeline-governance-v2026-09.json PATCH /crm/pipelines-rules/2026-09/{objectTypeId}/{pipelineId} Actualiza las reglas de un pipeline específico dentro de un tipo de objeto determinado en HubSpot. Esta operación te permite modificar las reglas de validación de gobernanza y las etapas de aprobación para el pipeline especificado. Es útil para mantener o alterar las reglas de workflow asociadas a tus pipelines. > **Supported products** > **Required Scopes** # Start Approval Source: https://developers.hubspot.es/docs/api-reference/latest/crm/pipelines/rules/start-pipeline-approval specs/2026-09/crm-pipeline-governance-v2026-09.json POST /crm/pipelines-rules/2026-09/{objectTypeId}/{pipelineId}/approvals/start Inicia el proceso de aprobación para un pipeline específico dentro de un tipo de objeto dado. Este punto de terminación es útil para activar workflows de aprobación asociados a las etapas del pipeline, asegurando que se obtengan las aprobaciones necesarias antes de continuar con otras acciones en el pipeline. > **Supported products** > **Required Scopes** # Update rules (Replace) Source: https://developers.hubspot.es/docs/api-reference/latest/crm/pipelines/rules/update-pipeline-rules specs/2026-09/crm-pipeline-governance-v2026-09.json PUT /crm/pipelines-rules/2026-09/{objectTypeId}/{pipelineId} Actualiza las reglas de un pipeline específico en tu cuenta de HubSpot. Este punto de conexión te permite modificar las reglas de validación de gobernanza y las etapas de aprobación asociadas a un pipeline. Requiere especificar el tipo de objeto y los identificadores del pipeline. > **Supported products** > **Required Scopes** # Create Stage Source: https://developers.hubspot.es/docs/api-reference/latest/crm/pipelines/stages/create-pipeline-stage specs/2026-09/crm-pipelines-v2026-09.json POST /crm/pipelines/2026-09/{objectType}/{pipelineId}/stages Crea una nueva etapa dentro de un pipeline específico para un tipo de objeto dado en HubSpot. Este punto de conexión es útil para añadir nuevas etapas a un pipeline, lo que permite un seguimiento y una gestión más detallados de los objetos a través de las diferentes etapas de un proceso. > **Supported products** > **Required Scopes** # Delete stage Source: https://developers.hubspot.es/docs/api-reference/latest/crm/pipelines/stages/delete-pipeline-stage specs/2026-09/crm-pipelines-v2026-09.json DELETE /crm/pipelines/2026-09/{objectType}/{pipelineId}/stages/{stageId} Elimina una etapa específica de un pipeline en tu cuenta de HubSpot. Esta operación es útil para gestionar y mantener las etapas de tu pipeline al eliminar las que ya no necesitas. Asegúrate de que cualquier referencia a la etapa se gestione correctamente antes de eliminarla. > **Supported products** > **Required Scopes** # Retrieve stage Source: https://developers.hubspot.es/docs/api-reference/latest/crm/pipelines/stages/get-pipeline-stage specs/2026-09/crm-pipelines-v2026-09.json GET /crm/pipelines/2026-09/{objectType}/{pipelineId}/stages/{stageId} Obtén los detalles de una etapa específica dentro de un pipeline para un tipo de objeto dado en HubSpot. Este punto de conexión es útil para acceder a información sobre una etapa en particular, como su etiqueta, orden de visualización y metadatos, que se pueden usar para gestionar o analizar las etapas del pipeline. > **Supported products** > **Required Scopes** # Retrieve stage audit Source: https://developers.hubspot.es/docs/api-reference/latest/crm/pipelines/stages/get-pipelines-stage-audit specs/2026-09/crm-pipelines-v2026-09.json GET /crm/pipelines/2026-09/{objectType}/{pipelineId}/stages/{stageId}/audit Obtén la información de auditoría de una etapa específica dentro de un pipeline en tu cuenta de HubSpot. Este punto de conexión proporciona detalles sobre las acciones realizadas en la etapa especificada, lo que puede ser útil para monitorizar cambios y entender el historial de modificaciones. > **Supported products** > **Required Scopes** # Update stage Source: https://developers.hubspot.es/docs/api-reference/latest/crm/pipelines/stages/update-pipeline-stage specs/2026-09/crm-pipelines-v2026-09.json PUT /crm/pipelines/2026-09/{objectType}/{pipelineId}/stages/{stageId} Actualiza una etapa específica dentro de un pipeline para un tipo de objeto determinado en HubSpot. Este punto de conexión te permite modificar los detalles de una etapa, como su etiqueta, orden de visualización y metadatos. Úsalo para mantener las etapas de tu pipeline actualizadas y alineadas con tus procesos de negocio. > **Supported products** > **Required Scopes** # Update pipeline (Replace) Source: https://developers.hubspot.es/docs/api-reference/latest/crm/pipelines/update-pipeline specs/2026-09/crm-pipelines-v2026-09.json PUT /crm/pipelines/2026-09/{objectType}/{pipelineId} Actualiza un pipeline existente en tu cuenta de HubSpot especificando el ID del pipeline y el tipo de objeto. Esta operación te permite modificar las propiedades del pipeline, como su etiqueta, orden de visualización y etapas. Asegúrate de que el cuerpo de la solicitud contenga los campos necesarios para una actualización exitosa. > **Supported products** > **Required Scopes** # Create a batch of properties Source: https://developers.hubspot.es/docs/api-reference/latest/crm/properties/batch/create-properties specs/2026-09/crm-properties-v2026-09.json POST /crm/properties/2026-09/{objectType}/batch/create Crea un lote de propiedades utilizando las mismas reglas que cuando se crea una propiedad individual. > **Supported products** > **Required Scopes** # Archive a batch of properties Source: https://developers.hubspot.es/docs/api-reference/latest/crm/properties/batch/delete-properties specs/2026-09/crm-properties-v2026-09.json POST /crm/properties/2026-09/{objectType}/batch/archive Archiva una lista especificada de propiedades. Este método devolverá una respuesta 204 No hay contenido en caso de éxito, independientemente del estado inicial de la propiedad (por ejemplo, activa, ya archivada, inexistente). > **Supported products** > **Required Scopes** # Read a batch of properties Source: https://developers.hubspot.es/docs/api-reference/latest/crm/properties/batch/get-properties specs/2026-09/crm-properties-v2026-09.json POST /crm/properties/2026-09/{objectType}/batch/read Lee una lista especificada de propiedades. > **Supported products** > **Required Scopes** # Create a property Source: https://developers.hubspot.es/docs/api-reference/latest/crm/properties/create-property specs/2026-09/crm-properties-v2026-09.json POST /crm/properties/2026-09/{objectType} Crea y devuelve una copia de una nueva propiedad para el tipo de objeto especificado. > **Supported products** > **Required Scopes** # Archive a property Source: https://developers.hubspot.es/docs/api-reference/latest/crm/properties/delete-property specs/2026-09/crm-properties-v2026-09.json DELETE /crm/properties/2026-09/{objectType}/{propertyName} Mueve una propiedad identificada por {propertyName} a la papelera de reciclaje. > **Supported products** > **Required Scopes** # Read all properties Source: https://developers.hubspot.es/docs/api-reference/latest/crm/properties/get-properties specs/2026-09/crm-properties-v2026-09.json GET /crm/properties/2026-09/{objectType} Lee todas las propiedades existentes para el tipo de objeto y la cuenta de HubSpot especificados. > **Supported products** > **Required Scopes** # Read a property Source: https://developers.hubspot.es/docs/api-reference/latest/crm/properties/get-property specs/2026-09/crm-properties-v2026-09.json GET /crm/properties/2026-09/{objectType}/{propertyName} Lee una propiedad identificada por {propertyName}. > **Supported products** > **Required Scopes** # API del CRM | Propiedades Source: https://developers.hubspot.es/docs/api-reference/latest/crm/properties/guide > **[Run in Postman](https://app.getpostman.com/run-collection/33493e154afc38038092)** > **Requisitos de ámbito** Usa las propiedades para almacenar información en los registros del CRM. HubSpot proporciona un conjunto de propiedades predeterminadas para cada objeto del CRM y también puedes crear y administrar tus propias propiedades personalizadas en [HubSpot](https://knowledge.hubspot.com/es/properties/create-and-edit-properties) o mediante la API de propiedades. Al crear propiedades, es importante tener en cuenta cómo organizar los datos. En muchos casos, la creación de propiedades personalizadas para los objetos estándar de HubSpot es el procedimiento correcto. Sin embargo, puede haber ocasiones en las que debas crear un [objeto personalizado](/docs/api-reference/crm-custom-objects-v3/guide) independiente con su propio conjunto de propiedades. ## Propiedades predeterminadas Los objetos del CRM están definidos por un tipo principal `type` y un conjunto de propiedades `properties`. Cada tipo tiene un conjunto único de propiedades estándar, representado por un mapa de pares nombre-valor. Encuentra más información sobre las propiedades predeterminadas para diferentes objetos: * [Contactos](https://knowledge.hubspot.com/es/properties/hubspots-default-contact-properties) * [Empresas](https://knowledge.hubspot.com/es/properties/hubspot-crm-default-company-properties) * [Negocios](https://knowledge.hubspot.com/es/properties/hubspots-default-deal-properties) * [Tickets](https://knowledge.hubspot.com/es/properties/hubspots-default-ticket-properties) * [Actividades](https://knowledge.hubspot.com/es/properties/hubspots-default-activity-properties) (llamadas, correos, reuniones, notas, tareas) * [Leads](https://knowledge.hubspot.com/es/properties/hubspots-default-lead-properties)(***Sales Hub*** *Pro* y *Enterprise*) ## Grupos de propiedades Los [grupos de propiedades](https://knowledge.hubspot.com/es/properties/create-and-edit-properties#create-and-edit-property-groups) se utilizan para agrupar propiedades relacionadas. Todas las propiedades agrupadas aparecerán una al lado de la otra en los registros de HubSpot. Si tu integración crea propiedades personalizadas de objetos, los grupos de propiedades personalizadas facilitarán la identificación de esos datos. ## Valores type y fieldType de las propiedades Cuando se crean o actualizan las propiedades, los valores `type` y `fieldType` son obligatorios. El valor `type` determina el tipo de propiedad, es decir, indica si es una cadena de texto o un número. La propiedad `fieldType` determina cómo aparecerá la propiedad en HubSpot o en un formulario, es decir, si aparecerá como un campo de texto sin formato, un menú desplegable o un selector de fechas. En la siguiente tabla encontrarás información sobre los valores `type` disponibles para las propiedades y los valores de `fieldType` correspondientes. | `type` | Descripción | Valores válidos de `fieldType` | | - | - | - | | `bool` | Un campo que contiene opciones binarias (por ejemplo, `Yes` o `No`, `True` o `False`). | `booleancheckbox`, `calculation_equation` | | `enumeration` | Una cadena que representa un conjunto de opciones que están separadas por un punto y coma. | `booleancheckbox`, `checkbox`, `radio`, `select`, `calculation_equation` | | `date` | Un valor que representa un día, mes y año específicos. Los valores deben estar en la zona horaria UTC y el formato puede ser [una cadena en notación ISO 8601 o una marca de tiempo EPOCH en milisegundos](#add-values-to-date-and-datetime-properties) (es decir, la media noche en la zona horaria UTC). | `date` | | `datetime` | Un valor que representa un día, mes, año y hora específicos del día. Los valores deben estar en la zona horaria UTC y el formato puede ser [una cadena en notación ISO 8601 o una marca de tiempo EPOCH en milisegundos](#add-values-to-date-and-datetime-properties). | `date` | | `string` | Una cadena de texto sin formato, limitada a 65.536 caracteres. | `file`, `text`, `textarea`, `calculation_equation`, `html`, `phonenumber` | | `number` | Un valor numérico que contiene dígitos y, como máximo, un decimal. | `number`, `calculation_equation` | | `object_coordinates` | Un valor textual utilizado para hacer referencia a otros objetos de HubSpot y que se utiliza solo para propiedades internas. Las propiedades de este tipo no se pueden crear ni editar, y no son visibles en HubSpot. | `text` | | `json` | Un valor textual almacenado en formato JSON que se utiliza solo para propiedades internas. Las propiedades de este tipo no se pueden crear ni editar, y no son visibles en HubSpot. | `text` | Los valores válidos para `fieldType` incluyen: | Fieldtype | Descripción | | - | - | | `booleancheckbox` | El input que permitirá a los usuarios seleccionar "sí" o "no". Cuando se usa en un formulario, se mostrará como una única casilla de comprobación. Descubre cómo [agregar un valor a las propiedades de casilla de comprobación única](#add-values-to-checkbox-type-properties). | | `calculation_equation` | Una ecuación personalizada que puede calcular valores basados en otros valores y asociaciones de las propiedades. Más información sobre cómo definir [propiedades de cálculo](#create-calculation-properties). | | `checkbox` | Una lista de casillas de verificación que permitirán al usuario seleccionar varias opciones de un conjunto de opciones permitidas para la propiedad. Descubre cómo dar [formato a los valores al actualizar propiedades con múltiples casillas de comprobación](#add-values-to-checkbox-type-properties). | | `date` | Un valor de fecha, que se muestra como un selector de fechas. | | `file` | Permite subir un archivo en un registro o a través de un formulario. Almacena un ID de archivo. | | `html` | Una cadena, renderizada como HTML desinfectado, que permite el uso de un editor de texto enriquecido para la propiedad. | | `number` | Una cadena de numerales o números escritos en notación decimal o científica. | | `phonenumber` | Una cadena de texto sin formato que se muestra en forma de número de teléfono. | | `radio` | Input que permitirá a los usuarios seleccionar una opción de un conjunto de opciones permitidas para la propiedad. Si se utiliza en un formulario, se mostrará como un conjunto de botones de selección. | | `select` | Input en forma de desplegable que permiten a los usuarios seleccionar una opción de un conjunto de opciones permitidas para la propiedad. | | `text` | Una cadena de texto sin formato que se muestra como un input de texto de una sola línea. | | `textarea` | Una cadena de texto sin formato, que se muestra como un input de texto de varias líneas. | ## Crear una propiedad Para crear una propiedad, envía una solicitud `POST` a `/crm/v3/properties/{objectType}`. Incluye los siguientes campos obligatorios en el cuerpo de la solicitud: * `groupName`: el [grupo de propiedades](https://knowledge.hubspot.com/es/properties/organize-and-export-properties) en el que estará la propiedad. * `name`: el nombre interno de la propiedad (por ejemplo, favorite\_food). * `label`: el nombre de la propiedad tal como aparece en HubSpot (por ejemplo, comida favorita). * `type`: el [tipo](#property-type-and-fieldtype-values) de propiedad. * `fieldType`: el [tipo de campo](#property-type-and-fieldtype-values) de la propiedad. Por ejemplo, para crear una propiedad de contacto llamada *Comida favorita*, la solicitud debería verse así: **JSON** ```json theme={null} { "groupName": "contactinformation", "name": "favorite_food", "label": "Favorite Food", "type": "string", "fieldType": "text" } ``` ## Crear propiedades de identificador único Cuando se crea un registro en HubSpot, se genera automáticamente un ID único (`hs_object_id`) que debe ser tratado como una cadena de texto. Estos ID solo son únicos dentro de ese tipo de objeto, por lo que puede haber un contacto y una empresa con el mismo ID. Para los contactos y las empresas, hay identificadores únicos adicionales, entre ellos, la dirección de correo electrónico de un contacto (`email`) y el nombre de dominio de una empresa (`domain`). En algunos casos, puede que quieras crear tu propia propiedad de identificador único, de forma que no haya la posibilidad de introducir el mismo valor para varios registros. Puedes tener hasta diez propiedades de ID único por objeto. Para crear una propiedad que requiera valores únicos a través de la API: * Haz una solicitud `POST` a `/crm/v3/properties/{objectType}`. * En el cuerpo de la solicitud, en el campo `hasUniqueValue`, establece el valor como `true`. **JSON** ```json theme={null} { "groupName": "dealinformation", "name": "system_a_unique", "label": "Unique ID for System A", "hasUniqueValue": true, "type": "string", "fieldType": "text" } ``` Una vez que hayas creado tu propiedad de ID único, puedes usarla en una llamada a la API para acceder a registros específicos. Por ejemplo, para recuperar un negocio con un valor de `abc` para la propiedad `system_a_unique`, la URL de la solicitud sería: `/crm/v3/objects/deals/abc?idProperty=system_a_unique`. Luego puedes usar este valor de propiedad de identificador único para encontrar y actualizar registros específicos de la misma manera en que podrías usar `hs_object_id`, `email` (contactos) o `domain` (empresas). ## Crear propiedades de cálculo Las propiedades de cálculo definen un valor de propiedad basado en otras propiedades dentro del mismo registro de objeto. Se definen utilizando una fórmula que puede incluir operaciones como min, max, count, sum o average. Puedes usar la API de propiedades para leer o crear propiedades de cálculo en tu cuenta de HubSpot, usando un campo `calculation_equation` y un tipo de valor `number`, `bool`, `string` o `enumeration`. Puedes definir la fórmula para calcular la propiedad con el campo `calculationFormula`. > [!WARNING] > > ### Nota: > > Las propiedades de cálculo creadas mediante la API no se pueden editar en HubSpot. Solo puedes editar estas propiedades a través de la API de propiedades. ### Sintaxis de la propiedad de cálculo Usando `calculationFormula`, puedes escribir una fórmula usando operadores aritméticos, operadores de comparación, operadores lógicos, sentencias condicionales y otras funciones. #### Sintaxis de los literales * **Literal de cadena**: Las cadenas constantes se pueden representar con comillas simples (`'constant'`) o comillas dobles (`"constant"`). * **Literal numérico**: Los números constantes pueden ser cualquier número real y pueden incluir notación de punto, `1005` y `1.5589` son números constantes válidos. * **Literal de booleano**: Los booleanos constantes pueden ser `true` o `false`. #### Sintaxis de las propiedades * **Variables de la propiedad de cadena:** para que una cadena de identificador se interprete como una propiedad de cadena, debe estar en la función `string`. Por ejemplo, `string(var1)`se interpretará como el valor de la propiedad de cadena var1. * **Variables de propiedad numérica**: todos los identificadores se interpretarán como variables de la propiedad numérica. Por ejemplo, `var1` se interpretará como el valor de la propiedad numérica var1. * **Variables de propiedad booleana**: para que un identificador se interprete como una propiedad booleana, debe estar en la función `bool`. Por ejemplo, el identificador `bool(var1)` se interpretará como el valor de la propiedad booleana var1. > [!WARNING] > > ### Nota: > > El lenguaje utilizado distingue entre mayúsculas y minúsculas en todos los tipos, excepto las cadenas. Por ejemplo, `If A ThEn B` es exactamente igual que `if a then b` pero `'a'` no es lo mismo que `'A'`. Los espacios, las tabulaciones y las nuevas líneas se utilizan para la tokenización, pero se ignoran. #### Operadores Los operadores se pueden usar con valores literales y de propiedad. Para los operadores aritméticos, puedes usar la notación de prefijo para multiplicar, y paréntesis para especificar el orden de las operaciones. | Operador | Descripción | Ejemplos | | - | - | - | | `+` | Agrega números o cadenas. | `property1 + 100` | | `-` | Resta números. | `property1 + 100 - property2` | | `*` | Multiplica números. | `10property1` = `10 * property1` | | `/` | Dividir números. | `property1 * (100 - property2/(50 - property3))` | | `<` | Comprueba si un valor es menor que otro, Y funciona con propiedades numéricas o constantes. | `a < 100` | | `>` | Comprueba si un valor es mayor que otro, Y funciona con propiedades numéricas o constantes. | `a > 50` | | `<=` | Comprueba si un valor es menor o igual que otro, Y funciona con propiedades numéricas o constantes. | `a <= b` | | `>=` | Comprueba si un valor es mayor o igual que otro, Y funciona con propiedades numéricas o constantes. | `b>= c` | | `=` | Comprueba si un valor es igual a otro, Y funciona tanto con números como con cadenas. | `(a + b - 100c * 150.652) = 150-230b` | | `equals` | Comprueba si un valor es igual a otro, Y funciona tanto con números como con cadenas. | `a + b - 100.2c * 150 equals 150 - 230` | | `!=` | Comprueba si un valor no es igual a otro, Y funciona tanto con números como con cadenas. | `string(property1) != 'test_string'` | | `or` | Comprueba si cualquiera o los dos valores es verdadero. | `a > b or b <= c` | | `and` | Comprueba si ambos valores son verdaderos. | `bool(a) and bool(c)` | | `not` | Comprueba si ninguno de los valores es verdadero. | `not (bool(a) and bool(c))` | #### Funciones Las siguientes son las funciones que se pueden aplicar: | Función | Descripción | Ejemplos | | - | - | - | | `max` | Tendrá entre 2 y 100 números, y la respuesta será el número máximo de todas las entradas. | `max(a, b, c, 100)` o `max(a, b)` | | `min` | Tendrá entre 2 y 100 números, y la respuesta será el número mínimo de todas las entradas. | `min(a, b, c, 100)` o `min(a, b)` | | `is_present` | Evalúa si se puede evaluar una expresión | `is_present(bool(a))`= true si la propiedad es booleana, pero `is_present(bool(a))` = false si la propiedad está vacía o no es booleana. | | `contains` | Tiene dos cadenas y la respuesta será "true" si la primera entrada contiene la segunda. | `contains('hello', 'ello')` = `true` y `contains('ello', 'hello')` = false. | | `concatenate` | Se une a una lista de cadenas. La lista de entradas puede ir de 2 a 100. | `concatenate('a', 'b', string(a), string(b))` | También hay dos funciones de análisis: * `number_to_string`: intenta convertir la expresión del número de entrada en una cadena. * `string_to_number`: intenta convertir la expresión de la cadena de entrada en un número. Por ejemplo, `"Number of cars: " + num_cars` no es una propiedad válida porque no puedes agregar una cadena con un número, pero `"Number of cars: " + number_to_string(num_cars)` lo es. #### Declaraciones condicionales También puedes escribir la fórmula con sentencias condicionales usando `if`, `elseif`, `endif` y `else`. Por ejemplo, una sentencia condicional podría parecerse a lo siguiente: `if boolean_expression then statement [elseif expression then statement]* [else statement | endif]` donde los corchetes `[a]` indican que "a" es opcional, `a|b` indica que pueden ser "a" o "b", y `*` significa 0 o más. `endif` se puede usar para terminar una sentencia condicional de manera anticipada para garantizar que el analizador sintáctico (parser) pueda identificar a qué `if` pertenece el siguiente `elseif`. ### Fórmulas de ejemplo A continuación encontrarás ejemplos que puedes usar para definir tus propias fórmulas de cálculo: ```json theme={null} "calculationFormula": "closed - started" ``` Un ejemplo más avanzado con condicionales: ```json theme={null} "calculationFormula": "if is_present(hs_latest_sequence_enrolled_date) then if is_present(hs_sequences_actively_enrolled_count) an hs_sequences_actively_enrolled_count >= 1 then true else false else ''" ``` ## Encontrar propiedades Puedes buscar la información de propiedades individuales o de todas las propiedades dentro de un objeto. * Para encontrar una propiedad individual, haz una solicitud `GET` a `crm/v3/properties/{object}/{propertyName}`. Por ejemplo, para encontrar la propiedad `favorite_food`, la URL de la solicitud sería `/crm/v3/properties/contacts/favorite_food` * Para encontrar todas las propiedades de un objeto, haz una solicitud `GET` a `/crm/v3/properties/{objectType}`. > [!WARNING] > > ### Nota: > > De manera predeterminada, al buscar todas las propiedades, la respuesta solo incluye las propiedades que no contienen datos sensibles. Para encontrar las propiedades de datos sensibles, incluye el parámetro de consulta `dataSensitivity` con el valor `sensitive`. Encuentra más información sobre la [gestión de datos sensibles mediante API](https://developers.hubspot.es/docs/reference/api/crm/sensitive-data#manage-sensitive-data) (BETA, *Enterprise* solamente). ## Actualizar o borrar los valores de una propiedad Para actualizar el valor de una propiedad para un registro, haz una solicitud `PATCH` a `crm/v3/objects/{objectType}/{recordId}`. En el cuerpo de tu solicitud, incluye las propiedades y sus valores en una matriz. Más información sobre la actualización de registros a través de las [API de objetos](/docs/guides/crm/understanding-the-crm). ### Añadir valores a las propiedades date y datetime Los valores de hora se muestran en formato ISO 8601 en las respuestas, pero las API aceptarán cualquiera de estos dos formatos para los valores de fecha y hora: * **Cadenas con formato ISO 8601**: según el tipo de datos, se utilizará uno de estos dos formatos: * Para los valores que representan una fecha específica, se usará el formato de fecha completa: AAAA-MM-DD (por ejemplo, `2020-02-29`) * Para los valores que representan una fecha y hora específicos, se usará un formato de fecha completo además de las horas, minutos, segundos y una fracción decimal de un segundo: AAAA-MM-DDThh:mm:ss.sTZD (por ejemplo, `2020-02-29T03:30:17.000Z`). La hora está en la zona horaria UTC, por lo que los valores siempre usarán el designador UTC "Z"." * **Marcas de tiempo en formato UNIX en milisegundos**: valores de marca de tiempo en milisegundos, que están en la zona horaria UTC. Por ejemplo, el valor de la marca de tiempo `1427997766000` se traduce al *02 de abril de 2015 a las 18:02:46 UTC* o al *2 de abril de 2015 a las 2:02:46 p. m. EDT* (horario de verano del este). Existen dos tipos de propiedades para almacenar fechas (`date` y `datetime`) que también afectan el formato de los valores: * La propiedad `date` almacena la fecha, no la hora. La propiedad `date` muestra la fecha en la que están configuradas, independientemente de la configuración de zona horaria de la cuenta o del usuario. Para los valores de la propiedad `date`, se recomienda utilizar el formato de fecha completa ISO 8601. Si utilizas el formato de marca de tiempo UNIX, debes utilizar una marca de tiempo EPOCH en milisegundos (es decir, el valor debe establecido en la medianoche de la zona UTC para la fecha). Por ejemplo, el 1 de mayo de 2015 se puede representar así en cualquiera de los dos formatos: * **ISO 8601**: 2015-05-01 * **Marca de tiempo EPOCH en milisegundos**: 1430438400000 * La propiedad `datetime` almacena tanto la fecha como la hora. Se aceptará cualquiera de estos formatos de marca de tiempo. En HubSpot, las propiedades `datetime` se muestran con base en la zona horaria del usuario que ve el registro, por lo que el valor se convertirá a la zona horaria local del usuario. ### Agregar valores a las propiedades de tipo casilla de verificación Al actualizar los valores para las propiedades de tipo casilla de verificación de un registro, los valores pueden tener los siguientes formatos: * **Propiedad de casilla de verificación** **booleana**: para que se muestre como *Sí*, o como marcada en HubSpot, el valor debe ser `true`. Para que aparezca como *No* o sin marcar en HubSpot, el valor debe ser `false`. * **Propiedad de casillas de verificación** **de selección múltiple**: para añadir o adjuntar valores a una propiedad de casillas de verificación múltiples, incluye un punto y coma antes del primer valor y separa los valores con punto y coma sin espacio entre ellos. Si la propiedad tiene un valor existente, el punto y coma inicial adjuntará los valores en lugar de sobrescribirlos. Por ejemplo, un contacto tiene el valor `DECISION_MAKER` para la propiedad `hs_buying_role`. Para agregar más valores sin sustituir el valor existente, la solicitud debería ser así: **JSON** ```json theme={null} { "properties": { "hs_buying_role": ";BUDGET_HOLDER;END_USER" } } ``` ### Asignar propietarios de registros con propiedades de usuario Al asignar usuarios a los registros del CRM a través de la API, el valor debe ser el `id` del propietario del usuario, que puedes encontrar en la [configuración de propiedades](https://knowledge.hubspot.com/es/properties/create-and-edit-properties) o a través de la [API de propietarios](/docs/api-reference/crm-crm-owners-v3/guide). Por ejemplo, para asignar un usuario como propietario de un contacto, envía una solicitud `PATCH` a `crm/v3/objects/contacts/{contactId}`, con el cuerpo `{ "properties":{ "hubspot_owner_id": "41629779"}}`. ### Borrar un valor de propiedad Puedes borrar un valor de las propiedades de objeto a través de la API configurando el valor de la propiedad como una cadena vacía. Por ejemplo, para borrar `firstname` de un objeto de contacto, envía una solicitud `PATCH` a `/crm/v3/objects/contacts/{contactId}` con el cuerpo `{ "properties": { "firstname": ""}}`. # Create a property group Source: https://developers.hubspot.es/docs/api-reference/latest/crm/properties/property-groups/create-property specs/2026-09/crm-properties-v2026-09.json POST /crm/properties/2026-09/{objectType}/groups Crea y devuelve una copia de un nuevo grupo de propiedades. > **Supported products** > **Required Scopes** # Archive a property group Source: https://developers.hubspot.es/docs/api-reference/latest/crm/properties/property-groups/delete-property specs/2026-09/crm-properties-v2026-09.json DELETE /crm/properties/2026-09/{objectType}/groups/{groupName} Mueve un grupo de propiedades identificado por {groupName} a la papelera de reciclaje. > **Supported products** > **Required Scopes** # Read all property groups Source: https://developers.hubspot.es/docs/api-reference/latest/crm/properties/property-groups/get-properties specs/2026-09/crm-properties-v2026-09.json GET /crm/properties/2026-09/{objectType}/groups Lee todos los grupos de propiedades existentes para el tipo de objeto y la cuenta de HubSpot especificados. > **Supported products** > **Required Scopes** # Read a property group Source: https://developers.hubspot.es/docs/api-reference/latest/crm/properties/property-groups/get-property specs/2026-09/crm-properties-v2026-09.json GET /crm/properties/2026-09/{objectType}/groups/{groupName} Lee un grupo de propiedades identificado por {groupName}. > **Supported products** > **Required Scopes** # Update a property group Source: https://developers.hubspot.es/docs/api-reference/latest/crm/properties/property-groups/update-property specs/2026-09/crm-properties-v2026-09.json PATCH /crm/properties/2026-09/{objectType}/groups/{groupName} Realiza una actualización parcial de un grupo de propiedades identificado por {groupName}. Se sobrescribirán los campos especificados. > **Supported products** > **Required Scopes** # Access and manage Sensitive Data Source: https://developers.hubspot.es/docs/api-reference/latest/crm/properties/sensitive-data # Update a property Source: https://developers.hubspot.es/docs/api-reference/latest/crm/properties/update-property specs/2026-09/crm-properties-v2026-09.json PATCH /crm/properties/2026-09/{objectType}/{propertyName} Realizar una actualización parcial de una propiedad identificada por { propertyName }. Se sobrescribirán los campos proporcionados. > **Supported products** > **Required Scopes** # Read validation rules for a property Source: https://developers.hubspot.es/docs/api-reference/latest/crm/property-validations/get-property-validation specs/2026-09/crm-property-validations-v2026-09.json GET /crm/property-validations/2026-09/{objectTypeId}/{propertyName} Leer las reglas de validación de una propiedad identificada por {propertyName}. > **Supported products** > **Required Scopes** # Read all property validation rules for an object Source: https://developers.hubspot.es/docs/api-reference/latest/crm/property-validations/get-property-validations specs/2026-09/crm-property-validations-v2026-09.json GET /crm/property-validations/2026-09/{objectTypeId} Leer todas las propiedades con reglas de validación para un objeto dado. > **Supported products** > **Required Scopes** # Retrieve a validation rule for a specific property and rule type, providing details on how property values should be formatted. Source: https://developers.hubspot.es/docs/api-reference/latest/crm/property-validations/get-property-validations-ruleType specs/2026-09/crm-property-validations-v2026-09.json GET /crm/property-validations/2026-09/{objectTypeId}/{propertyName}/rule-type/{ruleType} Obtener una regla de validación específica para una propiedad identificada por su nombre y tipo de regla. > **Supported products** > **Required Scopes** # Property Validations API Source: https://developers.hubspot.es/docs/api-reference/latest/crm/property-validations/guide # Update a validation rule for a specific property and rule type, allowing customization of property value constraints. Source: https://developers.hubspot.es/docs/api-reference/latest/crm/property-validations/update-property-validation specs/2026-09/crm-property-validations-v2026-09.json PUT /crm/property-validations/2026-09/{objectTypeId}/{propertyName}/rule-type/{ruleType} Actualizar una regla de validación específica para una propiedad identificada por su nombre y tipo de regla. > **Supported products** > **Required Scopes** # Create data source Source: https://developers.hubspot.es/docs/api-reference/latest/data-studio/datasource-ingestion/create-datasource specs/2026-09/data-studio-datasource-ingestion-v2026-09.json POST /data-studio/data-source/2026-09 Sube un archivo (csv, tsv, json o xlsx) junto con un esquema de columnas para crear una nueva fuente de datos. Usa multipart/form-data con una parte JSON de la solicitud (que contiene datasourceName, datasourceType: FILE y config.file con las definiciones de las columnas) y una parte binaria del archivo. > **Supported products** > **Required Scopes** # Delete data source Source: https://developers.hubspot.es/docs/api-reference/latest/data-studio/datasource-ingestion/delete-datasource specs/2026-09/data-studio-datasource-ingestion-v2026-09.json DELETE /data-studio/data-source/2026-09/{datasourceId} Elimina una fuente de datos en Data Studio de HubSpot. Esta operación se usa para eliminar una fuente de datos específica identificada por su ID. Asegúrate de que la fuente de datos ya no sea necesaria antes de eliminarla, ya que esta acción no se puede deshacer. > **Supported products** > **Required Scopes** # Retrieve data source Source: https://developers.hubspot.es/docs/api-reference/latest/data-studio/datasource-ingestion/get-datasource specs/2026-09/data-studio-datasource-ingestion-v2026-09.json GET /data-studio/data-source/2026-09/{datasourceId} Obtén información detallada sobre una fuente de datos específica en Data Studio de HubSpot. Este punto de terminación proporciona detalles como el nombre, el tipo, la fecha de creación y el estado de la última ingesta de datos de la fuente. Es útil para desarrolladores que necesitan acceder a fuentes de datos y gestionarlas de forma programática. > **Supported products** > **Required Scopes** # Data source ingestion API Source: https://developers.hubspot.es/docs/api-reference/latest/data-studio/datasource-ingestion/guide # Update data source Source: https://developers.hubspot.es/docs/api-reference/latest/data-studio/datasource-ingestion/update-datasource specs/2026-09/data-studio-datasource-ingestion-v2026-09.json PUT /data-studio/data-source/2026-09/{datasourceId} Actualiza una fuente de datos existente en Data Studio de HubSpot. Este punto de conexión te permite modificar los detalles de una fuente de datos específica identificada por su datasourceId. La solicitud debe incluir un cuerpo de datos de formulario multiparte con los campos necesarios para actualizar la fuente de datos > **Supported products** > **Required Scopes** # Create an event definition Source: https://developers.hubspot.es/docs/api-reference/latest/events/define-events/create-event-definition specs/2026-09/events-manage-event-definitions-v2026-09.json POST /events/2026-09/event-definitions Crea una nueva definición de evento de comportamiento en la cuenta de HubSpot. Este punto de terminación te permite definir la estructura y las propiedades de un nuevo evento de comportamiento, que luego puedes usar para rastrear acciones o comportamientos específicos de los usuarios. El cuerpo de la solicitud debe incluir los detalles del evento y las definiciones de propiedades necesarios. > **Supported products** > **Required Scopes** # Create an event property Source: https://developers.hubspot.es/docs/api-reference/latest/events/define-events/create-event-property specs/2026-09/events-manage-event-definitions-v2026-09.json POST /events/2026-09/event-definitions/{eventName}/property Crea una nueva propiedad para una definición de evento específica en la cuenta de HubSpot. Este punto de terminación te permite definir propiedades personalizadas asociadas a un evento particular, mejorando el seguimiento y análisis de los eventos de comportamiento. La solicitud debe incluir un cuerpo JSON con los detalles de propiedad necesarios. > **Supported products** > **Required Scopes** # Delete an event definition Source: https://developers.hubspot.es/docs/api-reference/latest/events/define-events/delete-event-definition specs/2026-09/events-manage-event-definitions-v2026-09.json DELETE /events/2026-09/event-definitions/{eventName} Elimina una definición de evento específica en tu cuenta de HubSpot usando el nombre único del evento. Esta operación es útil para quitar definiciones de eventos obsoletas o incorrectas que ya no necesitas. > **Supported products** > **Required Scopes** # Delete an event property Source: https://developers.hubspot.es/docs/api-reference/latest/events/define-events/delete-event-property specs/2026-09/events-manage-event-definitions-v2026-09.json DELETE /events/2026-09/event-definitions/{eventName}/property/{propertyName} Elimina una propiedad específica de la definición de un evento en tu cuenta de HubSpot. Esta operación es útil cuando necesitas quitar propiedades obsoletas o incorrectas de la definición de un evento. Asegúrate de que los nombres del evento y la propiedad estén especificados con precisión para evitar eliminaciones no deseadas. > **Supported products** > **Required Scopes** # Get an event definition Source: https://developers.hubspot.es/docs/api-reference/latest/events/define-events/get-event-definition specs/2026-09/events-manage-event-definitions-v2026-09.json GET /events/2026-09/event-definitions/{eventName} Obtén la definición de un evento de comportamiento específico en tu cuenta de HubSpot al proporcionar el nombre del evento. Este punto de terminación devuelve información detallada sobre el tipo de evento, incluidas sus propiedades y asociaciones. > **Supported products** > **Required Scopes** # Get all event definitions Source: https://developers.hubspot.es/docs/api-reference/latest/events/define-events/get-event-definitions specs/2026-09/events-manage-event-definitions-v2026-09.json GET /events/2026-09/event-definitions Obtén una lista de las definiciones de eventos disponibles en tu cuenta de HubSpot. Este punto de terminación te permite buscar y filtrar definiciones de eventos según varios criterios, como cadenas de búsqueda y opciones de paginación. Es útil para gestionar y entender los diferentes tipos de eventos con seguimiento en tu cuenta. > **Supported products** > **Required Scopes** # Definir eventos personalizados Source: https://developers.hubspot.es/docs/api-reference/latest/events/define-events/guide > **Requisitos de ámbito** Los eventos personalizados te permiten definir y hacer un seguimiento de eventos exclusivos de tu empresa, como eventos en tu sitio web o en una aplicación. Puedes configurar eventos para almacenar información dentro de las propiedades, que luego podrás utilizar en todas las herramientas de HubSpot. Para enviar los datos del [evento personalizado](/docs/api-reference/events-send-event-completions-v3/guide) a HubSpot, primero tienes que definir el evento. Esto es similar a los objetos personalizados del CRM, donde primero tienes que definir el objeto personalizado antes de poder crear registros individuales para ese objeto. La definición de un evento incluye detalles como sus metadatos, asociaciones de objetos del CRM y propiedades. A continuación, obtén más información sobre cómo crear y gestionar definiciones de eventos utilizando la API. Para aprender a crear definiciones de eventos sin utilizar la API, consulta la [base de conocimientos de HubSpot](https://knowledge.hubspot.com/es/reports/create-custom-events). ## Crear una definición de evento Para crear el esquema de evento personalizado, haz una solicitud `POST` a `events/v3/event-definitions`. En el cuerpo de la solicitud, incluye definiciones para tu esquema de eventos, incluyendo su etiqueta, nombre, asociaciones de objetos del CRM y propiedades personalizadas. El cuerpo de la solicitud que aparece a continuación proporciona un ejemplo básico de definición de un evento: ```json theme={null} { "label": "My event label", "name": "unique_event_name", "description": "An event description that helps users understand what the event tracks.", "primaryObject": "COMPANY", "propertyDefinitions": [ { "name": "choice-property", "label": "Choice property", "type": "enumeration", "options": [ { "label": "Option 1", "value": "1" }, { "label": "Option 2", "value": "2" } ] }, { "name": "string-property", "label": "String property", "type": "string" } ], "includeDefaultProperties": true } ``` Si quieres vincular automáticamente las finalizaciones de eventos a registros de un tipo de objeto del CRM específico, puedes incluir un `customMatchingId` en tu solicitud `POST`. Dentro de este campo, define un objeto `primaryObjectRule` con dos campos: la propiedad única del objeto que has configurado previamente como `targetObjectPropertyName` y una de las propiedades que has definido en `propertyDefinitions` a partir de la definición de tu evento. Por ejemplo, el siguiente cuerpo de solicitud especifica un `customMatchingId` que coincide con un nombre de propiedad de objeto del CRM de `"unique_object_property"` y el nombre de propiedad de evento de `"string_property"`: ```json theme={null} { "label": "My event label", "name": "unique_event_name", "description": "An event description that helps users understand what the event tracks.", "primaryObject": "COMPANY", "propertyDefinitions": [ { "name": "string-property", "label": "String property", "type": "string" } ], "customMatchingId": { "primaryObjectRule": { "targetObjectPropertyName": "unique_object_property", "eventPropertyName": "event_property" } } } ``` La lista completa de parámetros disponibles para el cuerpo de la solicitud se detalla en la tabla siguiente: | Parámetro | Tipo | Descripción | | - | - | - | | `label` | Cadena | La etiqueta legible del evento, que se mostrará en HubSpot (hasta 100 caracteres). Las etiquetas largas pueden aparecer cortadas en algunas partes de la interfaz de usuario de HubSpot. | | `name` | Cadena | El nombre interno y único del evento, que utilizarás para hacer referencia al evento a través de la API. Si no se proporciona ningún valor, HubSpot generará uno automáticamente basándose en la etiqueta.
        • Esta propiedad no puede modificarse una vez creada la definición del evento.
        • Esta propiedad solo puede contener letras minúsculas, números, guiones bajos y guiones (hasta 50 caracteres).
        • El primer carácter debe ser una letra.
        | | `description` | Cadena | La descripción del evento, que se mostrará en HubSpot. | | `primaryObject` | Cadena | El tipo de objeto del CRM al que se asociarán los datos del evento. Las finalizaciones de eventos aparecerán en los registros del CRM de ese tipo de objeto. Puede ser uno de los siguientes: `"CONTACT"` (predeterminado), `"COMPANY"`, `"DEAL"`, `"TICKET"`, `""`. Este no se puede modificar después de crear la definición del evento. | | `propertyDefinitions` | Matriz | Además de las [propiedades de evento predeterminadas de HubSpot](#hubspot-s-default-event-properties), puedes incluir esta matriz para definir propiedades de evento personalizadas (hasta 50). Para cada objeto propiedad, incluye los siguientes campos:
        • `name`: el nombre interno de la propiedad, que utilizarás cuando envíes datos de eventos a través de la API.
        • `label`: la etiqueta en la aplicación de la propiedad.
        • `type`: el [tipo de propiedad](#event-properties). De forma predeterminada es `string`.
        • `options`: para las propiedades de tipo `enumeration`, esta matriz define los valores disponibles. Debe incluir un `label` y un `value` para cada opción.
        • `description`: texto que describe la propiedad.
        | | `customMatchingId` | Objeto | Como alternativa a incluir el `objectId` del objeto de destino en los datos de finalización del evento, este campo opcional define una regla para vincular automáticamente las finalizaciones de eventos a registros del tipo de objeto del CRM especificado. Esto se hace haciendo coincidir el valor de una propiedad de los datos del evento con el valor de una propiedad única del objeto de destino. Este objeto debe incluir un objeto anidado `primaryObjectRule`, que a su vez debe incluir dos campos:
        • `targetObjectPropertyName`: una cadena que especifica el nombre de la propiedad única en el objeto del CRM de destino que se utilizará para la asignación.
        • `eventPropertyName`: una cadena que especifica el nombre de la propiedad en los datos del evento personalizado que se utilizará para la asignacicón.
        | | `includeDefaultProperties` | Booleano | Campo opcional que especifica si el evento debe incluir el conjunto de [propiedades predeterminadas del evento](#hubspot-s-default-event-properties). Si no se proporciona ningún valor, este campo se establecerá automáticamente como `true`. | ## Propiedades de eventos Las propiedades de evento personalizado se utilizan para almacenar información sobre la finalización de eventos personalizados individuales. Estas propiedades deben utilizarse cuando sea apropiado para enviar finalizaciones de eventos, pero no son necesarias para que una finalización de evento sea válida. Para cada definición de evento, HubSpot proporciona un conjunto predeterminado de 32 propiedades. Además, puedes crear hasta 50 propiedades personalizadas por definición de evento. Las propiedades pueden ser de los siguientes tipos: * `bool`: propiedad que recibe un valor booleano. Los valores deben representarse como `true` o `false`. * `date`: propiedad que recibe una fecha que representa un día, un mes y un año específicos. Los valores deben estar en la zona horaria UTC y el formato puede ser [una cadena en notación ISO 8601](/docs/api-reference/crm-properties-v3/guide#add-values-to-date-and-datetime-properties) o una marca de tiempo EPOCH en milisegundos (es decir, la media noche en la zona horaria UTC). * `datetime`: Propiedad que recibe valores en milisegundos de epoch o ISO8601 que representan una marca de tiempo. * `enumeration`: Una propiedad con opciones predefinidas. Al crear este tipo de propiedad, incluye una matriz `options` para establecer los valores disponibles. * `number`: propiedad que recibe valores numéricos con hasta un decimal. * `string`: una propiedad que recibe cadenas de texto sin formato. Si el nombre de la propiedad contiene las palabras `url`, `referrer`, o `link`, el valor de propiedad puede tener hasta 1024 caracteres. De lo contrario, los valores de propiedad pueden tener hasta 256 caracteres. A continuación, obtén información sobre las propiedades del evento predeterminadas de HubSpot, sobre cómo [definir nuevas propiedades para eventos existentes](#define-new-properties), y sobre cómo [actualizar las propiedades personalizadas del evento existentes](#update-existing-custom-properties). ### Propiedades del evento predeterminadas de HubSpot * `hs_asset_description` * `hs_asset_type` * `hs_browser` * `hs_campaign_id` * `hs_city` * `hs_country` * `hs_device_name` * `hs_device_type` * `hs_element_class` * `hs_element_id` * `hs_element_text` * `hs_language` * `hs_link_href` * `hs_operating_system` * `hs_operating_version` * `hs_page_content_type` * `hs_page_id` * `hs_page_title` * `hs_page_url` * `hs_parent_module_id` * `hs_referrer` * `hs_region` * `hs_screen_height` * `hs_screen_width` * `hs_touchpoint_source` * `hs_tracking_name` * `hs_user_agent` * `hs_utm_campaign` * `hs_utm_content` * `hs_utm_medium` * `hs_utm_source` * `hs_utm_term` ### Definir nuevas propiedades Para definir una nueva propiedad en un evento personalizado existente, haz una solicitud `POST` a `events/v3/event-definitions/{eventName}/property`. En el cuerpo de la solicitud, incluye la definición de tu propiedad. ```json theme={null} { "name": "property-name", "label": "Property name", "type": "enumeration", "options": [ { "label": "label", "value": "value" } ] } ``` Cuando pongas nombre a tu propiedad, ten en cuenta lo siguiente: * Una vez que creas una propiedad, su nombre no se puede cambiar. * El nombre solo puede contener letras minúsculas, números, guiones bajos y guiones. * El primer carácter del nombre de propiedad debe ser una letra. * El nombre de propiedad y la etiqueta pueden tener hasta 50 caracteres cada uno. * Si no se proporciona un nombre de propiedad, se autogenerará uno utilizando la etiqueta de la propiedad. * Las etiquetas largas pueden quedar cortadas en algunas partes de la interfaz de HubSpot. ### Actualizar propiedades personalizadas existentes Para actualizar una propiedad existente en un evento personalizado, haz una solicitud `PATCH` a `events/v3/event-definitions/{eventName}/property`. Los únicos campos que se pueden actualizar en una propiedad son los de `label`, `description`, y `options` para las propiedades de enumeración. > [!WARNING] > > ### Nota: > > Para cambiar el tipo de propiedad, utiliza el interruptor `DELETE` para eliminar la propiedad y volver a crearla con el tipo correcto. ### Eliminar una propiedad Para eliminar una propiedad existente en un evento personalizado, haz una solicitud `DELETE` a `events/v3/event-definitions/{eventName}/property/{propertyName}`. Cuando se elimina una propiedad, ya no estará disponible para su uso en futuras finalizaciones de eventos. Las finalizaciones anteriores seguirán teniendo los valores de propiedad. ## Actualizar un evento Para actualizar un esquema de evento personalizado existente, haz una solicitud `PATCH` a `events/v3/event-definitions/{eventName}`. Los únicos campos de definición de eventos que se pueden actualizar son `label` y `description`. ```json theme={null} { "label": "Event label", "description": "A description of the event" } ``` ## Eliminar un evento Para eliminar un evento personalizado, haz una solicitud `DELETE` a `events/v3/event-definitions/{eventName}`. Al eliminar un evento personalizado, se eliminará de cualquier otra herramienta de HubSpot que haga referencia a él, como workflows e informes. > [!WARNING] > > ### Ten en cuenta que cuando elimines un evento: > > 1. Todos los eventos de esa definición de evento se eliminarán y serán irrecuperables. > 2. Los `eventName` borrados previamente no se pueden volver a utilizar, así que ten cuidado al borrar un evento. ## Obtener definiciones de eventos existentes Para obtener una única definición de evento, haz una solicitud `GET` a `events/v3/event-definitions/{eventName}`. Para buscar definiciones de eventos por criterios específicos, haz una solicitud `GET` a `events/v3/event-definitions`. Puedes proporcionar los siguientes parámetros de consulta para ajustar tu búsqueda: * `searchString`: busca eventos que contengan los caracteres especificados en el campo `name`. La búsqueda no es difusa, sino que se trata de una búsqueda simple que *verifica* si el término está contenido. * `after`: una cadena con hash proporcionada en las respuestas paginadas para visualizar la siguiente página de los resultados de la búsqueda. * `limit`: el número máximo de resultados a devolver. * `includeProperties`: un valor booleano que especifica si se incluyen propiedades del evento en los resultados devueltos. # Update an event definition Source: https://developers.hubspot.es/docs/api-reference/latest/events/define-events/update-event-definition specs/2026-09/events-manage-event-definitions-v2026-09.json PATCH /events/2026-09/event-definitions/{eventName} Actualiza la definición de un evento de comportamiento específico en tu cuenta de HubSpot. Esta operación te permite modificar las propiedades y plantillas asociadas al evento. El parámetro de ruta eventName identifica el evento que se va a actualizar. > **Supported products** > **Required Scopes** # Update an event property Source: https://developers.hubspot.es/docs/api-reference/latest/events/define-events/update-event-property specs/2026-09/events-manage-event-definitions-v2026-09.json PATCH /events/2026-09/event-definitions/{eventName}/property/{propertyName} Actualiza una propiedad específica de la definición de un evento de comportamiento en la cuenta de HubSpot. Esta operación te permite modificar los detalles de una propiedad existente asociada a un evento determinado. Usa este punto de terminación para mantener las propiedades de los eventos actualizadas con la información más reciente. > **Supported products** > **Required Scopes** # Eventos de API | Evento Analíticas Source: https://developers.hubspot.es/docs/api-reference/latest/events/guide # Evento Analíticas Utiliza la API de análisis de eventos para buscar eventos asociados con registros de CRM de cualquier tipo (solo ***Marketing Hub*** *Enterprise*, ***Sales Hub*** *Enterprise*, ***Service Hub*** *Enterprise* o ***CMS Hub*** *Enterprise*). Esto incluye eventos estándar, como visitas a páginas web y aperturas de correos electrónicos, además de [eventos personalizados](/docs/api-reference/events-send-event-completions-v3/guide). Por ejemplo, usa esta API para ver una cronología de las interacciones que un contacto ha tenido con tu contenido. Luego puedes usar esta cronología para crear un conjunto de datos para analíticas personalizadas o presentar una cronología de contacto en una aplicación externa. ## Consultar eventos individuales completados Esta API devuelve eventos para un registro de CRM a la vez. Puedes seleccionar el registro especificando el `objectType` e incluir el parámetro de consulta `objectId` o `objectProperty`. ### Seleccionar por ID de objeto Para especificar un registro por su ID, agrega el parámetro de consulta `objectId`. Por ejemplo, para especificar un registro de contacto con el ID de *2832*, deberías hacer la siguiente solicitud `GET`: `/events/v3/events/?objectType=contact&objectId=224834` ### Seleccionar por propiedad de objeto Para especificar un registro por una propiedad única en lugar de ID de contacto, agrega el parámetro `objectProperty`. Consulta la propiedad incluyendo el nombre de la propiedad y el valor en el siguiente formato: `objectProperty.{propname}={propvalue}` Por ejemplo, para especificar un contacto por su dirección de correo electrónico, deberías hacer la siguiente solicitud `GET`: `/events/v3/events/?objectType=contact&objectProperty.email=user12@dev.com` ## Consulta y filtrado de tipos de eventos Cuando buscas para los eventos asociados con un objeto de CRM determinado, la respuesta incluirá todos los tipos de eventos, incluidos eventos de comportamiento personalizados. Para devolver solo finalizaciones de eventos para un tipo de evento específico, puedes incluir un parámetro `eventType`, seguido del nombre del evento. Para obtener una lista de todos los tipos de eventos disponibles, puedes hacer una solicitud `GET` a `/events/v3/events/event-types`. La respuesta devolverá todos los tipos de eventos en tu cuenta. A continuación, puedes usar uno de estos nombres de eventos como parámetro de consulta en una solicitud `GET` al punto de terminación `/events/v3/events`. Por ejemplo: `/events/v3/events/eventType={EVENT_NAME}&objectType=contact&objectId=224834` # Retrieve event types Source: https://developers.hubspot.es/docs/api-reference/latest/events/retrieve-events/get-event-types specs/2026-09/events-events-v2026-09.json GET /events/event-occurrences/2026-09/event-types Recupera una lista de nombres de tipos de eventos. Puedes utilizar estos tipos de eventos para consultar la API en busca de ocurrencias de eventos del tipo deseado. Nota: el método `get_types` solo es compatible con la versión `12.0.0-beta.1` o posterior del SDK de Python. > **Supported products** > **Required Scopes** # Retrieve event occurrences Source: https://developers.hubspot.es/docs/api-reference/latest/events/retrieve-events/get-events specs/2026-09/events-events-v2026-09.json GET /events/event-occurrences/2026-09 Obtén las ocurrencias de eventos para una fecha específica en septiembre de 2026. Este punto de conexión te permite filtrar y ordenar eventos según varios criterios, como el tipo de evento, el tipo de objeto y las fechas de ocurrencia. Admite paginación y puede devolver propiedades específicas de los eventos si se solicita. > **Supported products** > **Required Scopes** # Send a batch of event occurrences Source: https://developers.hubspot.es/docs/api-reference/latest/events/send-event-data/batch-send-occurrences specs/2026-09/events-send-event-completions-v2026-09.json POST /events/2026-09/send/batch Enviar varias ocurrencias de eventos a la vez. > **Supported products** > **Required Scopes** # Enviar finalizaciones de evento personalizado Source: https://developers.hubspot.es/docs/api-reference/latest/events/send-event-data/guide > **Productos compatibles** > **Requisitos de ámbito** Los eventos personalizados son eventos definidos por la cuenta que almacenan detalles del evento en las propiedades del evento. Además de [personalizar tu código de seguimiento](/docs/api-reference/legacy/tracking-code-v1/overview) para enviar datos de eventos a HubSpot, también puedes enviar datos de finalización de eventos a través de esta API. A continuación, aprende a utilizar la API para crear eventos personalizados y enviar o recuperar los datos de eventos personalizados. ## Definir el evento Para enviar datos de finalización de eventos a HubSpot, primero debes definir el evento en sí, incluidos sus metadatos, asociaciones de objetos de CRM y propiedades. Puedes definir eventos usando la [API de definición de eventos personalizados](/docs/api-reference/events-manage-event-definitions-v3/guide), o, si tienes una suscripción a ***Marketing Hub** Enterprise*, puedes [crear el evento en HubSpot](https://knowledge.hubspot.com/es/analytics-tools/create-codeless-custom-behavioral-events). Al crear el evento, HubSpot proporcionará un conjunto de propiedades de [evento predeterminadas](/docs/api-reference/events-manage-event-definitions-v3/guide#hubspot-s-default-event-properties) que puedes usar para almacenar los datos del evento. También puedes [crear propiedades adicionales](/docs/api-reference/events-manage-event-definitions-v3/guide#define-new-properties) para el evento. Estas propiedades se pueden crear o editar en cualquier momento. Una vez que hayas configurado tu evento, puedes enviarle datos a través de la API o al [personalizar tu código de seguimiento de HubSpot](/docs/api-reference/legacy/tracking-code-v1/overview). ## Enviar datos de eventos Para enviar datos de eventos a HubSpot, realiza una solicitud `POST` a `https://api.hubspot.com/events/v3/send` con los datos del evento en el cuerpo de la solicitud. Antes de enviar datos de eventos, revisa los límites a continuación, ya que exceder estos límites ocasionará un error. ```json theme={null} { "eventName": "pe1234567_login_event", "objectId": "608051", "occurredAt": "2024-06-28T12:09:31Z", "properties": { "hs_city": "Cambridge", "hs_country": "United States", "hs_page_id": "53005768010", "hs_page_content_type": "LANDING_PAGE", "hs_device_type": "PDA;Smartphone", "hs_touchpoint_source": "DIRECT_TRAFFIC" } } ``` | Parámetro | Tipo | Descripción | | - | - | - | | `eventName` | Cadena | El nombre interno del evento. Puedes encontrarlo [consultando las definiciones de eventos existentes](/docs/api-reference/events-manage-event-definitions-v3/guide#get-existing-event-definitions) o [dentro de la aplicación HubSpot](https://knowledge.hubspot.com/es/reports/create-custom-events#find-internal-name). | | `objectId` | Cadena | El ID del registro del CRM al que se asociará el evento. Para contactos, de forma alterna puedes usar el campo `email` o `utk` para identificar el contacto con la dirección de correo electrónico o el [token de usuario de HubSpot](/docs/api-reference/legacy/tracking-code-v1/overview). Todos los demás tipos de objetos requieren `objectId`, a menos que se defina un ID personalizado para el evento. Si se define un `customMatchingId` para el evento, HubSpot establecerá o anulará automáticamente el `objectId` según la asignación configurada. Obtén más información en la [guía de definiciones de eventos personalizados](/docs/api-reference/events-manage-event-definitions-v3/guide#create-an-event-definition). | | `occurredAt` | Cadena | De forma predeterminada, HubSpot establecerá la marca de tiempo de finalización del evento en el momento en que se envía la solicitud. Para especificar la hora de finalización del evento, incluye una marca de tiempo en un campo `occurredAt` del cuerpo de la solicitud `POST` ([formato ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)). Esto puede ser útil para que los datos de eventos se actualicen para reflejar con mayor precisión la finalización de eventos en la realidad. | | `properties` | Objeto | Las propiedades del evento al que se enviarán los datos. Esto puede incluir [las propiedades de evento predeterminadas de HubSpot](/docs/api-reference/events-manage-event-definitions-v3/guide#hubspot-s-default-event-properties) o cualquier [propiedad personalizada](/docs/api-reference/events-manage-event-definitions-v3/guide#define-new-properties) que hayas definido para el evento. La mayoría de las propiedades de evento predeterminadas son propiedades de cadena, pero puedes ver todas las propiedades de evento disponibles [consultando la definición del evento](/docs/api-reference/events-manage-event-definitions-v3/guide#get-existing-event-definitions) o navegando al evento en HubSpot. Si se ha configurado un ID de coincidencia personalizado [para el evento](/docs/api-reference/events-manage-event-definitions-v3/guide#create-an-event-definition), puedes omitir `objectId`. HubSpot intentará vincular el evento con un objeto del CRM ajustando el `objectId` en el evento basándose en la asignación configurada. Más información sobre las [propiedades personalizadas del evento](#event-properties) a continuación. | > [!WARNING] > > ### Nota: > > Exceder cualquiera de los siguientes límites hará que la solicitud falle: > > * La etiqueta de la propiedad y el nombre interno están limitados a 50 caracteres. > * Las propiedades de URL y referente pueden recibir hasta 1024 caracteres, mientras que todas las demás propiedades pueden recibir hasta 256 caracteres. > * Cada finalización de evento puede contener datos de hasta 50 propiedades. > * Los nombres internos de las propiedades deben empezar por una letra y contener solo letras minúsculas de la A a la Z, números del 0 al 9 y guiones bajos. > * Las propiedades con el mismo nombre interno después de las minúsculas se consideran duplicadas y solo se utilizará una de las propiedades al finalizar. HubSpot ordenará de forma lexicográfica ascendente y mantendrá las últimas propiedades vistas entre las primeras 50 propiedades. > * Hay un límite de 500 definiciones de eventos únicos por cuenta. > * Hay un límite de 30 millones de finalizaciones de eventos por mes. ## Recuperar datos de eventos Para [recuperar los datos de eventos](/docs/api-reference/events-manage-event-definitions-v3/guide#get-%2Fevents%2Fv3%2Fevents%2F) de un contacto, haz una solicitud `GET` a `/events/v3/events`. * Para devolver todas las finalizaciones de un evento específico, incluye el parámetro `eventType` junto con el nombre interno del evento (por ejemplo, `pe123456_custom_event`). Puedes recuperar todos los tipos de eventos utilizando [la API de análisis de eventos](/docs/api-reference/events-manage-event-definitions-v3/guide#get-%2Fevents%2Fv3%2Fevents%2Fevent-types). * Para devolver las finalizaciones de eventos de un objeto concreto, incluye el parámetro `objectType` junto con los parámetros `objectId` o `objectProperty.`. El `objectType` debe especificar el tipo de objeto del CRM (por ejemplo, `contact`), mientras que los otros parámetros especifican el valor del identificador único del objeto (ya sea el ID del registro o un valor de propiedad de identificador único). Para los contactos, puedes utilizar `email` como propiedad de identificador único. Por ejemplo, para recuperar todos los eventos completados por un contacto específico, tu URL de solicitud podría ser: `/events/v3/events?objectType=contact&objectId=111111`. También puedes utilizar la dirección de correo electrónico del contacto: `/events/v3/events?objectType=contacts&objectProperty.email=bilbo@shire.com` Para filtrar los resultados por finalizaciones de eventos con un valor de propiedad de evento específico, puedes incluir el parámetro `property.`. Por ejemplo, para recuperar eventos de visitas a páginas de tu página de inicio, tu URL de solicitud podría ser: `/events/v3/events?eventType=e_visited_page&property.hs_page_title=home` > [!NOTE] > > Para los valores de propiedad con espacios, sustitúyelos por `%20` o `+`. Por > ejemplo: `property.hs_page_title=home+page`. Obtén más información sobre los parámetros disponibles en la [documentación de referencia](/docs/api-reference/events-manage-event-definitions-v3/guide#get-%2Fevents%2Fv3%2Fevents%2F). ## Propiedades de eventos Los datos de eventos se almacenan en propiedades, ya sea en el conjunto de [propiedades de eventos predeterminadas](/docs/api-reference/events-manage-event-definitions-v3/guide#hubspot-s-default-event-properties) o en las [propiedades definidas personalizadas](/docs/api-reference/events-manage-event-definitions-v3/guide#define-new-properties). Cuando envíes los datos de eventos, incluye un objeto `properties` con pares clave-valor para las propiedades que quieras actualizar junto con los valores de las propiedades a almacenar. ```json theme={null} "properties": { "property1": "string", "property2": "string", "property3": "string" } ``` Los valores que envíes dependerán del tipo de propiedad del evento. La mayoría de las propiedades de evento predeterminadas son texto de una sola línea (cadena). Sin embargo, puedes crear propiedades personalizadas de cualquier tipo para cada evento. Reseña la siguiente tabla al formatear valores de propiedad. | Tipo de propiedad | Descripción | | - | - | | `bool` | Un valor booleano, puede ser `true` o `false`. | | `enumeration` | Una cadena que representa un conjunto de opciones. Al enviar varios valores, sepáralos con punto y coma. En HubSpot, este tipo corresponde a las propiedades de selección desplegable, selección en lista y múltiples casilla de verificación. | | `date` | Un valor que representa un día, mes y año específicos. Los valores deben estar en la zona horaria UTC y el formato puede ser [una cadena en notación ISO 8601](/docs/api-reference/crm-properties-v3/guide#add-values-to-date-and-datetime-properties) o una marca de tiempo EPOCH en milisegundos (es decir, la media noche en la zona horaria UTC). | | `datetime` | Una marca de tiempo que representa un día, mes, año y hora específicos del día. Los valores deben estar en la zona horaria UTC y el formato puede ser [una cadena en notación ISO 8601 o una marca de tiempo EPOCH en milisegundos](/docs/api-reference/crm-properties-v3/guide#add-values-to-date-and-datetime-properties). | | `number` | Un valor numérico que contiene dígitos y, como máximo, un decimal. En HubSpot, este tipo corresponde a las propiedades numéricas y calculadas. | | `string` | Una cadena de texto sin formato, limitada a 65.536 caracteres. En HubSpot, este tipo corresponde a propiedades de texto de una sola línea y de varias líneas. | Para ver las propiedades disponibles de un evento: * En tu cuenta de HubSpot, navega a **Gestión de datos** > **Eventos personalizados**. * En la tabla, haz clic en el **nombre** de la CTA. * En la parte superior, haz clic en la pestaña **Propiedades**. * En la tabla de propiedades, ve el tipo de propiedad bajo el nombre de la propiedad. ![tabla-de-propiedades-de-eventos-personalizados](https://www.hubspot.es/hubfs/Knowledge_Base_2021/Developer/custom-event-properties-table.png) ## Informes de atribuciones Los eventos de JavaScript, como [el elemento seleccionado](https://knowledge.hubspot.com/es/analytics-tools/create-codeless-custom-behavioral-events) y los eventos de [URL visitada](https://knowledge.hubspot.com/es/analytics-tools/create-codeless-custom-behavioral-events), se rellenan automáticamente con datos del tipo de recurso e interacción para los informes de atribución. Para incluir los mismos datos para eventos con seguimiento manual, deberás incluir manualmente los datos en el cuerpo de la solicitud usando las propiedades de evento. Más información sobre cómo [analizar los eventos personalizados](https://knowledge.hubspot.com/es/analytics-tools/analyze-custom-behavioral-events). A continuación, conoce los valores disponibles para los tipos de recursos y las fuentes de interacción, junto con las solicitudes de ejemplo. ### Tipo de recurso Para atribuir un tipo de recurso específico a una solicitud de evento personalizado de comportamiento, incluye la propiedad `hs_page_content_type` en el cuerpo de la solicitud. Por ejemplo: ```json theme={null} { "eventName": "pe1234567_manually_tracked_event", "properties": { "hs_page_id": "53005768010", "hs_page_content_type": "LANDING_PAGE" }, "objectId": "6091051" } ``` > [!NOTE] > > También puedes utilizar la propiedad `hs_asset_type`. Si ambos `hs_page_content_type` y `hs_asset_type` están incluidos en una solicitud, `hs_page_content_type` anulará el valor `hs_asset_type`. Los tipos de contenido estándar de HubSpot, como landing pages y publicaciones de blog, se pueden representar con los siguientes valores: | Valor | Descripción | | - | - | | `STANDARD_PAGE` | Una interacción con una página de sitio web. | | `LANDING_PAGE` | Una interacción con una landing page. | | `BLOG_POST` | Una interacción con un artículo de blog. | | `KNOWLEDGE_ARTICLE` | Una interacción con un artículo de la base de conocimientos. | Para todos los demás tipos de recursos, usa los siguientes valores: | Valor | Descripción | | - | - | | `AD` | Una interacción con un anuncio, como un anuncio de Facebook o Google. | | `CALL` | Una interacción a través de una llamada. | | `CONTACT_IMPORT` | Una interacción a través de una importación de contacto. | | `CONVERSATION` | Una interacción relacionada con una conversación de HubSpot. | | `CUSTOM_BEHAVIORAL_EVENT_NAME` | El nombre interno de un evento personalizado, como `pe123456_manually_tracked_event`. | | `EMAIL` | Una interacción a través de un correo electrónico. | | `EXTERNAL_PAGE` | Una interacción con una página externa. | | `INTEGRATIONS` | Una interacción a través de una integración. | | `MARKETING_EVENT` | Una interacción con un [evento de marketing](/docs/api-reference/marketing-marketing-events-v3/guide). | | `MEDIA_BRIDGE` | Una interacción a través del [centro multimedia](/docs/api-reference/cms-media-bridge-v1/guide). | | `MEETING` | Una interacción a través de una reunión. | | `SALES_EMAIL` | Una interacción a través de un correo electrónico individual. | | `SEQUENCE` | Una interacción con una secuencia. | | `SOCIAL_POST` | Una interacción con una publicación en redes sociales. | | `OTHER` | Una interacción con un recurso que no pertenece a una de las categorías anteriores. | ### Título del recurso Para atribuir un evento personalizado a un recurso, incluye la propiedad `hs_page_title` o `hs_asset_title` en tu solicitud con el nombre del recurso con el formato como una cadena. Por ejemplo: `hs_page_title:` ```json theme={null} { "eventName": "pe1234567_manually_tracked_event", "properties": { "hs_page_title": "Sweepstakes Sign Up", "hs_page_content_type": "LANDING_PAGE" }, "objectId": "6091051" } ``` ### Fuentes de interacción Para atribuir un evento personalizado de comportamiento a una fuente específica, incluye la propiedad `hs_touchpoint_source` en tu solicitud con uno de los siguientes valores: | Valor | Descripción | | - | - | | `CONVERSATION` | La fuente de interacción es una conversación. | | `DIRECT_TRAFFIC` | La fuente de interacción es el tráfico directo. | | `EMAIL_MARKETING` | La fuente de interacción es un correo electrónico de marketing. | | `HUBSPOT_CRM` | La fuente de interacción es el CRM de HubSpot. | | `INTEGRATION` | La fuente de interacción es una integración. | | `MARKETING_EVENT` | La fuente de interacción es un [evento de marketing](/docs/api-reference/marketing-marketing-events-v3/guide). | | `OFFLINE` | La fuente de interacción está offline. | | `ORGANIC_SEARCH` | La fuente de interacción es la búsqueda orgánica. | | `OTHER_CAMPAIGNS` | La fuente de interacción es de una campaña sin categorizar. | | `PAID_SEARCH` | La fuente de interacción es un anuncio de búsqueda de pago. | | `PAID_SOCIAL` | La fuente de interacción es un anuncio de pago de redes sociales. | | `REFERRALS` | La fuente de interacción es una referencia. | | `SALES` | La fuente de interacción es ventas. | | `SOCIAL_MEDIA` | La fuente de interacción es redes sociales (no un anuncio de pago de redes sociales). | # Send an event occurrence Source: https://developers.hubspot.es/docs/api-reference/latest/events/send-event-data/send-event-occurrence specs/2026-09/events-send-event-completions-v2026-09.json POST /events/2026-09/send Enviar datos para una sola ocurrencia de evento personalizado. > **Supported products** > **Required Scopes** # Check import status Source: https://developers.hubspot.es/docs/api-reference/latest/files/files/get-file-status specs/2026-09/files-files-v2026-09.json GET /files/2026-09/files/import-from-url/async/tasks/{taskId}/status Ontén el estado de una tarea de importación de archivos asíncrona usando el ID de la tarea. Este punto de terminación proporciona información sobre el estado actual de la tarea, como si está pendiente, en procesamiento, cancelada o completa. > **Supported products** > **Required Scopes** # Import file from URL Source: https://developers.hubspot.es/docs/api-reference/latest/files/files/import-from-url specs/2026-09/files-files-v2026-09.json POST /files/2026-09/files/import-from-url/async Importa un archivo de forma asíncrona desde una URL específica al administrador de archivos de HubSpot. Este punto de terminación te permite especificar varios parámetros, como el nivel de acceso, la estrategia de validación de duplicados y si quieres sobrescribir los archivos existentes. La operación se procesa de forma asíncrona y se devuelve un localizador de tareas para comprobar el estado de la importación. > **Supported products** > **Required Scopes** # Search files Source: https://developers.hubspot.es/docs/api-reference/latest/files/files/search-files specs/2026-09/files-files-v2026-09.json GET /files/2026-09/files/search Busca archivos en la cuenta de HubSpot usando varios filtros y criterios. Este punto de terminación te permite especificar múltiples parámetros de consulta para reducir los resultados de búsqueda según propiedades como la fecha de creación, el tamaño, el tipo, etc. Admite paginación y clasificación para gestionar grandes conjuntos de datos de forma eficaz. > **Supported products** > **Required Scopes** # Check folder update status Source: https://developers.hubspot.es/docs/api-reference/latest/files/folders/get-folder-update-status specs/2026-09/files-files-v2026-09.json GET /files/2026-09/folders/update/async/tasks/{taskId}/status > **Supported products** > **Required Scopes** # Search folders Source: https://developers.hubspot.es/docs/api-reference/latest/files/folders/search-folders specs/2026-09/files-files-v2026-09.json GET /files/2026-09/folders/search Busca carpetas en el administrador de archivos del CRM de HubSpot usando varios parámetros de consulta para filtrar los resultados. Este punto de terminación te permite obtener carpetas según criterios específicos como la fecha de creación, la fecha de actualización, el nombre de la carpeta y los ID de las carpetas principales. Admite paginación y clasificación para ayudar a gestionar grandes conjuntos de datos de manera eficiente. > **Supported products** > **Required Scopes** # Update folder properties by folder ID Source: https://developers.hubspot.es/docs/api-reference/latest/files/folders/update-folder-folderId specs/2026-09/files-files-v2026-09.json PATCH /files/2026-09/folders/{folderId} Actualiza los detalles de una carpeta específica en el administrador de archivos proporcionando su identificador único. Esta operación te permite modificar atributos de la carpeta, como su nombre o el ID de la carpeta principal. > **Supported products** > **Required Scopes** # API del CMS | Administrador de archivos Source: https://developers.hubspot.es/docs/api-reference/latest/files/guide > **Requisitos de ámbito** Utiliza el administrador de archivos para gestionar y almacenar tus archivos en HubSpot. Los archivos alojados en el administrador pueden subirse y usarse tanto en HubSpot como en el contenido externo. Además, pueden adjuntarse a los registros mediante la [API de interacciones](/docs/api-reference/overview). Si tu empresa está creando su sitio web usando CMS Hub, puedes usar la API de archivos para subir y almacenar recursos en HubSpot. Estos archivos se pueden distribuir y compartir a través de CMS Hub. Puedes acceder a la herramienta de archivos desde [HubSpot](https://knowledge.hubspot.com/es/files/upload-files-to-use-in-your-hubspot-content) o a través de la API de archivos. A continuación, aprende sobre la API de archivos y cómo subir y eliminar archivos. Para obtener una lista completa de endpoints de la API de archivos, consulta [esta documentación de referencia](/docs/api-reference/files-files-v3/guide). ## Subir un archivo Los archivos se pueden subir usando una solicitud de datos de formulario multiparte (multipart/form-data, en inglés) `POST` a `files/v3/files` con los siguientes campos. Si bien no es obligatorio incluir un ID de folder específico al subir archivos, se recomienda hacerlo dentro de una carpeta en lugar de subirlos directamente al directorio principal. Los requisitos de las carpetas para subir archivos están sujetos a cambios en el futuro. | Campo | Descripción | | - | - | | `file` | El archivo que se va a subir (requerido). | | `options` | Un objeto JSON que define la privacidad e indexabilidad del archivo, y está compuesto por dos campos: `access`, que es necesario, y `ttl`, que establece un período de tiempo después del cual el archivo se eliminará automáticamente. Si utilizas el campo `ttl`:
        • el plazo mínimo que se debe usar es de 1 día.
        • El plazo máximo que se puede usar es de 1 año.
        • Después del período establecido, el archivo se eliminará de forma permanente. Después de eliminado, el archivo no se puede recuperar ni restaurar.
        | | `folderId` | El ID de la carpeta a la que se subirá el archivo. En tu solicitud, se debe proporcionar este campo o `folderPath` (pero no ambos). | | `folderPath` | La ruta de la carpeta en la que se subirá el archivo. En tu solicitud, se debe proporcionar este campo o `folderId` (pero no ambos). | | `fileName` | El nombre del archivo. Si no se especifica, se generará un nombre a partir del contenido del archivo. | | `charsetHunch` | Codificación del conjunto de caracteres para el archivo subido. Si no se proporciona, se obtendrá del archivo. | A manera de ejemplo, si quisieras subir un archivo con los siguientes criterios a tu cuenta de HubSpot: * **Nombre del archivo:** `cat.png` * **Carpeta de destino en el administrador de archivos de HubSpot:** `/library/cat_archive` * **Accesibilidad del archivos en HubSpot:** acceso privado Los siguientes encabezados y el cuerpo de la solicitud deben incluirse: ```shell theme={null} curl --request POST \ --url 'https://api.hubapi.com/files/v3/files?=' \ --header 'Authorization: Bearer pat-na1-00000000-0000-0000-0000-000000000000' \ --header 'Content-type: multipart/form-data' \ --form file=@/Users/person/Downloads/cat.png \ --form 'options={"access": "PRIVATE"}' \ --form folderPath=/library/cat_archive ``` La respuesta resultante incluirá el `id` y el `parentFolderId` del archivo subido, que puedes utilizar para obtener el archivo a través de una solicitud GET. ```json theme={null} // 201 Response from successful file upload { "id": "122692044085", "createdAt": "2023-06-28T17:56:45.393Z", "updatedAt": "2023-06-28T17:56:45.393Z", "archived": false, "parentFolderId": "122692510820", "name": "cat", "path": "/library/cat_archive/cat.png", "size": 24574, "height": 219, "width": 225, "encoding": "png", "type": "IMG", "extension": "png", "defaultHostingUrl": "https://12345.fs1.hubspotusercontent-na1.net/hubfs/12345/library/cat_archive/cat.png", "url": "https://12345.fs1.hubspotusercontent-na1.net/hubfs/12345/library/cat_archive/cat.png", "isUsableInContent": true, "access": "PRIVATE" } ``` ## Comprobar el estado de subida de un archivo Si vas a importar un archivo desde una URL a tu administrador de archivos mediante una solicitud `POST` a `files/v3/files/import-from-url/async`, puedes revisar el estado de subida del archivo. Para hacerlo, usa una solicitud `GET` a `files/v3/files/import-from-url/async/tasks/{taskId}/status`. Después de hacer esta solicitud, recibirás una de las siguientes respuestas: * `PENDING`: el archivo está en la cola de espera para subirse. El proceso de importación aún no ha comenzado. * `PROCESSING`: el archivo está en proceso de subirse. * `CANCELED`: la subida del archivo se ha cancelado y no se completará. Para importar el archivo a tu cuenta de HubSpot, tendrás que subirlo de nuevo. * `COMPLETE`: el archivo se subió correctamente en la herramienta de archivos. El archivo subido aparecerá en tu herramienta de archivos. ## Ver los detalles del archivo Para revisar los detalles de un archivo que se ha subido en la herramienta de archivos, haz una solicitud `GET` a `files/v3/files/{fileId}`. Esto devolverá el archivo con detalles como el nombre, el alto y el ancho, la codificación, el URL y mucho más. Por ejemplo, para obtener los detalles de un archivo: Si un archivo está privado, la URL devuelta generará un error 404. Para obtener una URL visible del archivo, puedes hacer una solicitud `GET` a `/files/v3/files/{fileId}/signed-url`. Al realizar esta solicitud, puedes incluir parámetros de `property` para obtener información de propiedades específicas como altura y anchura. ## Eliminar un archivo Para eliminar un archivo, haz una solicitud `DELETE` a `files/v3/files/{fileId}`. Esto marcará el archivo como eliminado y hará que el contenido del archivo no esté disponible. Para eliminar permanentemente un archivo, haz una solicitud `DELETE` a `files/v3/files/{fileId}/gdpr-delete`. Esto eliminará permanentemente el contenido y los metadatos del archivo en 7 días. Si un archivo no se elimina conforme al RGPD, su contenido permanecerá en los servidores de HubSpot en un estado privado donde nadie puede acceder a él. Para garantizar que el contenido del archivo se elimine completamente, usa la funcionalidad de eliminación conforme al RGPD. ## Crear una carpeta Para crear una carpeta, haz una solicitud `POST` a `files/v3/folders`. Al realizar la solicitud, puedes incluir los siguientes campos. | Campo | Obligatorio | Descripción | | - | - | - | | `name` | Sí | Nombre de la carpeta que quieres crear. | | `parentFolderId` | No | Para crear la carpeta dentro de una carpeta existente, incluye este campo con el ID de la carpeta existente. Los campos `parentFolderId` y `parentFolderPath` no se pueden definir al mismo tiempo. | | `parentFolderPath` | No | Para crear la carpeta dentro de una carpeta existente, incluye este campo con la ruta de la carpeta existente. Los campos `parentFolderId` y `parentFolderPath` no se pueden definir al mismo tiempo. | ```json theme={null} //Example request body of POST request to /files/v3/folders { "name": "myNewFolder", "parentFolderId": 12345 } ``` ## Cambios en la v3 Si usas la versión anterior de esta API, la versión 3 tiene los siguientes cambios: * Todos los archivos subidos a través de la API serán visibles en el panel de archivos y el selector de archivos. No se pueden crear archivos ocultos. Sin embargo, se pueden crear archivos privados y archivos no indexables. * Los listados de archivos no devolverán los archivos ocultos o eliminados. Sin embargo, se puede aplicar un rango mucho más amplio de filtros. Los archivos ocultos se pueden obtener por el ID, pero requieren un nuevo permiso: `files_ui_hidden.read.` * No se pueden subir varios archivos en una sola solicitud. * Las acciones de actualización de carpetas, como mover y cambiar el nombre, ahora son asincrónicas. Cada solicitud devolverá un token que se puede usar para comprobar el estado de la edición de la carpeta. * Los endpoints que crean o reemplazan archivos equieren que establezcas los niveles de acceso para los archivos. Estos niveles de acceso son: * `PUBLIC_INDEXABLE`**:** el archivo se puede acceder públicamente por cualquiera que tenga la URL. Los motores de búsqueda pueden indexar el archivo. * `PUBLIC_NOT_INDEXABLE`**:** el archivo se puede acceder públicamente por cualquiera que tenga la URL. La etiqueta X-Robots: es el encabezado noindex que se enviará cada vez que se obtenga el archivo, indicando a los motores de búsqueda que no lo indexen. * **`PRIVATE`**: el archivo no se puede acceder públicamente. Requiere una URL firmada para mostrar el contenido. Los motores de búsqueda no pueden indexar el archivo. * Los endpoints que crean archivos permiten un nivel de detección de duplicados como parte de las opciones de subida del archivo. * `ENTIRE_PORTAL`**:** busca un archivo duplicado en la cuenta. * `EXACT_FOLDER`**:** busca un archivo duplicado en la carpeta proporcionada. * `NONE`**:** no ejecuta ninguna validación de duplicados. * `REJECT`**:** rechaza la subida del archivo si se encuentra un duplicado. * `RETURN_EXISTING`**:** si se encuentra un archivo duplicado, no carga un nuevo archivo. En su lugar, devuelve el duplicado encontrado. * La detección de duplicados funciona en `duplicateValidationScope`, que modifica cómo buscamos un duplicado. * También requiere una `duplicateValidationStrategy`, que determina lo que sucede si se encuentra un duplicado. # Clone a campaign Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/campaigns/clone-campaign specs/2026-09/marketing-campaigns-public-api-v2026-09.json POST /marketing/campaigns/2026-09/clone Clona una campaña identificada por sourceCampaignGuid en el cuerpo de la solicitud. La campaña clonada tendrá su propio GUID y las propiedades proporcionadas. La clonación de recursos se realiza de forma asíncrona. Usa el punto de terminación de estado de clonación para verificar el progreso. > **Supported products** > **Required Scopes** # Create a campaign Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/campaigns/create-campaign specs/2026-09/marketing-campaigns-public-api-v2026-09.json POST /marketing/campaigns/2026-09 Crea una campaña con las propiedades especificadas y recibe una copia del objeto, incluido su ID. Ten en cuenta que la propiedad "hs_goal" está obsoleta y se ignorará si se proporciona. > **Supported products** > **Required Scopes** # Delete a campaign Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/campaigns/delete-campaign specs/2026-09/marketing-campaigns-public-api-v2026-09.json DELETE /marketing/campaigns/2026-09/{campaignGuid} Elimina una campaña específica del sistema. Esta operación quitará la campaña identificada por el campaignGuid proporcionado de tu cuenta de HubSpot. > **Supported products** > **Required Scopes** # Retrieve a campaign Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/campaigns/get-campaign specs/2026-09/marketing-campaigns-public-api-v2026-09.json GET /marketing/campaigns/2026-09/{campaignGuid} Obtén los detalles de una campaña de marketing específica identificada por su ID interno. Este punto de terminación te permite acceder a la información de la campaña y a los recursos asociados. Es útil para obtener datos de la campaña para análisis o informes. Si las propiedades que se van a devolver no se definen con el parámetro de consulta "properties", la respuesta incluirá un mapa de propiedades vacío. > **Supported products** > **Required Scopes** # Retrieve campaigns Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/campaigns/get-campaigns specs/2026-09/marketing-campaigns-public-api-v2026-09.json GET /marketing/campaigns/2026-09 Obtén una página de campañas de marketing de tu cuenta de HubSpot. Este punto de conexión te permite ordenar, filtrar y paginar campañas, lo que lo hace útil para gestionar y analizar tus esfuerzos de marketing. > **Supported products** > **Required Scopes** # Retrieve clone status Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/campaigns/get-clone-status specs/2026-09/marketing-campaigns-public-api-v2026-09.json GET /marketing/campaigns/2026-09/clone/{campaignGuid}/status Comprueba el estado de una operación de clonación de campaña asíncrona. El parámetro de ruta campaignGuid debe ser el GUID de la nueva campaña que devuelve el punto de terminación de clonación. > **Supported products** > **Required Scopes** # Campaigns API Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/campaigns/guide # Update a campaign Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/campaigns/update-campaign specs/2026-09/marketing-campaigns-public-api-v2026-09.json PATCH /marketing/campaigns/2026-09/{campaignGuid} Haz una actualización parcial de una campaña identificada por el ID especificado. Los valores de propiedad proporcionados se sobrescribirán. Las propiedades de solo lectura y las inexistentes generarán un error 400. Los valores de propiedad se pueden borrar pasando una cadena vacía. Nota: La propiedad "hs_goal" está en desuso y se ignorará si se proporciona. > **Supported products** > **Required Scopes** # Add asset Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/campaigns/assets/add-asset specs/2026-09/marketing-campaigns-public-api-v2026-09.json PUT /marketing/campaigns/2026-09/{campaignGuid}/assets/{assetType}/{assetId} Asocia un recurso a una campaña específica. Esta operación vincula un recurso de un tipo e ID especificados a una campaña identificada por su campaignGuid único. Es útil para organizar y gestionar los recursos de la campaña en HubSpot. Si se acaba de crear un recurso, puede aparecer un error 400 en la respuesta al intentar agregar el nuevo recurso. Se recomienda esperar unos minutos antes de volver a intentarlo. > **Supported products** > **Required Scopes** # Remove asset Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/campaigns/assets/delete-asset specs/2026-09/marketing-campaigns-public-api-v2026-09.json DELETE /marketing/campaigns/2026-09/{campaignGuid}/assets/{assetType}/{assetId} Desasocia un recurso de una campaña específica. Esta operación elimina el vínculo entre el recurso y la campaña, desvinculando efectivamente el recurso del contexto de la campaña. > **Supported products** > **Required Scopes** # Retrieve asset types Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/campaigns/assets/get-assets specs/2026-09/marketing-campaigns-public-api-v2026-09.json GET /marketing/campaigns/2026-09/asset-types Enumera todos los tipos de recursos de campaña compatibles. Este punto de terminación te permite recuperar una lista de tipos de recursos que se pueden usar en campañas, lo cual es útil para entender las opciones disponibles al crear o gestionar recursos de campaña. > **Supported products** > **Required Scopes** # Batch create campaigns Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/campaigns/batch/create-campaigns specs/2026-09/marketing-campaigns-public-api-v2026-09.json POST /marketing/campaigns/2026-09/batch/create Crea un lote de campañas de marketing con propiedades específicas. Este punto de terminación permite crear varias campañas en una sola solicitud. Ten en cuenta que la propiedad 'hs_goal' está obsoleta y se ignorará si se incluye en la solicitud. > **Supported products** > **Required Scopes** # Batch archive campaigns Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/campaigns/batch/delete-campaigns specs/2026-09/marketing-campaigns-public-api-v2026-09.json POST /marketing/campaigns/2026-09/batch/archive Elimina un lote de campañas usando sus identificadores. Este punto de terminación te permite eliminar varias campañas a la vez de forma eficiente, lo que agiliza el proceso de gestión de datos de campañas. Es especialmente útil para limpiar campañas obsoletas o innecesarias en bloque. > **Supported products** > **Required Scopes** # Batch retrieve campaigns Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/campaigns/batch/get-campaigns specs/2026-09/marketing-campaigns-public-api-v2026-09.json POST /marketing/campaigns/2026-09/batch/read Obtén un lote de campañas usando los parámetros especificados. Este punto de terminación te permite filtrar campañas por intervalo de fechas y seleccionar propiedades específicas para incluir en la respuesta. Es útil para obtener información detallada sobre varias campañas a la vez. > **Supported products** > **Required Scopes** # Batch update campaigns Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/campaigns/batch/update-campaigns specs/2026-09/marketing-campaigns-public-api-v2026-09.json POST /marketing/campaigns/2026-09/batch/update Actualiza un lote de campañas con las propiedades especificadas. Este punto de terminación te permite modificar varias campañas en una sola solicitud. Nota: La propiedad "hs_goal" está obsoleta y se ignorará si se proporciona. > **Supported products** > **Required Scopes** # Add budget item Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/campaigns/budget/create-budget-item specs/2026-09/marketing-campaigns-public-api-v2026-09.json POST /marketing/campaigns/2026-09/{campaignGuid}/budget Agrega un nuevo elemento de presupuesto a la campaña especificada. Este punto de terminación te permite asociar asignaciones financieras a una campaña, lo que permite un mejor seguimiento y gestión de los presupuestos de la campaña. > **Supported products** > **Required Scopes** # Delete budget item Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/campaigns/budget/delete-budget-item specs/2026-09/marketing-campaigns-public-api-v2026-09.json DELETE /marketing/campaigns/2026-09/{campaignGuid}/budget/{budgetId} Elimina un elemento de presupuesto específico de una campaña usando su ID. Esta operación es útil para quitar asignaciones de presupuesto que ya no se necesitan o que se agregaron por error. > **Supported products** > **Required Scopes** # Retrieve budget item Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/campaigns/budget/get-budget-item specs/2026-09/marketing-campaigns-public-api-v2026-09.json GET /marketing/campaigns/2026-09/{campaignGuid}/budget/{budgetId} Obtén un elemento de presupuesto específico asociado a una campaña usando su ID de presupuesto único. Este punto de terminación es útil para acceder a información detallada sobre un elemento de presupuesto particular dentro de una campaña, lo que permite revisar y analizar las asignaciones presupuestarias. > **Supported products** > **Required Scopes** # Retrieve budget details Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/campaigns/budget/get-budget-totals specs/2026-09/marketing-campaigns-public-api-v2026-09.json GET /marketing/campaigns/2026-09/{campaignGuid}/budget/totals Obtén información detallada sobre el presupuesto y los gastos, incluidos los totales, de una campaña de marketing específica. Este punto de terminación ofrece información sobre los aspectos financieros de una campaña, lo que ayuda a los usuarios a gestionar y analizar eficazmente las asignaciones presupuestarias y los patrones de gasto. > **Supported products** > **Required Scopes** # Update budget item Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/campaigns/budget/update-budget-item specs/2026-09/marketing-campaigns-public-api-v2026-09.json PUT /marketing/campaigns/2026-09/{campaignGuid}/budget/{budgetId} Actualiza un elemento de presupuesto específico por ID dentro de una campaña de marketing. Este punto de terminación te permite modificar los detalles de un elemento de presupuesto asociado a una campaña, identificado por su campaignGuid y budgetId únicos. Usa esto para ajustar las asignaciones presupuestarias o actualizar la información relacionada con el presupuesto de una campaña. > **Supported products** > **Required Scopes** # Retrieve contact IDs Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/campaigns/reports/get-contact-ids specs/2026-09/marketing-campaigns-public-api-v2026-09.json GET /marketing/campaigns/2026-09/{campaignGuid}/reports/contacts/{contactType} Obtén la lista de ID de contactos para la campaña y el tipo de contacto especificados. Este punto de terminación te permite obtener información de contacto asociada a una campaña particular, filtrada por el tipo de contacto. Admite paginación y filtrado por fecha para gestionar grandes conjuntos de datos de forma eficaz. > **Supported products** > **Required Scopes** # Retrieve metrics Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/campaigns/reports/get-metrics specs/2026-09/marketing-campaigns-public-api-v2026-09.json GET /marketing/campaigns/2026-09/{campaignGuid}/reports/metrics Obtén las métricas de una campaña de marketing específica usando su identificador único. Este punto de terminación te permite recopilar información sobre el rendimiento de la campaña en un intervalo de fechas determinado. > **Supported products** > **Required Scopes** # Retrieve revenue report Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/campaigns/reports/get-revenue-report specs/2026-09/marketing-campaigns-public-api-v2026-09.json GET /marketing/campaigns/2026-09/{campaignGuid}/reports/revenue Obtén los datos del informe de atribución de ingresos de una campaña específica. Este punto de terminación te permite obtener métricas detalladas de atribución de ingresos, que puedes filtrar por modelo de atribución e intervalo de fechas. Estos datos son útiles para analizar el impacto financiero de las campañas de marketing. > **Supported products** > **Required Scopes** # Create spend item Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/campaigns/spend/create-spend-item specs/2026-09/marketing-campaigns-public-api-v2026-09.json POST /marketing/campaigns/2026-09/{campaignGuid}/spend Crea un nuevo elemento de gasto de campaña para una campaña específica. Este punto de terminación te permite agregar detalles financieros relacionados con los gastos de la campaña, lo que puede ayudarte a hacer seguimiento de los presupuestos de marketing y gestionarlos de forma eficaz. > **Supported products** > **Required Scopes** # Delete spend item Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/campaigns/spend/delete-spend-item specs/2026-09/marketing-campaigns-public-api-v2026-09.json DELETE /marketing/campaigns/2026-09/{campaignGuid}/spend/{spendId} Elimina un elemento de gasto de campaña específico por su ID. Esta operación es útil para gestionar y limpiar los registros de gastos asociados a una campaña de marketing en particular. > **Supported products** > **Required Scopes** # Retrieve spend Item Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/campaigns/spend/get-spend-item specs/2026-09/marketing-campaigns-public-api-v2026-09.json GET /marketing/campaigns/2026-09/{campaignGuid}/spend/{spendId} Obtén un elemento de gasto de campaña específico usando su spendId único. Este punto de terminación te permite acceder a información detallada sobre un elemento de gasto particular asociado a una campaña, lo que puede ser útil para el seguimiento y gestión de los gastos de la campaña. > **Supported products** > **Required Scopes** # Update spend item Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/campaigns/spend/update-spend-item specs/2026-09/marketing-campaigns-public-api-v2026-09.json PUT /marketing/campaigns/2026-09/{campaignGuid}/spend/{spendId} Actualiza un elemento de gasto de campaña específico por su spendId único. Esta operación te permite modificar los detalles de un elemento de gasto existente asociado a una campaña, como su cantidad o descripción. > **Supported products** > **Required Scopes** # Calls-to-action JavaScript API Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/ctas-sdk/guide # Global form events Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/forms/global-form-events # Create an email Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-emails/create-email specs/2026-09/marketing-marketing-emails-v2026-09.json POST /marketing/emails/2026-09 Crea un nuevo correo de marketing en tu cuenta de HubSpot usando los parámetros especificados. Este punto de conexión te permite definir el contenido, la configuración y otros detalles del correo electrónico. Tras la creación exitosa, se devuelve la URL del recurso de correo electrónico recién creado. > **Supported products** > **Required Scopes** # Create an A/B test variation Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-emails/emails/create-ab-variation specs/2026-09/marketing-marketing-emails-v2026-09.json POST /marketing/emails/2026-09/ab-test/create-variation Crea una variación de un correo electrónico de marketing para una prueba A/B. La nueva variación se creará como un borrador. Si ya existe una variación activa, no se creará una nueva. > **Supported products** > **Required Scopes** # Clone a marketing email Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-emails/emails/create-clone specs/2026-09/marketing-marketing-emails-v2026-09.json POST /marketing/emails/2026-09/clone Esto creará un correo duplicado con las mismas propiedades que el original, con la excepción de un ID único. > **Supported products** > **Required Scopes** # Delete a marketing email Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-emails/emails/delete-email specs/2026-09/marketing-marketing-emails-v2026-09.json DELETE /marketing/emails/2026-09/{emailId} Eliminar un correo electrónico de marketing por su ID > **Supported products** > **Required Scopes** # Get A/B test variation Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-emails/emails/get-ab-variation specs/2026-09/marketing-marketing-emails-v2026-09.json GET /marketing/emails/2026-09/{emailId}/ab-test/get-variation Este punto de terminación te permite obtener la variación de un correo de marketing A/B. Si el correo es la variación A (principal), devolverá la variación B (variante), y viceversa. > **Supported products** > **Required Scopes** # Get the details of a specified marketing email Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-emails/emails/get-email specs/2026-09/marketing-marketing-emails-v2026-09.json GET /marketing/emails/2026-09/{emailId} Obtén los detalles de un correo de marketing. > **Supported products** > **Required Scopes** # Get email draft Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-emails/emails/get-email-draft specs/2026-09/marketing-marketing-emails-v2026-09.json GET /marketing/emails/2026-09/{emailId}/draft Obtén la versión en borrador de un correo (si existe). Si no existe ninguna versión en borrador, se devuelve el correo publicado. > **Supported products** > **Required Scopes** # Update a marketing email Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-emails/emails/update-email specs/2026-09/marketing-marketing-emails-v2026-09.json PATCH /marketing/emails/2026-09/{emailId} Cambia las propiedades de un correo de marketing. > **Supported products** > **Required Scopes** # Retrieve emails Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-emails/get-emails specs/2026-09/marketing-marketing-emails-v2026-09.json GET /marketing/emails/2026-09 Obtén una lista de correos de marketing de tu cuenta de HubSpot. Este punto de conexión te permite filtrar correos según varios criterios, como la fecha de publicación, fecha de creación, fecha de actualización, entro otros. También puedes controlar el número de resultados por página e incluir estadísticas o propiedades adicionales en la respuesta. > **Supported products** > **Required Scopes** # Marketing API | Marketing Email Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-emails/guide # Get a revision of a marketing email Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-emails/revisions/get-revision specs/2026-09/marketing-marketing-emails-v2026-09.json GET /marketing/emails/2026-09/{emailId}/revisions/{revisionId} Obtén una revisión específica de un correo de marketing. > **Supported products** > **Required Scopes** # Reset draft Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-emails/revisions/reset-draft specs/2026-09/marketing-marketing-emails-v2026-09.json POST /marketing/emails/2026-09/{emailId}/draft/reset Restablece el borrador como una copia del objeto activo. > **Supported products** > **Required Scopes** # Restore to draft Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-emails/revisions/reset-to-draft specs/2026-09/marketing-marketing-emails-v2026-09.json POST /marketing/emails/2026-09/{emailId}/revisions/{revisionId}/restore-to-draft Restaura una revisión anterior de un correo de marketing al estado BORRADOR. Si actualmente hay algo en el borrador de ese objeto, se sobrescribe. > **Supported products** > **Required Scopes** # Restore from revision Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-emails/revisions/restore-from-revision specs/2026-09/marketing-marketing-emails-v2026-09.json POST /marketing/emails/2026-09/{emailId}/revisions/{revisionId}/restore Restaura una revisión anterior de un correo de marketing. La revisión actual pasa a ser la anterior, y la revisión restaurada recibe un nuevo número de versión. > **Supported products** > **Required Scopes** # Update draft Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-emails/revisions/update-draft specs/2026-09/marketing-marketing-emails-v2026-09.json PATCH /marketing/emails/2026-09/{emailId}/draft Crea o actualiza la versión en borrador de un correo de marketing. Si no existe ningún borrador, el sistema crea un borrador del correo “activo” actual y luego aplica el cuerpo de la solicitud a ese borrador. La versión en borrador solo reside en el búfer, el correo no se clona. > **Supported products** > **Required Scopes** # Get statistics histogram Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-emails/statistics/get-histogram specs/2026-09/marketing-marketing-emails-v2026-09.json GET /marketing/emails/2026-09/statistics/histogram Obtén estadísticas agrupadas en intervalos para un intervalo de tiempo especificado. Cada intervalo contiene estadísticas agrupadas de los correos que se enviaron en ese tiempo. > **Supported products** > **Required Scopes** # Get aggregated statistics Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-emails/statistics/get-statistics specs/2026-09/marketing-marketing-emails-v2026-09.json GET /marketing/emails/2026-09/statistics/list Usa este punto de terminación para obtener estadísticas agrupadas de los correos enviados en un intervalo de tiempo especificado. También devuelve la lista de correos que se enviaron durante ese intervalo. > **Supported products** > **Required Scopes** # Record attendance by contact ID and external event ID Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-events/attendance/set-attendance-contactId-externalId specs/2026-09/marketing-marketing-events-v2026-09.json POST /marketing/marketing-events/2026-09/attendance/{externalEventId}/{subscriberState}/create Registra la participación de múltiples contactos de HubSpot en un evento de marketing utilizando sus ID de contacto de HubSpot Funciones adicionales: - Añade un evento de la cronología a los contactos Propiedades permitidas: Para el estado "asistir": - joinedAt - leftAt > **Supported products** > **Required Scopes** # Record attendance by participant email and external event ID Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-events/attendance/set-attendance-email-externalId specs/2026-09/marketing-marketing-events-v2026-09.json POST /marketing/marketing-events/2026-09/attendance/{externalEventId}/{subscriberState}/email-create Registra la participación de múltiples contactos de HubSpot en un evento de marketing utilizando sus direcciones de correo electrónico. Si un contacto no existe, se creará automáticamente. El campo contactProperties se usa solo para crear contactos nuevos y no para actualizar las propiedades de los contactos existentes Funciones adicionales: Añade un evento de la cronología a los contactos Propiedades permitidas Para el estado "asistir": - joinedAt - leftAt > **Supported products** > **Required Scopes** # Delete events by external ID Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-events/batch/delete-events-externalId specs/2026-09/marketing-marketing-events-v2026-09.json POST /marketing/marketing-events/2026-09/events/delete Elimina múltiples eventos de marketing con base en externalAccountId, externalEventId y appId. Solo se eliminarán eventos de marketing creados por la misma aplicación; los eventos de otras aplicaciones no se pueden retirar por este punto de terminación. > **Supported products** > **Required Scopes** # Delete events by HubSpot ID Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-events/batch/delete-marketing-events specs/2026-09/marketing-marketing-events-v2026-09.json POST /marketing/marketing-events/2026-09/batch/archive Elimina múltiples eventos de marketing del portal con base en sus objectId, si existen Respuestas 204: Se devuelve si todos los eventos de marketing especificados se borraron correctamente. 207: Se devuelve si algunos objectIds no corresponden a ninguno de los eventos de marketing existentes. > **Supported products** > **Required Scopes** # Update events by HubSpot ID Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-events/batch/update-marketing-events specs/2026-09/marketing-marketing-events-v2026-09.json POST /marketing/marketing-events/2026-09/batch/update Actualiza múltiples eventos de marketing en el portal con base en sus objectId, si existen. > **Supported products** > **Required Scopes** # Create or update events Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-events/batch/upsert-marketing-events specs/2026-09/marketing-marketing-events-v2026-09.json POST /marketing/marketing-events/2026-09/events/upsert Actualiza o crea múltiples eventos de marketing. Si un evento de marketing con el ID especificado ya existe, se actualizará; de lo contrario, se creará un nuevo evento Solo se actualizarán eventos de marketing creados originalmente por la misma aplicación. > **Supported products** > **Required Scopes** # Create an event Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-events/create-event specs/2026-09/marketing-marketing-events-v2026-09.json POST /marketing/marketing-events/2026-09/events Crea un nuevo evento de marketing en HubSpot > **Supported products** > **Required Scopes** # Delete event by HubSpot ID Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-events/delete-event specs/2026-09/marketing-marketing-events-v2026-09.json DELETE /marketing/marketing-events/2026-09/{objectId} Elimina el evento de marketing existente con el objectId especificado, si existe. > **Supported products** > **Required Scopes** # Delete event by external ID Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-events/delete-event-externalId specs/2026-09/marketing-marketing-events-v2026-09.json DELETE /marketing/marketing-events/2026-09/events/{externalEventId} Elimina los eventos de marketing existentes con el externalAccountId, externalEventId especificado, si existe. Solo se eliminarán eventos de marketing creados por la misma aplicación. > **Supported products** > **Required Scopes** # Mark an event as canceled Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-events/event-status/set-event-canceled specs/2026-09/marketing-marketing-events-v2026-09.json POST /marketing/marketing-events/2026-09/events/{externalEventId}/cancel Marcar un evento de marketing como cancelado. > **Supported products** > **Required Scopes** # Retrieve event by external ID Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-events/get-marketing-event specs/2026-09/marketing-marketing-events-v2026-09.json GET /marketing/marketing-events/2026-09/events/{externalEventId} Devuelve los detalles de un evento de marketing con el externalAccountId, externalEventId especificado, si existe. Solo se recuperan eventos de marketing creados por la misma aplicación que hace la solicitud. > **Supported products** > **Required Scopes** # Retrieve event by HubSpot ID Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-events/get-marketing-event-objectId specs/2026-09/marketing-marketing-events-v2026-09.json GET /marketing/marketing-events/2026-09/{objectId} Devuelve los detalles de un evento de marketing con el objectId especificado, si existe. > **Supported products** > **Required Scopes** # Retrieve all events Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-events/get-marketing-events specs/2026-09/marketing-marketing-events-v2026-09.json GET /marketing/marketing-events/2026-09 Recupera una lista de eventos de marketing para la versión de API especificada. Este punto de terminación admite la paginación para navegar por grandes conjuntos de datos. Úsalo para acceder a los detalles de los eventos de marketing en un formato paginado. > **Supported products** > **Required Scopes** # API de marketing | Eventos de marketing Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-events/guide > **[Run in Postman](https://app.getpostman.com/run-collection/26126890-66991673-f7f9-4430-8c49-ddd3b01141b9)** > **Requisitos de ámbito** # Eventos de marketing Un evento de marketing es un objeto del CRM, similar a los contactos y las empresas, que te permite hacer seguimiento a eventos de marketing, como un webinario, junto con los contactos que se registraron y asistieron al evento. En este artículo explicamos cómo usar la API de eventos de marketing para integrar estos eventos en una aplicación. ## En este artículo: * [Permisos necesarios](#scope-requirements) * [Diferencias entre los endpoints de identificación interna y externa](#differences-between-internal-id-and-external-id-endpoints) * [Endpoints de gestión de eventos](#create-and-update-events) * [Endpoints de asistencia a eventos](#event-attendance-endpoints) * [Endpoints de estado del participante](#participant-state-endpoints) * [Endpoints de asociación de listas](#list-association-endpoints) * [Configurar los valores de la aplicación](#configure-app-settings) * [Paso 1: Crea una API en tu aplicación](#step-1-create-an-api-in-your-app) * [Paso 2: Da a HubSpot la ruta URL a tu API](#step-2-provide-hubspot-with-the-url-path-to-your-api) ## Permisos necesarios Para hacer una solicitud a uno de los endpoints de eventos de marketing a través de la API, se requieren los siguientes [permisos](/docs/apps/legacy-apps/authentication/working-with-oauth#scopes): * `crm.objects.marketing_events.read`: da permiso para obtener datos de eventos de marketing y asistencia. * `crm.objects.marketing_events.write`: da permisos para crear, eliminar o hacer cambios en la información de eventos de marketing. Al autenticar las llamadas que hace tu aplicación, puedes usar un [token de acceso a aplicaciones privadas](/docs/apps/legacy-apps/private-apps/overview) u [OAuth](/docs/api-reference/auth-oauth-v1/guide). Consulta más información sobre los [métodos de autenticación](/docs/apps/legacy-apps/authentication/intro-to-auth). Para ver la lista completa de endpoints disponibles, consulta la [documentación de referencia](/docs/api-reference/marketing-marketing-events-v3/guide). ## Diferencias entre los endpoints de identificación interna y externa Muchos de los endpoints que se indican a continuación ofrecen dos formas distintas de identificar un evento que se quiere obtener o actualizar. Aunque el resultado final para endpoints similares puede ser el mismo, difieren principalmente en los ID asociados que proporcionas: * **Endpoints que utilizan ID externos:** los endpoints que requieren los parámetros `externalEventId` y `externalAccountId` solo funcionarán en la misma aplicación que creó originalmente el evento. Por ejemplo, si has creado dos aplicaciones públicas, denominadas *App A* y *App B*, y has creado un evento de marketing mediante la autenticación y los ID asociados a *App A*, solo *App B* puede leer, cambiar y añadir nuevos participantes al evento. Si intentas acceder al mismo evento con *App B* utilizando los mismos externalEventId y externalAccountId, se producirá un error 404. * **Endpoints que utilizan objectId:** los endpoints que requieren `objectId` pueden usarse para acceder a un evento por cualquier aplicación con los permisos asociados que se mencionan en la sección anterior, independientemente de la aplicación que creó originalmente el evento. Si *App A* creó un evento de marketing, *App B* puede seguir leyendo, actualizando o añadiendo participantes a través de endpoints basados en el `objectId`. ## Endpoints de gestión de eventos Las siguientes secciones proporcionan información sobre las propiedades más comunes de los eventos y sobre cómo utilizar los distintos endpoints de gestión de eventos para crear, leer, actualizar y archivar eventos. ### Propiedades de eventos Las siguientes propiedades están disponibles para obtener y actualizar información cuando se usan los endpoints de gestión de eventos: | Parámetro | Tipo | Descripción | | - | - | - | | `eventName` | Cadena | El título del evento. | | `eventType` | Cadena | El tipo de evento (ejemplo, webinario, feria comercial, etc.). | | `eventOrganizer` | Cadena | La persona o la organización a cargo del evento. | | `eventDescription` | Cadena | Una descripción del evento. | | `eventUrl` | Cadena | Una URL a la que los usuarios pueden navegar para registrarse al evento o conocer más información. | | `eventCancelled` | Booleano | Si el evento está cancelado o no. | | `eventStartTime` | Cadena | Una marca de tiempo con el formato ISO 8601 de la hora de inicio del evento. | | `eventEndTime` | Cadena | Una marca de tiempo con el formato ISO 8601 de la hora de finalización del evento. | ### Crear un evento Para crear un evento de marketing puedes hacer una solicitud `POST` a `/marketing/v3/marketing-events/events` e incluir los datos `eventName`, `externalEventId`, `externalAccountId` y `eventOrganizer` en el cuerpo de la solicitud. Si quieres, puedes indicar en tu solicitud las propiedades adicionales que figuran en la [tabla anterior](#event-properties). Por ejemplo, si el `externalAccountId` de tu app es `"12345"` y el `externalEventId` de tu evento en la app es `"67890"`, podrías crear un nuevo evento llamado `"Winter webinar"` con una solicitud que se parecería a la siguiente: ```json theme={null} { "externalAccountId": "12345", "externalEventId": "67890", "eventName": "Winter webinar", "eventOrganizer": "Snowman Fellowship", "eventCancelled": false, "eventUrl": "https://example.com/holiday-jam", "eventDescription": "Let's get together to plan for the holidays", "eventCompleted": false, "startDateTime": "2024-08-07T12:36:59.286Z", "endDateTime": "2024-08-07T12:36:59.286Z", "customProperties": [ { "name": "eventSeason", "value": "winter" } ] } ``` ### Actualizar propiedades de eventos mediante ID externos Para crear o actualizar eventos de marketing, haz una solicitud `POST` al endpoint `/marketing/v3/marketing-events/events/upsert`. Puedes incluir cualquier `customProperties` propiedad personalizada junto con cualquier otro detalle del evento (como su nombre, hora de inicio y descripción). Si ya hay un evento de marketing con el ID especificado en tu solicitud, se actualizará. De lo contrario, se creará un nuevo evento. Por ejemplo, la siguiente solicitud crearía un evento con el ID `4` llamado "Virtual cooking class": ```json theme={null} { "inputs": [ { "customProperties": [ { "name": "property1", "value": "1234" } ], "eventName": "Virtual cooking class", "startDateTime": "2023-11-30T17:46:20.461Z", "eventOrganizer": "Chef Joe", "eventDescription": "Join us for a virtual cooking class! Yum." "eventCancelled": false, "externalAccountId": "CookingCo", "externalEventId": "4" } ] } ``` ### Actualizar propiedades de eventos mediante el objectId Una vez creado un evento, puedes actualizar sus propiedades haciendo una solicitud `PATCH` a `/marketing/v3/marketing-events/{objectId}`. * Para obtener el `objectId` de un evento de marketing específico, sigue las instrucciones de [este artículo de la base de conocimientos](https://knowledge.hubspot.com/es/integrations/use-marketing-events#view-and-analyze-marketing-events) para ver los detalles del evento en tu cuenta de HubSpot y luego, localiza el ID en el campo *Record ID*. La dirección `objectId` también se devolverá en la respuesta cuando se cree un evento correctamente. * También puedes hacer una solicitud `GET` al punto de terminación `/marketing/v3/marketing-events` descrito en la siguiente sección. * Si tienes la dirección `externalEventId` de un evento, puedes incluirla como ruta al hacer una solicitud `GET` a `/marketing/v3/marketing-events/{externalEventId}/identifiers`. La respuesta incluirá todos los eventos de marketing junto con los identificadores pertinentes de cada evento (es decir, el `objectId` del evento, su `appInfo`, el `marketingEventName`, y el `externalAccountId`). ### Detalles del evento Para obtener una lista de todos los eventos de marketing junto con sus propiedades, haz una solicitud `GET` a `/marketing/v3/marketing-events`. Si necesitas obtener los detalles de un evento de marketing específico por el *Record ID* de HubSpot, puedes proporcionar el ID como objectId en una solicitud `GET` a `/marketing/v3/marketing-events/{objectId}`. ```json theme={null} { "eventName": "Test Marketing Event", "eventType": "test-type", "startDateTime": "2024-05-22T12:29:50.734Z", "endDateTime": "2024-05-25T12:29:50.734Z", "eventOrganizer": "testEventOrganizer", "eventDescription": "testDescription", "eventUrl": "testURL", "eventCancelled": true, "eventCompleted": false, "customProperties": [ { "name": "test_custom_prop", "value": "1" }, { "name": "test_prop", "value": "2" } ], "objectId": "58237132332", "externalEventId": null, "eventStatus": "CANCELLED", "appInfo": { "id": "111", "name": "Zoom" }, "registrants": 1, "attendees": 1, "cancellations": 2, "noShows": 0, "createdAt": "2024-08-07T12:58:40.635Z", "updatedAt": "2024-10-15T13:35:03.353Z" } ``` ### Eliminar un evento Para eliminar un evento de marketing, envía una solicitud `DELETE` a `/marketing/v3/marketing-events/{objectId}` con la dirección `objectId` asociada al evento. Si tiene éxito, recibirás una respuesta `204 No Content`. ### Actualización en bloque de varios eventos Para actualizar varios eventos de marketing en bloque, puedes hacer una solicitud `POST` a `/marketing-events/v3/marketing-events/batch/update` y proporcionar las propiedades que quieres actualizar en cada evento dentro de la matriz de entradas del cuerpo de la solicitud. Por ejemplo, si quieres actualizar varias propiedades de dos eventos de marketing con los ID de objeto 58237132332 y 54073507364 en una única solicitud, el cuerpo de la solicitud sería similar al siguiente: ```json theme={null} { "inputs": [ { "objectId": "58237132332", "eventCancelled": true, "eventOrganizer": "testEventOrganizer", "eventUrl": "testURL", "eventDescription": "testDescription", "eventName": "Test Marketing Event Update", "eventType": "test-type" }, { "objectId": "54073507364", "eventCancelled": true, "eventOrganizer": "testEventOrganizer", "eventUrl": "testURL", "eventDescription": "testDescription", "eventName": "Test Marketing Event Update 2", "eventType": "test-type" } ] } ``` ## Endpoints de asistencia a eventos Los endpoints de estado de asistencia a un evento permiten registrar las actividades de registro de un contacto, como si se registró, asistió o canceló su registro en el evento. Por ejemplo, puedes usar este endpoint para registrar que un contacto de HubSpot se registró en un evento de marketing. ### Actualizar la asistencia mediante el evento objectId Si quieres utilizar la dirección `objectId` de un evento de email marketing, puedes utilizar el ID de contacto del contacto para el que quieres registrar el estado de participación, o bien puedes utilizar su dirección de email. * Para utilizar el ID de un contacto, haz una solicitud POST a `/marketing/v3/marketing-events/{objectId}/attendance/{subscribeState}/create` y, a continuación, proporciona el ID del contacto utilizando el campo `vid` dentro de la matriz `inputs` del cuerpo de la solicitud. Por ejemplo, el cuerpo de la solicitud que se muestra a continuación proporciona un ejemplo de actualización de los datos de asistencia de un contacto con un ID `47733471576` y especifica cuándo el asistente entró y salió del evento mediante las propiedades `joinedAt` y `leftAt`: ```json theme={null} { "inputs": [ { "vid": 47733471576, "properties": { "joinedAt": "2024-05-22T13:38:16.500Z", "leftAt": "2024-05-22T15:40:16.500Z" }, "interactionDateTime": 1716382579000 } ] } ``` * Para utilizar el correo electrónico de un contacto, haz una solicitud POST a `/marketing/v3/marketing-events/{objectId}/attendance/{subscribeState}/email-create` y, a continuación, proporciona el correo electrónico del contacto utilizando el campo `email` dentro de la matriz `inputs` del cuerpo de la solicitud. * Si estás creando un nuevo contacto, puedes incluir el campo `contactProperties` dentro de la matriz `inputs` del cuerpo de la solicitud para definir cualquier propiedad asociada en el contacto recién creado. De lo contrario, si el contacto ya existe, el valor `contactProperties`, proporcionado en la solicitud, no se actualizará . * Por ejemplo, el cuerpo de la solicitud que se muestra a continuación proporciona un ejemplo de actualización de los datos de asistencia de un contacto con la dirección de correo electrónico `john@example.com`, y especifica cuándo el asistente entró y salió del evento en de los campos `joinedAt` y `leftAt` dentro del objeto `properties` de la matriz `inputs`: ```json theme={null} { "inputs": [ { "contactProperties": { "additionalProp1": "string", "additionalProp2": "string" }, "properties": { "joinedAt": "2024-05-22T13:38:16.500Z", "leftAt": "2024-05-22T15:40:16.500Z" }, "email": "john@example.com", "interactionDateTime": 1716382579000 } ] } ``` Con ambos puntos de terminación anteriores, proporciona los siguientes valores para los parámetros de ruta correspondientes: * `objectId`: el *Record ID* del evento de marketing en tu cuenta de HubSpot. Consulta la [sección anterior](#differences-between-internal-id-and-external-id-endpoints) para obtener más detalles sobre el uso de objectId de un evento frente al uso de sus ID externos. * `subscriberState`: una enumeración que coincide con el nuevo estado de asistencia del contacto: * `REGISTERED`: indica que el contacto de HubSpot se registró en el evento. * `ATTENDED`: indica que el contacto de HubSpot asistió al evento. Si estás actualizando el estado de un contacto a ATTENDED, también puedes incluir las marcas de tiempo `joinedAt` y `leftAt` como parámetros en el cuerpo de la solicitud, especificados en el formato ISO8601 Instant. * `CANCELLED`: indica que el contacto de HubSpot, que se había registrado previamente en el evento, ha cancelado su registro. ### Actualiza la asistencia utilizando los ID externos del evento > [!WARNING] > > ### Nota: > > Si antes utilizabas los endpoints `/upsert` o `/email-upsert` para actualizar el estado de un asistente, puedes utilizar en su lugar los endpoints que se indican a continuación. Sin embargo, en comparación con los endpoints de asistencia a eventos anteriores, el uso de estos endpoints no permitirá hacer lo siguiente: > > * Crear un nuevo contacto que aún no existe. > * Mostrar la cronología de eventos en la página de registro de un contacto. > * Especificar las propiedades `joinedAt` o `leftAt`. > * Proporcionar una respuesta detallada en caso de tener éxito. Si utilizas los endpoints que requieren la dirección `externalEventId` de la aplicación, puedes utilizar los ID de contacto o la dirección de correo electrónico de los contactos existentes: * Si quieres usar los ID de contacto de los contactos existentes: * Haz una solicitud `POST` a `/marketing/v3/marketing-events/attendance/{externalEventId}/{subscriberState}/create`, utilizando el ID del evento desde tu aplicación externa como el `externalEventId`. * En el cuerpo de la solicitud, proporciona un objeto `inputs` que incluya los siguientes campos: * `interactionDateTime`: la fecha y la hora en las que el contacto se suscribió al evento. * `vid`: el ID de contacto de un contacto existente. * Si quieres usar la dirección de correo electrónico de uno de los asistentes al evento: * Haz una solicitud `POST` a `/marketing/v3/marketing-events/attendance/{externalEventId}/{subscriberState}/email-create`. * En el cuerpo de la solicitud, proporciona un objeto `inputs` que incluya los siguientes campos: * `interactionDateTime`: la fecha y la hora en las que el contacto se suscribió al evento. * `email`: la dirección de correo electrónico del asistente como el valor del campo de correo electrónico dentro de una entrada. * Si la dirección de correo electrónico que incluyes no coincide con la dirección de un contacto existente, se creará un nuevo contacto. Con los dos endpoints anteriores, proporciona los siguientes valores para los parámetros de ruta correspondientes: * `externalEventId`: el ID del [evento de marketing](https://knowledge.hubspot.com/es/integrations/use-marketing-events#view-edit-and-analyze-marketing-events). Consulta la [sección anterior](#differences-between-internal-id-and-external-id-endpoints) para obtener más detalles sobre el uso de objectId de un evento frente al uso de sus ID externos. * `subscriberState`: una enumeración que coincide con el nuevo estado de asistencia del contacto: * `REGISTERED`: indica que el contacto de HubSpot se registró en el evento. * `ATTENDED`: indica que el contacto de HubSpot asistió al evento. Si estás actualizando el estado de un contacto a ATTENDED, también puedes incluir las marcas de tiempo `joinedAt` y `leftAt` como parámetros en el cuerpo de la solicitud, especificados en el formato ISO8601 Instant. * `CANCELLED`: indica que el contacto de HubSpot, que se había registrado previamente en el evento, ha cancelado su registro. > [!WARNING] > > ### Nota: > > Estas API son idempotentes siempre que el ID del contacto y el valor `interactionDateTime` del evento no cambien. Así, puedes configurar de forma segura el estado de asistencia varias veces sin que HubSpot cree eventos duplicados en las propiedades de eventos de marketing. ## Endpoints de estado del participante Puedes usar los endpoints de participación para recuperar los datos de los participantes en tus eventos de marketing. Puedes consultar datos como las métricas agregadas de un evento en específico, así como los datos de participación de un contacto o evento específico. A continuación puedes consultar los endpoints de participación disponibles. Para consultar información completa de todos los parámetros disponibles con cada endpoint, consulta la [documentación de referencia](/docs/api-reference/marketing-marketing-events-v3/guide). > [!WARNING] > > ### Nota: > > Los números de actividades que se muestran en la [página de eventos de marketing](https://knowledge.hubspot.com/es/integrations/use-marketing-events) de tu cuenta de HubSpot pueden diferir de las métricas correspondientes del endpoint de la API de contadores de participación. > > Por ejemplo, si un participante se registró para un evento, luego canceló y luego se volvió a registrar para el mismo evento, cada una de esas actividades se incluirá en los totales que ves en la interfaz de usuario de eventos de marketing de tu cuenta. Si usas los endpoints del estado del participante que se indican a continuación, solo se incluye el estado actual de un participante en el contador asociado a esa métrica (por ejemplo, `attended`, `registered`, `cancelled` o `noShows`). ### Leer las participaciones de un contacto específico Para obtener los datos de participación en un evento de un contacto en específico, realiza una solicitud `GET` a `/marketing/v3/marketing-events/participations/contacts/{contactIdentifier}/breakdown`, utilizando el ID o la dirección de correo electrónico del contacto como parámetro de ruta `contactIdentifier`. La respuesta incluirá un resumen de la participación del contacto en el evento, en el campo `properties`: ```json theme={null} { "results": [ { "associations": { "marketingEvent": { "externalAccountId": "4", "marketingEventId": "123", "externalEventId": "456", "name": "Virtual baking workshop" }, "contact": { "firstname": "Jane", "contactId": "156792341", "email": "jdoe@example.com", "lastname": "Doe" } }, "createdAt": "2024-05-21T18:35:04.838Z", "id": "string", "properties": { "occurredAt": "2024-05-22T10:35:04.838Z", "attendancePercentage": "string", "attendanceState": "REGISTERED", "attendanceDurationSeconds": 3600 } } ] } ``` ### Leer los datos del desglose de participación Para consultar un desglose de los datos de participación en un evento específico, utiliza el `externalAccountId` y el `externalEventId` del evento para hacer una solicitud `GET` a `/marketing/v3/marketing-events/participations/{externalAccountId}/{externalEventId}/breakdown`. ### Consultar contadores de participación Para consultar un resumen agregado de la participación en un evento, utiliza el `externalAccountId` y el `externalEventId` del evento para hacer una solicitud `GET` a `/marketing/v3/marketing-events/participations/{externalAccountId}/{externalEventId}`. La respuesta incluirá los recuentos totales de asistencia: ```json theme={null} { "attended": 152, "registered": 200, "cancelled": 3, "noShows": 8 } ``` ### Filtrar los datos de desglose de participación Cuando obtienes datos de desglose o de participación en eventos de un contacto específico, puedes filtrar los datos resultantes usando los campos contactIdentifier, estado, límite o después como parámetros de consulta en tu solicitud. | Parámetro de consulta | Tipo | Descripción | | - | - | - | | `contactIdentifier` | Cadena | La dirección de correo electrónico o el ID de un contacto específico | | `state` | Enumeración | El estado de participación del evento. Los estados de participación son:
        • `REGISTERED`: El contacto se registró en el evento
        • `CANCELLED`: El registro del contacto se canceló.
        • `ATTENDED`: El contacto asistió al evento.
        • `NO_SHOW`: El contacto se registró pero no asistió al evento.
        | | `limit` | Número | El límite de los resultados devueltos. De forma predeterminada, el límite se define como 10. El intervalo válido es de 1 a 100. | | `after` | Número | Se utiliza para la paginación entre los resultados de la respuesta. Consulta la información proporcionada en la página anterior de datos de respuesta para determinar el próximo índice de resultados que se devolverá. | ## Endpoints de asociación de listas Puedes usar los endpoints descritos en las secciones siguientes para gestionar asociaciones entre listas y eventos de marketing. Muchos de estos endpoints requieren un `listId` como parámetro de ruta, que puedes encontrar en la página de detalles de la lista en tu cuenta de HubSpot: * En tu cuenta de HubSpot, navega a **CRM** > **Listas**. * Haz clic en el **nombre** de una lista. * En la parte superior derecha, haz clic en **Detalles**. * En el panel derecho, el ID de la lista aparecerá en *ID de listas para integraciones de API*. Puedes hacer clic en **Copiar ID de lista** para copiar el ID en el portapapeles. ![list-details-panel-list-associations-api](https://www.hubspot.es/hubfs/Knowledge_Base_2023_2024/list-details-panel-list-associations-api.png) A medida que asocies listas a tus eventos de marketing, aparecerán en la página de detalles del evento de marketing en tu cuenta de HubSpot: * En tu cuenta de HubSpot, navega a **CRM** > **Contactos**. * En la parte superior izquierda, haz clic en **Contactos** y en el menú desplegable, selecciona **Eventos de marketing**. * Haz clic en el **nombre** de un evento de marketing. * En la pestaña *Rendimiento*, haz clic en **Listas** para ampliar la sección y, a continuación, haz clic en la pestaña **Listas agregadas a través de asociaciones**. ![review-list-associations-for-marketing-events-api](https://www.hubspot.es/hubfs/Knowledge_Base_2023_2024/review-list-associations-for-marketing-events-api.png) ### Crear una asociación entre una lista y un ID de evento de marketing Para crear una nueva asociación entre un evento de marketing y una lista existente, haz una solicitud `PUT` a `/marketing/v3/marketing-events/associations/{marketingEventId}/lists/{listId}`. Si tiene éxito, recibirás una respuesta `204 No content`. ### Crear una asociación entre una lista y un evento externo e ID de cuenta Para crear una nueva asociación entre un evento de marketing y una lista existente utilizando el ID de cuenta externa y el ID de evento externo, haz una solicitud `PUT` a `/marketing/v3/marketing-events/associations/{externalAccountId}/{externalEventId}/lists/{listId}`. Si tiene éxito, recibirás una respuesta `204 No content`. ### Obtener las listas asociadas a un evento de marketing utilizando el ID del evento Para obtener todas las listas asociadas a un evento de marketing, haz una solicitud `GET` a `/marketing/v3/marketing-events/associations/{marketingEventId}/lists`. La respuesta tendrá el siguiente formato: ```json theme={null} { "total": 1, "results": [ { "listId": "string", "listVersion": 0, "createdAt": "2024-05-10T08:58:35.769Z", "updatedAt": "2024-05-10T08:58:35.769Z", "filtersUpdatedAt": "2024-05-10T08:58:35.769Z", "processingStatus": "string", "createdById": "string", "updatedById": "string", "processingType": "string", "objectTypeId": "string", "name": "string", "size": 0 } ] } ``` ### Obtener las listas asociadas a un evento de marketing utilizando el ID y las cuentas externas También puedes obtener listas asociadas a un evento de marketing utilizando el ID de una cuenta externa y el ID de un evento externo. Para ello, haz una solicitud `GET` a `/marketing/v3/marketing-events/associations/{externalAccountId}/{externalEventId}/lists`. ### Eliminar la asociación de una lista mediante un ID de evento de marketing Para eliminar la asociación de una lista con un evento de marketing utilizando el ID del evento de marketing, haz una solicitud `DELETE` a `/marketing/v3/marketing-events/associations/{marketingEventId}/lists/{listId}`. Si tiene éxito, recibirás una respuesta `204 No content`. ### Borrar la asociación de una lista mediante un evento externo y el ID de una cuenta Para eliminar la asociación de una lista y un evento de marketing utilizando el ID de una cuenta externa y el ID de un evento externo, haz una solicitud `DELETE` a `/marketing/v3/marketing-events/associations/{externalAccountId}/{externalEventId}/lists/{listId}`. Si tiene éxito, recibirás una respuesta `204 No content`. ## Configurar los valores de la aplicación Se requiere cierta configuración para permitir que los eventos de marketing se sincronicen correctamente con HubSpot. Si envías a HubSpot un cambio de estado del asistente a un evento (por ejemplo, un registro en el evento o un evento cancelado), HubSpot primero comprobará si hay un evento de marketing con el ID del evento especificado. Si no es así, HubSpot llamará al punto de conexión configurado de tu aplicación para obtener los detalles del evento de marketing, luego creará el evento en HubSpot y luego, publicará el cambio de estado del asistente. Esto se proporciona por conveniencia; sin embargo, se recomienda que crees los eventos de marketing mediante los métodos CRUD que se detallan en [este documento](/docs/api-reference/marketing-marketing-events-v3/guide) y no confíes en esta funcionalidad para crear tus eventos de marketing en HubSpot. ### Paso 1: Crea una API en tu aplicación Para que esta funcionalidad sea posible, HubSpot requiere que cada aplicación que use eventos de marketing defina una API para obtener información sobre un evento específico. Requisitos: * Acepta: * `externalAccountId`: un parámetro de consulta que especifica el accountId del cliente en la aplicación externa. * `appId`: un parámetro de consulta que especifica el ID de la aplicación de HubSpot que solicita los detalles del evento. Este será el ID de tu aplicación. * `externalEventId`: un parámetro de ruta en la URL de la solicitud que especifica el ID del evento en la aplicación externa sobre la que HubSpot requiere detalles. * Devuelve: * Un objeto JSON que proporciona los detalles del evento de marketing, y que incluye los campos de esta tabla: \| Nombre del campo | Requerido | Tipo | Descripción del campo | \| ------------------ | --------- | --------------------- | ------------------------------------------------------------------------------------- | --- | \| `eventName` | verdadero | cadena | El nombre del evento de marketing | \| `eventOrganizer` | verdadero | cadena | El nombre del organizador del evento de marketing. | \| `eventType` | falso | cadena | Describe qué tipo de evento es este. Por ejemplo, `WEBINAR`, `CONFERENCE`, `WORKSHOP` | . | \| `startDateTime` | falso | cadena (fecha y hora) | La fecha y la hora de inicio del evento de marketing. | \| `endDateTime` | falso | cadena (fecha y hora) | La fecha y la hora de finalización del evento de marketing. | \| `eventDescription` | falso | cadena (fecha y hora) | La descripción del evento de marketing. | \| `eventUrl` | falso | cadena (fecha y hora) | Una URL en la aplicación del evento externo donde se realiza el evento de marketing. | \| `eventCancelled` | falso | boolenano | Indica si el evento de marketing se canceló. El valor predeterminado es `false` | HubSpot también enviará un encabezado `X-HubSpot-Signature-v3` que puedes usar para verificar que la solicitud proviene de HubSpot. Consulta información sobre las [firmas de solicitud](/docs/apps/legacy-apps/authentication/validating-requests) para obtener detalles adicionales sobre la firma y cómo validarla. ### Paso 2: Da a HubSpot la ruta URL a la API Ahora que has creado la API en tu aplicación que devolverá un objeto con los detalles de un evento de marketing específico, deberás proporcionar a HubSpot la ruta de la URL a la API haciendo una solicitud `POST` a `/marketing/v3/marketing-events/{appId}/settings`. Esto permitirá a HubSpot determinar cómo realizar solicitudes a tu aplicación para obtener los detalles de un evento de marketing. En el cuerpo de tu solicitud `POST`, especifica la URL utilizando el campo `eventDetailsURL`. El `eventDetailsURL` debe cumplir con los siguientes requisitos: * Contener una secuencia de caracteres `%s`, que HubSpot utilizará para hacer la substitución en el ID del evento (`externalEventId`) como parámetro de ruta. * Debe ser la ruta completa al recurso API, incluido el prefijo `https://` y el nombre de dominio (por ejemplo, `my.event.app`). Por ejemplo, si configuras un `eventDetailsURL` de `https://my.event.app/events/%s` y necesitas hacer una solicitud para obtener detalles de un evento con el ID `1234-event-XYZ`, de la aplicación HubSpot con el ID `app-101` y la cuenta con el ID `ABC-account-789`, HubSpot hará una solicitud `GET` a: `https://my.event.app/events/1234-event-XYZ?appId=app-101&externalAccountId=ABC-account-789` # Get events by external ID Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-events/identifiers/get-marketing-events-externalId specs/2026-09/marketing-marketing-events-v2026-09.json GET /marketing/marketing-events/2026-09/{externalEventId}/identifiers El punto de terminación busca el portal para todos los eventos de marketing cuyo externalEventId coincida con el valor proporcionado en la solicitud. Recupera el objectId y detalles adicionales para cada evento de marketing que coincida. Dado que múltiples eventos de marketing pueden tener el mismo externalEventId, el punto de terminación devuelve todos los resultados que coincidan. Nota: los eventos de marketing se pueden buscar por externalEventId a pocos minutos de haber sido creados. > **Supported products** > **Required Scopes** # Search for events by external ID Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-events/identifiers/search-events specs/2026-09/marketing-marketing-events-v2026-09.json GET /marketing/marketing-events/2026-09/events/search Recupera eventos de marketing en los que el externalEventId coincide con el valor proporcionado en la solicitud, limitándose a eventos creados por la aplicación que hace la solicitud. Los eventos de marketing creados por otras aplicaciones no se incluirán en los resultados. > **Supported products** > **Required Scopes** # Associate a list by external ID Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-events/list-associations/associate-list-externalId specs/2026-09/marketing-marketing-events-v2026-09.json PUT /marketing/marketing-events/2026-09/associations/{externalAccountId}/{externalEventId}/lists/{listId} Asociar una lista a un evento de marketing por ID de cuenta externa, ID de evento externo e ID de lista ILS > **Supported products** > **Required Scopes** # Get associated lists by external ID Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-events/list-associations/get-lists-externalId specs/2026-09/marketing-marketing-events-v2026-09.json GET /marketing/marketing-events/2026-09/associations/{externalAccountId}/{externalEventId}/lists Obtiene listas asociadas a un evento de marketing por ID de cuenta externa e ID de evento externo > **Supported products** > **Required Scopes** # Remove a list from an event by external ID Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-events/list-associations/remove-list-externalId specs/2026-09/marketing-marketing-events-v2026-09.json DELETE /marketing/marketing-events/2026-09/associations/{externalAccountId}/{externalEventId}/lists/{listId} Desasocia una lista de un evento de marketing por ID de cuenta externa, ID de evento externo e ID de lista ILS > **Supported products** > **Required Scopes** # Retrieve participants by contact identifier Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-events/participant-state/get-participants-contactId specs/2026-09/marketing-marketing-events-v2026-09.json GET /marketing/marketing-events/2026-09/participations/contacts/{contactIdentifier}/breakdown Lee las participaciones del contacto por identificador: correo o id interno. > **Supported products** > **Required Scopes** # Retrieve participants by external ID Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-events/participant-state/get-participants-externalId specs/2026-09/marketing-marketing-events-v2026-09.json GET /marketing/marketing-events/2026-09/participations/{externalAccountId}/{externalEventId} Lee los contadores de participaciones del evento de Marketing por el par de externalAccountId y externalEventId. > **Supported products** > **Required Scopes** # Retrieve the application settings Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-events/settings/get-app-settings specs/2026-09/marketing-marketing-events-v2026-09.json GET /marketing/marketing-events/2026-09/{appId}/settings Recupera la configuración actual de la aplicación. > **Supported products** # Update the application settings Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-events/settings/update-app-settings specs/2026-09/marketing-marketing-events-v2026-09.json POST /marketing/marketing-events/2026-09/{appId}/settings Crea o actualiza la configuración actual de la aplicación. > **Supported products** # Record a subscriber state by contact email Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-events/subscriber-state-changes/set-subscriber-state specs/2026-09/marketing-marketing-events-v2026-09.json POST /marketing/marketing-events/2026-09/events/{externalEventId}/{subscriberState}/email-upsert Registra el estado de un suscriptor entre múltiples contactos de HubSpot y un evento de marketing, utilizando las direcciones de correo electrónico de los contactos. Ten en cuenta que el contacto debe existir previamente en HubSpot; no se creará un contacto. El campo `contactProperties` se usa solo al crear un nuevo contacto. Estas propiedades no actualizarán los contactos existentes. > **Supported products** > **Required Scopes** # Set subscriber state by contact ID Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-events/subscriber-state-changes/set-subscriber-state-contactId specs/2026-09/marketing-marketing-events-v2026-09.json POST /marketing/marketing-events/2026-09/events/{externalEventId}/{subscriberState}/upsert Registra un estado del suscriptor entre múltiples contactos de HubSpot y un evento de marketing, utilizando los ID de los contactos de HubSpot. Ten en cuenta que el contacto ya debe existir en HubSpot; no se creará un contacto. > **Supported products** > **Required Scopes** # Update event by HubSpot ID Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-events/update-event specs/2026-09/marketing-marketing-events-v2026-09.json PATCH /marketing/marketing-events/2026-09/{objectId} Actualiza los detalles de un evento de marketing existente identificado por su objectId, si existe. > **Supported products** > **Required Scopes** # Partially update event by external ID Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-events/update-event-externalId specs/2026-09/marketing-marketing-events-v2026-09.json PATCH /marketing/marketing-events/2026-09/events/{externalEventId} Actualiza los detalles de un evento de marketing existente identificado por su externalAccountId, externalEventId, si existe. Solo se actualizan eventos de marketing creados por la misma aplicación. > **Supported products** > **Required Scopes** # Update event by external ID Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/marketing-events/update-marketing-event specs/2026-09/marketing-marketing-events-v2026-09.json PUT /marketing/marketing-events/2026-09/events/{externalEventId} Actualiza o crea un evento de marketing. Si existe un evento de marketing con el ID especificado, se actualizará; de lo contrario, se creará un nuevo evento. > **Supported products** > **Required Scopes** # Send a transactional email Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/transactional-emails/create-transactional-email specs/2026-09/marketing-transactional-single-send-v2026-09.json POST /marketing/transactional/2026-09/single-email/send Envía un correo transaccional de forma asíncrona. Devuelve el estado del envío con un statusId que se puede usar para consultar el estado utilizando la API de estado de envío de correo. > **Supported products** > **Required Scopes** # Transactional email API guide Source: https://developers.hubspot.es/docs/api-reference/latest/marketing/transactional-emails/guide # Retrieve conversation recap data Source: https://developers.hubspot.es/docs/api-reference/latest/meetings/notetaker/get-conversation-recap specs/2026-09/crm-notetaker-conversation-recap-v2026-09.json GET /notetaker/2026-09/conversation/recap/{objectTypeId}/{objectId} Obtén un resumen de una conversación según el tipo y la ID de objeto especificados. Este punto de terminación proporciona una variedad de datos relacionados con las conversaciones, como el resumen, los elementos de acción, las preguntas formuladas, las estadísticas de llamadas, los participantes y la URL de la grabación. > **Supported products** > **Required Scopes** # Notetaker conversations recap API Source: https://developers.hubspot.es/docs/api-reference/latest/meetings/notetaker/guide # Create a new calendar event for a meeting Source: https://developers.hubspot.es/docs/api-reference/latest/meetings/scheduler/calendar/create-calendar-event specs/2026-09/scheduler-meetings-v2026-09.json POST /scheduler/2026-09/meetings/calendar Crea un nuevo evento de reunión en tu cuenta de HubSpot. Este punto de terminación te permite especificar detalles como el título de la reunión, las horas de inicio y fin, y los usuarios asociados. El organizerUserId es necesario para identificar al organizador de la reunión. > **Supported products** > **Required Scopes** # Meetings scheduler API Source: https://developers.hubspot.es/docs/api-reference/latest/meetings/scheduler/guide # Book Meeting Source: https://developers.hubspot.es/docs/api-reference/latest/meetings/scheduler/meetings/create-meeting specs/2026-09/scheduler-meetings-v2026-09.json POST /scheduler/2026-09/meetings/meeting-links/book Programa una reunión usando un enlace de reunión específico. Este punto de terminación te permite crear una reunión proporcionando los detalles necesarios como la duración, el correo electrónico y la hora de inicio. Es útil para programar reuniones de forma programática a través de la API de HubSpot. > **Supported products** > **Required Scopes** # Retrieve availability Source: https://developers.hubspot.es/docs/api-reference/latest/meetings/scheduler/meetings/get-availability specs/2026-09/scheduler-meetings-v2026-09.json GET /scheduler/2026-09/meetings/meeting-links/book/availability-page/{slug} Obtén la disponibilidad y los horarios ocupados para un enlace de reunión específico. Este punto de terminación es útil para verificar los espacios disponibles para reservar reuniones según el slug proporcionado. Requiere especificar la zona horaria y, opcionalmente, permite ajustar la vista mensual con un desplazamiento. > **Supported products** > **Required Scopes** # Retrieve meeting links Source: https://developers.hubspot.es/docs/api-reference/latest/meetings/scheduler/meetings/get-meeting-links specs/2026-09/scheduler-meetings-v2026-09.json GET /scheduler/2026-09/meetings/meeting-links Obtén una lista de enlaces de reuniones disponibles en la cuenta de HubSpot. Este punto de terminación permite filtrar por varios criterios, como el nombre de la reunión, el ID de usuario del organizador y el tipo de reunión. Admite paginación para navegar por grandes conjuntos de resultados. > **Supported products** > **Required Scopes** # Retrieve booking info Source: https://developers.hubspot.es/docs/api-reference/latest/meetings/scheduler/meetings/get-meeting-slug specs/2026-09/scheduler-meetings-v2026-09.json GET /scheduler/2026-09/meetings/meeting-links/book/{slug} Obtén información detallada de una reserva para un enlace de reunión específico usando su slug. Este punto de terminación proporciona información sobre la disponibilidad y la configuración asociadas con el enlace de la reunión. Es útil para entender el contexto de la reserva y asegurarte de que se aplique la zona horaria correcta. > **Supported products** > **Required Scopes** # Retrieve payment accounts status Source: https://developers.hubspot.es/docs/api-reference/latest/revenue/payment-accounts/get-payment-account specs/2026-09/commerce-paymentsaccounts-v2026-09.json GET /commerce/payment-accounts/2026-09/status Consulta el estado de las cuentas de pago en tu cuenta de HubSpot. Este punto de terminación proporciona información sobre la capacidad de la cuenta para realizar transacciones y pagos, el estado de inscripción, cuándo fue la última transacción o si ya realizó alguna, y los tipos de procesadores de pagos para los que es elegible. Úsalo para monitorear y gestionar el estado operativo de tu cuenta de pago. > **Supported products** > **Required Scopes** # Payments accounts API Source: https://developers.hubspot.es/docs/api-reference/latest/revenue/payment-accounts/guide # Create a payment link Source: https://developers.hubspot.es/docs/api-reference/latest/revenue/payment-links/create-payment-link specs/2026-09/commerce-payment-links-v2026-09.json POST /commerce/payment-links/2026-09/payment-links Crea un nuevo enlace de pago en tu cuenta de HubSpot. Este punto de terminación te permite especificar varios atributos para el enlace de pago, como los métodos de pago aceptados, la divisa y campos de formulario adicionales. El enlace de pago se puede configurar para un solo uso y también puede recoger direcciones de envío y facturación. Esta operación requiere un cuerpo de solicitud JSON válido. Se aplicarán algunos valores predeterminados si no se proporciona ningún valor. > **Supported products** > **Required Scopes** # Delete a payment link Source: https://developers.hubspot.es/docs/api-reference/latest/revenue/payment-links/delete-payment-link specs/2026-09/commerce-payment-links-v2026-09.json DELETE /commerce/payment-links/2026-09/payment-links/{paymentLinkId} Elimina un enlace de pago específico en tu cuenta de HubSpot. Esta operación es irreversible y eliminará el enlace de pago identificado por el ID proporcionado. Usa este punto de terminación para gestionar y limpiar los enlaces de pago que ya no necesites. > **Supported products** > **Required Scopes** # Retrieve a payment link Source: https://developers.hubspot.es/docs/api-reference/latest/revenue/payment-links/get-payment-link specs/2026-09/commerce-payment-links-v2026-09.json GET /commerce/payment-links/2026-09/payment-links/{paymentLinkId} Obtén los detalles de un enlace de pago específico usando su identificador único. Este punto de terminación te permite acceder a la información del enlace de pago, como su estado y configuración. Es útil para revisar la configuración o el estado actual de un enlace de pago en tu cuenta de HubSpot. > **Supported products** > **Required Scopes** # Retrieve payment links Source: https://developers.hubspot.es/docs/api-reference/latest/revenue/payment-links/get-payment-links specs/2026-09/commerce-payment-links-v2026-09.json GET /commerce/payment-links/2026-09/payment-links Obtén una lista de enlaces de pago de tu cuenta de HubSpot. Este punto de terminación te permite filtrar y ordenar los enlaces de pago según varios criterios, como las marcas de tiempo de creación y actualización. Admite la paginación y puede incluir enlaces de pago archivados si se especifica. > **Supported products** > **Required Scopes** # Payment links API Source: https://developers.hubspot.es/docs/api-reference/latest/revenue/payment-links/guide # Update a payment link Source: https://developers.hubspot.es/docs/api-reference/latest/revenue/payment-links/update-payment-link specs/2026-09/commerce-payment-links-v2026-09.json PATCH /commerce/payment-links/2026-09/payment-links/{paymentLinkId} Actualiza un enlace de pago por ID. > **Supported products** > **Required Scopes** # Activate a price book Source: https://developers.hubspot.es/docs/api-reference/latest/revenue/price-books/activate-price-book specs/2026-09/commerce-price-books-v2026-09.json POST /commerce/price-books/2026-09/price-books/{priceBookId}/activate Activa un catálogo de precios específico en tu cuenta de HubSpot. Esta operación cambia el estado del catálogo de precios a activo, lo que permite usarlo en transacciones y otras operaciones. Asegúrate de que el ID del catálogo de precios sea correcto antes de la activación. > **Supported products** > **Required Scopes** # Create a price book Source: https://developers.hubspot.es/docs/api-reference/latest/revenue/price-books/create-price-book specs/2026-09/commerce-price-books-v2026-09.json POST /commerce/price-books/2026-09/price-books Crea un nuevo catálogo de precios en tu cuenta de HubSpot. Este punto de conexión te permite definir propiedades personalizadas, un nombre y las divisas disponibles en el catálogo de precios. Una solicitud exitosa devolverá la URL del recurso recién creado. > **Supported products** > **Required Scopes** # Deactivate a price book Source: https://developers.hubspot.es/docs/api-reference/latest/revenue/price-books/deactivate-price-book specs/2026-09/commerce-price-books-v2026-09.json POST /commerce/price-books/2026-09/price-books/{priceBookId}/deactivate Desactiva un catálogo de precios específico en tu cuenta de HubSpot. Esta acción cambia el estado del catálogo de precios a inactivo, lo que lo hace no disponible para usar en transacciones. Usa este punto de conexión cuando necesites deshabilitar un catálogo de precios temporal o permanentemente sin eliminarlo. > **Supported products** > **Required Scopes** # Delete a price book Source: https://developers.hubspot.es/docs/api-reference/latest/revenue/price-books/delete-price-book specs/2026-09/commerce-price-books-v2026-09.json DELETE /commerce/price-books/2026-09/price-books/{priceBookId} Elimina un catálogo de precios específico de tu cuenta de HubSpot usando su identificador único. Esta operación eliminará permanentemente el catálogo de precios y sus datos asociados, de modo que no estará disponible para uso futuro. > **Supported products** > **Required Scopes** # Retrieve a price book Source: https://developers.hubspot.es/docs/api-reference/latest/revenue/price-books/get-price-book specs/2026-09/commerce-price-books-v2026-09.json GET /commerce/price-books/2026-09/price-books/{priceBookId} Obtén un catálogo de precios específico por su identificador único en tu cuenta de HubSpot. Este punto de conexión te permite acceder a información detallada sobre un catálogo de precios, como su estado y las divisas disponibles. Puede ser útil para gestionar y revisar estrategias de precios dentro de tu sistema de comercio. > **Supported products** > **Required Scopes** # Retrieve price books Source: https://developers.hubspot.es/docs/api-reference/latest/revenue/price-books/get-price-books specs/2026-09/commerce-price-books-v2026-09.json GET /commerce/price-books/2026-09/price-books Obtén una lista de los catálogos de precios disponibles en tu cuenta de HubSpot. Este punto de conexión admite paginación y puede devolver catálogos de precios archivados si se especifica. Es útil para acceder a la información de precios de diferentes productos y servicios y gestionarla. > **Supported products** > **Required Scopes** # Price books API Source: https://developers.hubspot.es/docs/api-reference/latest/revenue/price-books/guide # Add a product to a price book Source: https://developers.hubspot.es/docs/api-reference/latest/revenue/price-books/items/add-product-to-price-book specs/2026-09/commerce-price-books-v2026-09.json POST /commerce/price-books/2026-09/price-books/{priceBookId}/items Agrega nuevos elementos a un catálogo de precios específico en tu cuenta de HubSpot. Este punto de conexión te permite asociar productos con un catálogo de precios al proporcionar los detalles necesarios de los productos. Es útil para gestionar y actualizar el contenido de tus catálogos de precios de manera eficiente. > **Supported products** > **Required Scopes** # Archive price book items Source: https://developers.hubspot.es/docs/api-reference/latest/revenue/price-books/items/batch/batch-archive-price-book-items specs/2026-09/commerce-price-books-v2026-09.json POST /commerce/price-books/2026-09/price-books/{priceBookId}/items/batch/archive Archiva varios elementos dentro de un catálogo de precios específico en una sola operación por lotes. Este punto de conexión es útil para gestionar grandes conjuntos de elementos de catálogos de precios que necesitan archivarse simultáneamente, lo que agiliza el proceso y reduce el número de solicitudes individuales. > **Supported products** > **Required Scopes** # Add products to a price book Source: https://developers.hubspot.es/docs/api-reference/latest/revenue/price-books/items/batch/batch-create-price-book-items specs/2026-09/commerce-price-books-v2026-09.json POST /commerce/price-books/2026-09/price-books/{priceBookId}/items/batch/create Crea varios elementos en un catálogo de precios específico en una sola operación por lotes. Este punto de conexión es útil para añadir de forma eficiente un gran número de elementos a un catálogo de precios, lo que reduce la necesidad de varias solicitudes individuales. La operación devuelve una respuesta por lotes que indica el éxito o el fracaso de la creación de cada elemento. > **Supported products** > **Required Scopes** # Delete a price book item Source: https://developers.hubspot.es/docs/api-reference/latest/revenue/price-books/items/delete-price-book-item specs/2026-09/commerce-price-books-v2026-09.json DELETE /commerce/price-books/2026-09/price-books/{priceBookId}/items/{priceBookItemId} Elimina un elemento específico de un catálogo de precios en tu cuenta de HubSpot. Esta operación es irreversible y eliminará permanentemente el elemento identificado por priceBookItemId del catálogo de precios especificado por priceBookId. > **Supported products** > **Required Scopes** # Retrieve a price book item Source: https://developers.hubspot.es/docs/api-reference/latest/revenue/price-books/items/get-price-book-item specs/2026-09/commerce-price-books-v2026-09.json GET /commerce/price-books/2026-09/price-books/{priceBookId}/items/{priceBookItemId} Obtén un elemento específico de un catálogo de precios usando sus identificadores únicos. Este punto de terminación permite acceder a información detallada sobre un elemento particular dentro de un catálogo de precios especificado, incluyendo sus propiedades y estado de archivado si aplica. > **Supported products** > **Required Scopes** # Retrieve price book items Source: https://developers.hubspot.es/docs/api-reference/latest/revenue/price-books/items/get-price-book-items specs/2026-09/commerce-price-books-v2026-09.json GET /commerce/price-books/2026-09/price-books/{priceBookId}/items Obtén una lista de elementos asociados a un catálogo de precios específico en tu cuenta de HubSpot. Este punto de terminación te permite paginar los artículos y especificar qué propiedades incluir en la respuesta. Es útil para gestionar y ver los detalles de los productos vinculados a un catálogo de precios en particular. > **Supported products** > **Required Scopes** # Update a price book item Source: https://developers.hubspot.es/docs/api-reference/latest/revenue/price-books/items/update-price-book-item specs/2026-09/commerce-price-books-v2026-09.json PATCH /commerce/price-books/2026-09/price-books/{priceBookId}/items/{priceBookItemId} Actualiza un elemento específico de un catálogo de precios en tu cuenta de HubSpot. Esta operación te permite modificar detalles como el precio, la frecuencia de facturación y las propiedades personalizadas del elemento especificado. Asegúrate de que el elemento esté identificado correctamente por su priceBookId y priceBookItemId únicos. > **Supported products** > **Required Scopes** # Update a price book Source: https://developers.hubspot.es/docs/api-reference/latest/revenue/price-books/update-price-book specs/2026-09/commerce-price-books-v2026-09.json PATCH /commerce/price-books/2026-09/price-books/{priceBookId} Actualiza un catálogo de precios existente en tu cuenta de HubSpot. Esta operación te permite modificar detalles como el nombre, la descripción, las divisas disponibles y las propiedades personalizadas de un catálogo de precios. Es útil para mantener la información de tu catálogo de precios al día con los últimos cambios. > **Supported products** > **Required Scopes** # Validate a price book Source: https://developers.hubspot.es/docs/api-reference/latest/revenue/price-books/validate-price-book specs/2026-09/commerce-price-books-v2026-09.json POST /commerce/price-books/2026-09/price-books/{priceBookId}/validate Valida un catálogo de precios específico en tu cuenta de HubSpot. Este punto de conexión comprueba la integridad y la exactitud del catálogo de precios identificado por el priceBookId dado. Úsalo para asegurarte de que el catálogo de precios cumpla con todos los criterios necesarios antes de continuar con otras operaciones. > **Supported products** > **Required Scopes** # Update price book items Source: https://developers.hubspot.es/docs/api-reference/latest/revenue/price-books/items/batch/batch-update-price-book-items specs/2026-09/commerce-price-books-v2026-09.json POST /commerce/price-books/2026-09/price-books/{priceBookId}/items/batch/update Actualiza varios elementos de un catálogo de precios específico en una sola operación por lotes. Este punto de conexión permite actualizar de forma eficiente los elementos del catálogo de precios, lo que lo hace útil para gestionar grandes conjuntos de datos dentro de un catálogo de precios. La operación devuelve una respuesta por lotes que indica el éxito o el fracaso de cada actualización de elemento. > **Supported products** > **Required Scopes** # Webhooks journal and management APIs (2026-09) Source: https://developers.hubspot.es/docs/api-reference/latest/webhooks-journal/guide # Get the earliest journal entry Source: https://developers.hubspot.es/docs/api-reference/latest/webhooks-journal/journal-entries/aggregate/get-journal-earliest specs/2026-09/webhooks-journal-webhooks-journal-v2026-09.json GET /webhooks-journal/journal/2026-09/earliest Obtén la entrada más antigua del registro de webhooks del portal especificado. Este punto de terminación es útil para acceder al primer evento de webhook incluido en el registro, lo que puede ser de ayuda para fines de auditoría o depuración. > **Supported products** # Get journal status Source: https://developers.hubspot.es/docs/api-reference/latest/webhooks-journal/journal-entries/aggregate/get-journal-status specs/2026-09/webhooks-journal-webhooks-journal-v2026-09.json GET /webhooks-journal/journal/2026-09/status/{statusId} Obtén el estado de una entrada específica del registro de webhooks usando su ID de estado único. Este punto de terminación proporciona información detallada sobre el estado: si está pendiente, en curso, completada, fallida o caducada. Es útil para monitorizar y gestionar el estado de las entradas del registro de webhooks. > **Supported products** # Read journal entries in batch Source: https://developers.hubspot.es/docs/api-reference/latest/webhooks-journal/journal-entries/aggregate/get-read specs/2026-09/webhooks-journal-webhooks-journal-v2026-09.json POST /webhooks-journal/journal/2026-09/batch/read Ejecuta una operación de lectura por lotes en el registro de webhooks para la fecha especificada, 03-2026. Este punto de terminación te permite obtener varias entradas del registro de webhooks en una única solicitud, lo que puede ser útil para procesar grandes cantidades de datos de manera eficiente. Asegúrate de que el cuerpo de la solicitud se proporcione en el formato requerido. > **Supported products** # Webhook journal APIs Source: https://developers.hubspot.es/docs/api-reference/latest/webhooks-journal/journal-entries/guide # Get the earliest local journal entries in batch Source: https://developers.hubspot.es/docs/api-reference/latest/webhooks-journal/journal-entries/local/batch/get-webhook specs/2026-09/webhooks-journal-webhooks-journal-v2026-09.json GET /webhooks-journal/journal-local/2026-09/batch/earliest/{count} Obtiene el lote más antiguo de entradas del registro de webhooks. Este punto de terminación es útil para acceder a los datos más antiguos disponibles en el registro de webhooks, lo que permite a los usuarios procesar o analizar eventos de webhooks anteriores. El número de entradas que se obtendrán se especifica mediante el parámetro de ruta 'count'. > **Supported products** # Get the latest local journal entries in batch Source: https://developers.hubspot.es/docs/api-reference/latest/webhooks-journal/journal-entries/local/batch/get-webhook-count specs/2026-09/webhooks-journal-webhooks-journal-v2026-09.json GET /webhooks-journal/journal-local/2026-09/batch/latest/{count} Obtén el último lote de entradas del registro de webhooks. Este punto de terminación te permite especificar el número de entradas que se obtendrán, lo que te da una forma de acceder a los eventos de webhooks más recientes procesados por tu cuenta de HubSpot. > **Supported products** # Read local journal entries in batch Source: https://developers.hubspot.es/docs/api-reference/latest/webhooks-journal/journal-entries/local/batch/get-webhooks specs/2026-09/webhooks-journal-webhooks-journal-v2026-09.json POST /webhooks-journal/journal-local/2026-09/batch/read Ejecuta una operación de lectura por lotes en el registro de webhooks. Este punto de terminación te permite obtener un lote de entradas del registro de webhooks al proporcionar los datos de entrada necesarios. Es útil para procesar múltiples registros en una sola solicitud, lo que agiliza las tareas de obtención de datos. > **Supported products** # Get the earliest local journal entry Source: https://developers.hubspot.es/docs/api-reference/latest/webhooks-journal/journal-entries/local/get-journal-local-earliest specs/2026-09/webhooks-journal-webhooks-journal-v2026-09.json GET /webhooks-journal/journal-local/2026-09/earliest Obtén las entradas más antiguas del registro de webhooks del portal especificado. Este punto de terminación se puede usar para acceder a los registros más antiguos disponibles en el registro de webhooks, lo que puede ser útil para auditorías o análisis del historial. > **Supported products** # Get the latest local journal entry Source: https://developers.hubspot.es/docs/api-reference/latest/webhooks-journal/journal-entries/local/get-journal-local-latest specs/2026-09/webhooks-journal-webhooks-journal-v2026-09.json GET /webhooks-journal/journal-local/2026-09/latest Obtén las últimas entradas del registro de webhooks del portal especificado. Este punto de terminación es útil para acceder a los eventos de webhooks más recientes que se han registrado, lo que permite la monitorización o depuración en tiempo real de las actividades de los webhooks. > **Supported products** # Get the next local journal entry Source: https://developers.hubspot.es/docs/api-reference/latest/webhooks-journal/journal-entries/local/get-journal-local-next specs/2026-09/webhooks-journal-webhooks-journal-v2026-09.json GET /webhooks-journal/journal-local/2026-09/offset/{offset}/next Obtén el siguiente conjunto de entradas del registro de webhooks a partir de un desplazamiento específico. Este punto de terminación es útil para paginar grandes conjuntos de datos de webhooks, lo que te permite continuar desde donde se quedó una solicitud anterior. > **Supported products** # Get local journal status Source: https://developers.hubspot.es/docs/api-reference/latest/webhooks-journal/journal-entries/local/get-journal-local-status specs/2026-09/webhooks-journal-webhooks-journal-v2026-09.json GET /webhooks-journal/journal-local/2026-09/status/{statusId} Obtén el estado de una entrada específica del registro de webhooks usando su ID de estado único. Este punto de terminación es útil para monitorizar el progreso o resultado de las entradas del registro de webhooks, lo que te permite verificar si una entrada está pendiente, en curso, completada, fallida o expirada. > **Supported products** # Create CRM object snapshots Source: https://developers.hubspot.es/docs/api-reference/latest/webhooks-journal/snapshots/create-webhook specs/2026-09/webhooks-journal-webhooks-journal-v2026-09.json POST /webhooks-journal/snapshots/2026-09/crm Crea un lote de instantáneas de objetos del CRM en HubSpot. Este punto de terminación se usa para capturar el estado actual de los objetos del CRM especificados para consultarlos o analizarlos más tarde. Requiere una carga útil JSON con los detalles de los objetos del CRM de los que se tomará la instantánea. Esta operación está exenta de los límites de solicitudes diarias y de diez segundos. > **Supported products** # Webhook CRM snapshots API Source: https://developers.hubspot.es/docs/api-reference/latest/webhooks-journal/snapshots/guide # Create a subscription filter Source: https://developers.hubspot.es/docs/api-reference/latest/webhooks-journal/subscriptions/create-filters specs/2026-09/webhooks-journal-webhooks-journal-v2026-09.json POST /webhooks-journal/subscriptions/2026-09/filters Crea un nuevo filtro para una suscripción a webhooks específica en la cuenta de HubSpot. Este punto de terminación te permite definir condiciones que determinan cuándo se debe activar un webhook. El filtro está asociado a una suscripción identificada por su ID, y la solicitud debe incluir los detalles del filtro. > **Supported products** # Create or update a subscription Source: https://developers.hubspot.es/docs/api-reference/latest/webhooks-journal/subscriptions/create-subscription specs/2026-09/webhooks-journal-webhooks-journal-v2026-09.json POST /webhooks-journal/subscriptions/2026-09 Crea una nueva suscripción al registro de webhook para el portal especificado. Este punto de terminación te permite definir las acciones y los tipos de objeto que la suscripción supervisará. Requiere un cuerpo de solicitud con los detalles de la suscripción. > **Supported products** # Delete a subscription filter Source: https://developers.hubspot.es/docs/api-reference/latest/webhooks-journal/subscriptions/delete-filter specs/2026-09/webhooks-journal-webhooks-journal-v2026-09.json DELETE /webhooks-journal/subscriptions/2026-09/filters/{filterId} Elimina un filtro específico de las suscripciones al registro de webhooks. Esta operación es útil para gestionar y limpiar filtros que ya no se necesitan. Una vez eliminado, el filtro no se puede recuperar. > **Supported products** # Delete a subscription Source: https://developers.hubspot.es/docs/api-reference/latest/webhooks-journal/subscriptions/delete-subscription specs/2026-09/webhooks-journal-webhooks-journal-v2026-09.json DELETE /webhooks-journal/subscriptions/2026-09/{subscriptionId} Elimina una suscripción específica al registro de webhooks usando su identificador único. Esta operación es útil para gestionar y limpiar suscripciones que ya no se necesitan en tu cuenta de HubSpot. > **Supported products** # Delete all subscriptions for an account Source: https://developers.hubspot.es/docs/api-reference/latest/webhooks-journal/subscriptions/delete-subscriptions-by-portal specs/2026-09/webhooks-journal-webhooks-journal-v2026-09.json DELETE /webhooks-journal/subscriptions/2026-09/portals/{portalId} Elimina una suscripción al registro de webhooks en un portal específico. Esta operación elimina la suscripción asociada con el portalId en cuestión, lo que garantiza que no se envíen más eventos de webhooks para este portal. Usa este punto de terminación para gestionar y limpiar suscripciones que ya no necesitas. > **Supported products** # Get a subscription filter Source: https://developers.hubspot.es/docs/api-reference/latest/webhooks-journal/subscriptions/get-filter specs/2026-09/webhooks-journal-webhooks-journal-v2026-09.json GET /webhooks-journal/subscriptions/2026-09/filters/{filterId} Obtén un filtro específico asociado a una suscripción al registro de webhooks. Este punto de terminación te permite acceder a los detalles del filtro identificado por el filterId, lo que es útil para gestionar y entender las condiciones aplicadas a los eventos de webhooks. > **Supported products** # Get filters for a subscription Source: https://developers.hubspot.es/docs/api-reference/latest/webhooks-journal/subscriptions/get-filters-by-subscription specs/2026-09/webhooks-journal-webhooks-journal-v2026-09.json GET /webhooks-journal/subscriptions/2026-09/filters/subscription/{subscriptionId} Obtén los filtros asociados a una suscripción a webhooks específica. Este punto de terminación te permite ver los filtros aplicados a una suscripción, lo que puede ayudarte a gestionar y entender las condiciones establecidas para los eventos de webhooks. > **Supported products** # Get all subscriptions Source: https://developers.hubspot.es/docs/api-reference/latest/webhooks-journal/subscriptions/get-subscriptions specs/2026-09/webhooks-journal-webhooks-journal-v2026-09.json GET /webhooks-journal/subscriptions/2026-09 Obtén una lista de suscripciones al registro de webhooks. Este punto de terminación te da acceso a los detalles de la suscripción sin paginación, lo que te permite ver todas las suscripciones actuales en una sola solicitud. Es útil para gestionar y revisar las suscripciones de webhooks de tu aplicación. > **Supported products** # Webhooks journal management APIs (2026.03) Source: https://developers.hubspot.es/docs/api-reference/latest/webhooks-journal/subscriptions/guide # Update event subscriptions in batch Source: https://developers.hubspot.es/docs/api-reference/latest/webhooks-journal/subscriptions/update-webhooks specs/2026-09/webhooks-webhooks-v2026-09.json POST /app-webhooks/2026-09/{appId}/subscriptions/batch/update Crear suscripciones a eventos en lote para la aplicación especificada. > **Supported products** # Webhooks API guide Source: https://developers.hubspot.es/docs/api-reference/latest/webhooks/guide # Batch create event subscriptions Source: https://developers.hubspot.es/docs/api-reference/latest/webhooks/subscriptions/batch/create-webhooks specs/2026-09/webhooks-webhooks-v2026-09.json POST /app-webhooks/2026-09/{appId}/subscriptions/batch/update Crear suscripciones a eventos en lote para la aplicación especificada. > **Supported products** > **Required Scopes** # Create an event subscription Source: https://developers.hubspot.es/docs/api-reference/latest/webhooks/subscriptions/create-webhook-appId specs/2026-09/webhooks-webhooks-v2026-09.json POST /app-webhooks/2026-09/{appId}/subscriptions Crea una nueva suscripción a eventos para la aplicación especificada. > **Supported products** > **Required Scopes** # Delete webhook settings Source: https://developers.hubspot.es/docs/api-reference/latest/webhooks/subscriptions/delete-webhook-appId specs/2026-09/webhooks-webhooks-v2026-09.json DELETE /app-webhooks/2026-09/{appId}/settings Elimina la configuración del webhook para la aplicación especificada. Las suscripciones a eventos no se eliminarán, pero se pausarán hasta que se cree otro webhook. > **Supported products** > **Required Scopes** # Read an event subscription Source: https://developers.hubspot.es/docs/api-reference/latest/webhooks/subscriptions/get-webhook-subscriptionId specs/2026-09/webhooks-webhooks-v2026-09.json GET /app-webhooks/2026-09/{appId}/subscriptions/{subscriptionId} Recupera una suscripción a eventos específica por ID. > **Supported products** > **Required Scopes** # Read webhook settings Source: https://developers.hubspot.es/docs/api-reference/latest/webhooks/subscriptions/get-webhooks-appId specs/2026-09/webhooks-webhooks-v2026-09.json GET /app-webhooks/2026-09/{appId}/settings Recupera la configuración del webhook para la app especificada, incluyendo la URL de destino del webhook, la configuración de limitación y la fecha de creación/actualización. > **Supported products** > **Required Scopes** # Read event subscriptions Source: https://developers.hubspot.es/docs/api-reference/latest/webhooks/subscriptions/get-webhooks-subscriptions specs/2026-09/webhooks-webhooks-v2026-09.json GET /app-webhooks/2026-09/{appId}/subscriptions Recupera suscripciones a eventos para la aplicación especificada. > **Supported products** > **Required Scopes** # Update webhook settings Source: https://developers.hubspot.es/docs/api-reference/latest/webhooks/subscriptions/update-webhook specs/2026-09/webhooks-webhooks-v2026-09.json PUT /app-webhooks/2026-09/{appId}/settings Actualiza la configuración del webhook para la aplicación especificada. > **Supported products** > **Required Scopes** # Update an event subscription Source: https://developers.hubspot.es/docs/api-reference/latest/webhooks/subscriptions/update-webhook-subscriptionId specs/2026-09/webhooks-webhooks-v2026-09.json PATCH /app-webhooks/2026-09/{appId}/subscriptions/{subscriptionId} Actualiza una suscripción a eventos existente por ID. > **Supported products** > **Required Scopes** # Crear con perfiles de configuración Source: https://developers.hubspot.es/docs/developer-tooling/local-development/build-with-config-profiles # Probar tus aplicaciones de HubSpot con cuentas de prueba configurables Source: https://developers.hubspot.es/docs/developer-tooling/local-development/configurable-test-accounts # Instalar la CLI de HubSpot Source: https://developers.hubspot.es/docs/developer-tooling/local-development/hubspot-cli/install-the-cli # Referencia de la CLI de proyectos (BETA) Source: https://developers.hubspot.es/docs/developer-tooling/local-development/hubspot-cli/project-commands # Comandos de la CLI de HubSpot (v7) Source: https://developers.hubspot.es/docs/developer-tooling/local-development/hubspot-cli/reference # Instalar la extensión de HubSpot Visual Studio Code Source: https://developers.hubspot.es/docs/developer-tooling/local-development/vs-code-extension # Resumen de Primeros pasos Source: https://developers.hubspot.es/docs/developer-tooling/overview Aprende los primeros pasos para desarrollar en HubSpot. 'Aprende los primeros pasos para desarrollar en HubSpot.'; Tanto si eres un nuevo desarrollador de HubSpot como si quieres ampliar tus conocimientos, esta sección te guiará a través del proceso de puesta en marcha. Explorarás las distintas vías de desarrollo disponibles, así como las herramientas y cuentas específicas que necesitarás para alcanzar tus metas. ## Las ventajas de una plataforma conectada Primero, es útil considerar qué hace de HubSpot una potente plataforma para desarrolladores. La base de toda cuenta de HubSpot es la plataforma [CRM](/docs/guides/crm/understanding-the-crm) (Customer Relationship Management), una base de datos de relaciones y procesos de negocios. HubSpot ofrece diferentes vías para que desarrolladores y partners externos trabajen con el CRM y puedan crear valor agregado para los usuarios finales de HubSpot. Esto incluye: * Crear integraciones y/o extensiones con las API de HubSpot para sincronizar datos entre HubSpot y plataformas externas. * Construir sitios web personalizados utilizando el CMS (Sistema de gestión de contenido) de HubSpot. Además de un conjunto completo de herramientas de gestión de contenido, el CMS se integra totalmente con el CRM. Esto facilita el lanzamiento de campañas, la captación de leads y las comunicaciones continuas con los clientes. * Personalización del CRM con extensiones de IU. Los desarrolladores pueden utilizar React para crear tarjetas personalizadas flexibles que se integran perfectamente con HubSpot. En la siguiente sección, obtendrás un resumen de las herramientas que están disponibles para los desarrolladores de HubSpot. A continuación, elegirás una ruta para continuar tu viaje como desarrollador de HubSpot. ## 1. Instala herramientas que te ayuden a construir Hay una amplia gama de herramientas disponibles para los desarrolladores de HubSpot. La combinación de herramientas que necesitarás dependerá de tus metas específicas. * **CLI de HubSpot:** Instalar la CLI de HubSpot para el desarrollo local es un gran punto de partida para muchas tareas de desarrollo. La CLI se utiliza al crear extensiones de IU y recursos de CMS, y puede utilizarse para crear y gestionar secretos, tablas de HubDB y datos de objetos personalizados de tu cuenta. Necesitarás tener instalado [Node.js](https://nodejs.org/en/) (se requiere la versión 18 o superior, y se recomienda la versión LTS). Para instalar el CLI globalmente, ejecuta el siguiente comando: ```shell theme={null} npm i -g @hubspot/cli ``` * **Visual Studio Code:** Instalar [Visual Studio Code](https://code.visualstudio.com/) significa que puedes aprovechar la extensión [Visual Studio Code de HubSpot](https://developers.hubspot.com/docs), lo cual te permite centralizar tu workflow de desarrollo. * **Bibliotecas de clientes**: HubSpot proporciona bibliotecas de clientes para [Node](https://github.com/HubSpot/hubspot-api-nodejs), [PHP](https://github.com/HubSpot/hubspot-api-php), [Ruby](https://github.com/HubSpot/hubspot-api-ruby) y [Python](https://github.com/HubSpot/hubspot-api-python). * **Postman:** utiliza [Postman](https://www.postman.com/) para acceder a [Colecciones de Postman de HubSpot](https://www.postman.com/hubspot). A lo largo de la documentación de la API de HubSpot, encontrarás botones para ejecutar llamadas utilizando la colección. ![run-in-postman-current-docs-site](https://www.hubspot.com/hubfs/run-in-postman-current-docs-site.png) Más información sobre [herramientas para desarrolladores de de HubSpot](/docs/developer-tooling/overview). ## 2. Decide qué construir No hay un camino único para desarrollar con HubSpot. Es una plataforma flexible que puede satisfacer una amplia gama de necesidades. Una de las cuatro amplias categorías que se enumeran a continuación debería cubrir la mayoría de estas necesidades. Puedes elegir la que sea más relevante para ti en este momento para una breve introducción, junto con algunos pasos inmediatos para empezar. También puedes hacerte una idea de cuáles son las mejores herramientas para el trabajo, y si se requiere un [tipo específico de cuenta de HubSpot](/docs/getting-started/account-types). * [Utilizar API y crear integraciones](https://developers.hubspot.com#use-apis-and-build-integrations) * [Crear aplicaciones para el mercado](https://developers.hubspot.com#build-for-the-app-marketplace) * [Personalizar la IU de HubSpot](https://developers.hubspot.com#customize-the-hubspot-ui) * [Crear sitios web personalizados](https://developers.hubspot.com#build-custom-websites) ## 3. Únete a tus pares Conecta con tus pares que ya están construyendo en HubSpot. Haz preguntas, comparte conocimientos, construye una comunidad e incluso puede que hagas amigos por el camino. * [Slack para desarrolladores](https://developers.hubspot.com/community) * [Foros de desarrolladores](https://community.hubspot.com/t5/HubSpot-Developers/ct-p/developers) * [Developer Advocacy GitHub](https://github.com/hubspotdev) ## 4. Obtén más información, a tu manera Una vez que estés en marcha, hay muchos recursos disponibles para ayudarte a profundizar. Puedes acceder a guías detalladas, documentos de referencia detallados o a los cursos de [HubSpot Academy](https://academy.hubspot.com/courses), según tu estilo de aprendizaje preferido. # Cambios en la plataforma de HubSpot Source: https://developers.hubspot.es/docs/developer-tooling/platform/breaking-change-definition # Directrices y límites de uso de la API Source: https://developers.hubspot.es/docs/developer-tooling/platform/usage-guidelines # Versiones de la plataforma para desarrolladores Source: https://developers.hubspot.es/docs/developer-tooling/platform/versioning # Node Source: https://developers.hubspot.es/docs/developer-tooling/sdks/node # Php Source: https://developers.hubspot.es/docs/developer-tooling/sdks/php # Python Source: https://developers.hubspot.es/docs/developer-tooling/sdks/python # Ruby Source: https://developers.hubspot.es/docs/developer-tooling/sdks/ruby # Configurar las acciones de GitHub (BETA) Source: https://developers.hubspot.es/docs/developer-tooling/third-party-tools/set-up-github-actions