> ## Documentation Index
> Fetch the complete documentation index at: https://developers.hubspot.es/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# API de Webhooks 

export const postmanIcon = <svg xmlns="http://www.w3.org/2000/svg" width={25} height={25} preserveAspectRatio="xMidYMid" viewBox="0 0 256 256">
    <path fill="#FF6C37" d="M254.953 144.253c8.959-70.131-40.569-134.248-110.572-143.206C74.378-7.912 10.005 41.616 1.047 111.619c-8.959 70.003 40.569 134.248 110.572 143.334 70.131 8.959 134.248-40.569 143.334-110.7Z" />
    <path fill="#FFF" d="m174.2 82.184-54.007 54.007-15.229-15.23c53.11-53.11 58.358-48.503 69.236-38.777Z" />
    <path fill="#FF6C37" d="M120.193 137.47c-.384 0-.64-.128-.895-.384l-15.358-15.229a1.237 1.237 0 0 1 0-1.792c54.007-54.006 59.638-48.887 71.028-38.649.255.256.383.512.383.896s-.128.64-.383.896l-54.007 53.878c-.128.256-.512.384-.768.384Zm-13.437-16.509 13.437 13.438 52.087-52.087c-9.47-8.446-15.87-11.006-65.524 38.65Z" />
    <path fill="#FFF" d="m135.679 151.676-14.718-14.718 54.007-54.006c14.46 14.59-7.167 38.265-39.29 68.724Z" />
    <path fill="#FF6C37" d="M135.679 152.956c-.384 0-.64-.128-.896-.384l-14.718-14.718c-.256-.256-.256-.512-.256-.896s.128-.64.384-.895L174.2 82.056a1.237 1.237 0 0 1 1.791 0 15.58 15.58 0 0 1 4.991 11.902c-.256 14.206-16.38 32.25-44.28 58.614-.383.256-.767.384-1.023.384Zm-12.926-15.998c8.19 8.319 11.646 11.646 12.926 12.926 21.5-20.476 42.36-41.464 42.488-55.926.128-3.327-1.152-6.655-3.327-9.214l-52.087 52.214Z" />
    <path fill="#FFF" d="m105.22 121.345 10.878 10.878c.256.256.256.512 0 .768-.128.128-.128.128-.256.128l-22.524 4.863c-1.152.128-2.175-.64-2.431-1.791-.128-.64.128-1.28.512-1.664l13.053-13.054c.256-.256.64-.384.768-.128Z" />
    <path fill="#FF6C37" d="M92.934 139.262c-1.92 0-3.327-1.536-3.327-3.455 0-.896.384-1.792 1.024-2.432l13.053-13.054c.768-.64 1.792-.64 2.56 0l10.878 10.878c.768.64.768 1.792 0 2.56-.256.256-.512.384-.896.512l-22.524 4.863c-.256 0-.512.128-.768.128Zm11.902-16.51-12.542 12.543c-.256.256-.383.64-.128 1.024.128.383.512.511.896.383l21.116-4.607-9.342-9.342Z" />
    <path fill="#FFF" d="M202.739 52.238c-8.191-7.935-21.373-7.679-29.307.64-7.935 8.318-7.679 21.372.64 29.306A20.678 20.678 0 0 0 199.155 85l-14.59-14.59 18.174-18.172Z" />
    <path fill="#FF6C37" d="M188.405 89.223c-12.158 0-22.012-9.854-22.012-22.012 0-12.158 9.854-22.012 22.012-22.012 5.631 0 11.134 2.176 15.23 6.143.255.256.383.512.383.896s-.128.64-.384.895L186.357 70.41l13.566 13.566c.512.512.512 1.28 0 1.792l-.256.256c-3.327 2.047-7.295 3.199-11.262 3.199Zm0-41.337c-10.75 0-19.452 8.703-19.324 19.453 0 10.75 8.702 19.452 19.452 19.324 2.944 0 5.887-.64 8.575-2.047l-13.438-13.31c-.256-.256-.384-.512-.384-.896s.128-.64.384-.895l17.149-17.15c-3.456-2.943-7.807-4.479-12.414-4.479Z" />
    <path fill="#FFF" d="m203.122 52.622-.255-.256-18.301 18.044 14.461 14.462c1.408-.896 2.816-1.92 3.967-3.072a20.51 20.51 0 0 0 .128-29.178Z" />
    <path fill="#FF6C37" d="M199.155 86.28c-.384 0-.64-.128-.896-.384l-14.589-14.59c-.256-.256-.384-.512-.384-.896s.128-.64.384-.895l18.173-18.173a1.237 1.237 0 0 1 1.791 0l.384.256c8.575 8.574 8.575 22.396.128 31.098-1.28 1.28-2.687 2.432-4.223 3.328-.384.128-.64.256-.768.256Zm-12.798-15.87 12.926 12.926c1.024-.64 2.048-1.536 2.816-2.304 7.294-7.294 7.678-19.196.64-26.875L186.357 70.41Z" />
    <path fill="#FFF" d="M176.375 84.488a7.879 7.879 0 0 0-11.134 0l-48.247 48.247 8.063 8.063 51.062-44.792c3.328-2.816 3.584-7.807.768-11.134-.256-.128-.384-.256-.512-.384Z" />
    <path fill="#FF6C37" d="M124.929 142.077c-.384 0-.64-.128-.896-.383l-8.063-8.063a1.237 1.237 0 0 1 0-1.792l48.247-48.247a9.115 9.115 0 0 1 12.926 0 9.115 9.115 0 0 1 0 12.926l-.384.384-51.063 44.792c-.128.255-.384.383-.767.383Zm-6.143-9.342 6.27 6.271 50.167-44.024c2.816-2.304 3.072-6.527.768-9.342-2.303-2.816-6.526-3.072-9.342-.768-.128.128-.256.256-.512.384l-47.351 47.48Z" />
    <path fill="#FFF" d="M80.009 187.637c-.512.256-.768.768-.64 1.28l2.175 9.214c.512 1.28-.256 2.816-1.663 3.2-1.024.384-2.176 0-2.816-.768l-14.077-13.95 45.943-45.943 15.87.256 10.75 10.75c-2.56 2.175-18.045 17.149-55.542 35.961Z" />
    <path fill="#FF6C37" d="M78.985 202.61c-1.024 0-2.048-.383-2.688-1.151l-13.95-13.95c-.255-.256-.383-.512-.383-.896 0-.383.128-.64.384-.895l45.944-45.944c.256-.256.64-.384.895-.384l15.87.256c.383 0 .64.128.895.384l10.75 10.75c.256.256.384.64.384 1.024s-.128.64-.512.896l-.895.767c-13.566 11.902-31.995 23.804-54.902 35.194l2.175 9.086c.384 1.664-.384 3.456-1.92 4.352-.767.384-1.407.512-2.047.512Zm-14.078-15.997 13.182 13.054c.384.64 1.152.896 1.792.512.64-.384.896-1.152.512-1.792l-2.176-9.214c-.256-1.152.256-2.176 1.28-2.688 22.652-11.39 40.952-23.163 54.39-34.81l-9.47-9.47-14.718-.256-44.792 44.664Z" />
    <path fill="#FFF" d="m52.11 197.62 11.006-11.007 16.38 16.381-26.107-1.791c-1.151-.128-1.92-1.152-1.791-2.304 0-.512.128-1.024.512-1.28Z" />
    <path fill="#FF6C37" d="m79.497 204.146-26.236-1.791c-1.92-.128-3.199-1.792-3.071-3.712.128-.768.384-1.535 1.024-2.047L62.22 185.59a1.237 1.237 0 0 1 1.792 0l16.38 16.38c.385.385.512.897.257 1.408-.256.512-.64.768-1.152.768Zm-16.381-15.74-10.11 10.11c-.384.255-.384.895 0 1.151.127.128.255.256.511.256l22.652 1.536-13.053-13.054ZM104.452 146.557c-.768 0-1.28-.64-1.28-1.28 0-.384.128-.64.384-.896l12.414-12.414a1.237 1.237 0 0 1 1.792 0l8.062 8.063c.384.384.512.768.384 1.28-.128.384-.512.767-1.023.895l-20.477 4.352h-.256Zm12.414-11.902-8.446 8.446 13.821-2.943-5.375-5.503Z" />
    <path fill="#FFF" d="m124.8 140.926-14.077 3.071c-1.024.256-2.048-.384-2.303-1.408-.128-.64 0-1.28.511-1.791l7.807-7.807 8.063 7.935Z" />
    <path fill="#FF6C37" d="M110.467 145.277a3.168 3.168 0 0 1-3.2-3.2c0-.895.385-1.663.897-2.303l7.806-7.807a1.237 1.237 0 0 1 1.792 0l8.062 8.063c.384.384.512.768.384 1.28-.128.384-.512.767-1.023.895l-14.078 3.072h-.64Zm6.399-10.622-6.91 6.91c-.257.257-.257.512-.129.768s.384.384.768.384l11.774-2.56-5.503-5.502ZM203.25 64.907c-.256-.767-1.151-1.151-1.92-.895-.767.255-1.151 1.151-.895 1.92 0 .127.128.255.128.383.768 1.536.512 3.455-.512 4.863-.512.64-.384 1.536.128 2.048.64.512 1.536.384 2.048-.256 1.92-2.432 2.303-5.503 1.023-8.063Z" />
  </svg>;

<Card title="Run in Postman" href="https://app.getpostman.com/run-collection/26126890-8f5582df-b553-403f-b001-6fe4cbafe4e4" icon={postmanIcon} horizontal={true} />

<DndSection>
  <DndModule numCols={10}>
    <div>
      # Webhooks

      <RelatedApiLink />
    </div>
  </DndModule>

  <DndModule numCols={2} />
</DndSection>

La API de Webhooks permite suscribirse a eventos que ocurren en una cuenta de HubSpot con la integración instalada. En lugar de hacer una llamada de API cuando ocurre un evento en una cuenta conectada, HubSpot puede enviar una solicitud HTTP a un punto de terminación que configures. Puedes configurar eventos suscritos en la configuración de tu aplicación o usar los puntos de terminación que se detallan a continuación. Los webhooks pueden ser más escalables que la interrogación frecuente por cambios, especialmente para aplicaciones con una gran base instalada.

El uso de la API de Webhooks requiere de lo siguiente:

* Debes configurar una aplicación de HubSpot para usar webhooks mediante la suscripción a los eventos sobre los que deseas recibir notificaciones y la especificación de una URL para enviar esas notificaciones. Consulta la [documentación de requisitos previos](https://developers.hubspot.es/docs) para obtener más detalles sobre cómo crear una aplicación.
* Debes implementar un punto de terminación de HubSpot disponible públicamente y seguro (HTTPS) para esa URL que pueda manejar las cargas útiles del webhook especificadas en esta documentación.

Los webhooks se configuran para una [aplicación de HubSpot](/apps/legacy-apps/public-apps/overview), no para cuentas individuales. Cualquier cuenta que instale tu aplicación a través del [flujo de OAuth](https://developers.hubspot.es/docs/reference/api/app-management/oauth/tokens#initiate-an-integration-with-oauth-2.0) se suscribirá a las suscripciones a webhook de la aplicación.

Puedes suscribirte a eventos de objetos de CRM, que incluyen contactos, empresas, negocios, tickets, productos y elementos de línea, así como eventos de conversación.

<Warning>
  ### Nota:

  * También puedes [gestionar webhooks en una aplicación privada](/apps/legacy-apps/private-apps/create-and-edit-webhook-subscriptions-in-private-apps). En aplicaciones privadas, la configuración del webhook solo se puede editar en la configuración de la aplicación privada y actualmente no se puede editar a través de la API.
  * Nota: para suscribirte a los webhooks de conversaciones, necesitas acceder a la [bandeja de entrada de conversaciones y a las API de mensajes](/api-reference/conversations-conversations-inbox-&-messages-v3/guide), que se encuentran actualmente <u>en versión beta</u>.
</Warning>

## Alcances

Para usar webhooks para suscribirte a eventos de CRM, tu aplicación deberá estar configurada para requerir el alcance asociado que corresponde al tipo de objeto de CRM al que quieres suscribirte. Por ejemplo, si deseas suscribirte a eventos de contacto, debersá solicitar el alcance `crm.objects.contacts.read`.

* Si vas a crear suscripciones en la interfaz de usuario de configuración de tu aplicación pública, se te pedirá que agregues el ámbito requerido en el panel *Crear nuevas suscripciones a webhook* antes de que termines de crear tu suscripción.
* Si vas a crear una suscripción realizando una solicitud `POST` al punto de terminación`/webhooks/v3/{appId}/subscriptions`, la respuesta incluirá un error que proporcionará el nombre del ámbito que tendrás que configurar en la interfaz de usuario de configuración de tu aplicación pública.
* Si tu aplicación ya está usando webhooks, no podrás eliminar ningún ámbito requerido por las suscripciones de webhook activas sin primero pausar y eliminar las suscripciones.
* Puedes revisar los alcances requeridos para cada tipo de suscripción de webhook en la [siguiente tabla.](#webhook-subscriptions)

Consulta la documentación de OAuth para [obtener más detalles sobre los alcances](https://developers.hubspot.es/docs/reference/api/app-management/oauth/tokens#initiate-an-integration-with-oauth-2.0#scopes) y la [configuración de la URL de autorización](https://developers.hubspot.es/docs/reference/api/app-management/oauth/tokens#initiate-an-integration-with-oauth-2.0) para tu aplicación.

## Configuración de webhook

Antes de configurar tus suscripciones de webhook, debes especificar una URL a la que se enviarán esas notificaciones. Sigue las instrucciones de las secciones a continuación para obtener información sobre cómo configurar completamente las suscripciones para tu aplicación.

<Warning>
  ### Nota:

  * La configuración de Webhook puede ser almacenada en cache hasta por cinco minutos. Cuando se realizan cambios en la URL del webhook, en los límites de concurrencia o en la configuración de suscripción, puede tardar hasta cinco minutos para ver tus cambios entren en vigencia.
  * HubSpot establece un límite de concurrencia de 10 solicitudes al enviar datos de eventos de suscripción asociados con una cuenta que instaló tu aplicación. Este límite de concurrencia es el número máximo de solicitudes en curso que HubSpot intentará a la vez. Cada solicitud puede contener hasta 100 eventos.
</Warning>

### Administrar la configuración de tu cuenta de desarrollador

Puedes administrar tu URL y el límite de supresión a través de la página de configuración de tu aplicación en tu cuenta de desarrollador

* En tu cuenta de desarrollador, navega al panel de tu **aplicación**.
* Haz clic en el **nombre** de la aplicación para la que deseas configurar los webhooks.

<Frame>
  <img src="https://developers.hubspot.com/hs-fs/hubfs/app_id_list.png?width=600&name=app_id_list.png" alt="app_id_list" />
</Frame>

* En el menú de la barra lateral izquierda, ve a **Webhooks**.
* En el campo *URL de destino*, escribe la **URL** a la que HubSpot realizará una solicitud POST cuando se desencadenen eventos.
* Utiliza la configuración de *Supresión de eventos* para ajustar el número máximo de eventos que HubSpot intentará enviar.

<Frame>
  <img src="https://developers.hubspot.com/hs-fs/hubfs/webhook_settings.png?width=600&name=webhook_settings.png" alt="webhook_settings" />
</Frame>

* Haz clic en **Guardar**.

### Administrar la configuración a través de API

Puedes usar los siguientes puntos de terminación y tu [clave de API de desarrollador](https://developers.hubspot.es/docs) para configurar de forma programática la configuración de webhook para una aplicación.

Para ver cualquier configuración de webhook configurada actualmente para una aplicación, realiza una solicitud `GET` a `webhooks/v3/{appId}/settings`.

Deberás incluir el [ID de la aplicación](https://developers.hubspot.es/docs) en la solicitud, que puedes encontrar debajo del nombre de la aplicación en tu panel de control de *Aplicaciones* o en la pestaña *Autenticación* en la configuración de tu aplicación.

El objeto de configuración contiene los siguientes campos:

| Campo                   | Description                                                                                       |
| ----------------------- | ------------------------------------------------------------------------------------------------- |
| `webhookUrl`            | La URL a la que HubSpot enviará notificaciones de webhook. Esta URL se debe notificar por HTTPS.  |
| `maxConcurrentRequests` | El límite de concurrencia para la URL del webhook. Este valor debe ser un número mayor que cinco. |

Para hacer ediciones a esta configuración, haz una solicitud `PUT` a `webhooks/v3/{appId}/settings` e incluye los siguientes campos en el cuerpo de la solicitud:

| Campo                   | Description                                                                                                                                       |
| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| `targetUrl`             | La URL disponible públicamente para que HubSpot llame donde se entregarán las cargas útiles de eventos.                                           |
| `throttling`            | Configurar los detalles de la supresión de webhooks en este objeto. El objeto de supresión incluye los campos `period` y `maxConcurrentRequests`. |
| `period`                | Escala de tiempo para esta configuración. Puede ser `SECONDLY` (por segundo) o `ROLLING_MINUTE` (por minuto).                                     |
| `maxConcurrentRequests` | El número máximo de solicitudes HTTP que HubSpot intentará hacer a tu aplicación en un plazo determinado por `period`.                            |

Por ejemplo, el cuerpo de tu solicitud puede tener un aspecto similar al siguiente:

```json theme={null}
// PUT request to https://api.hubapi.com/webhooks/v3/{appId}/settings

{
  "throttling": {
    "period": "SECONDLY",
    "maxConcurrentRequests": 10
  },
  "targetUrl": "https://www.example.com/hubspot/target"
}
```

## Suscripciones a webhooks

Una vez que hayas establecido las configuraciones de tu URL de webhook y del límite de supresión de eventos, deberás crear una o más suscripciones. Las suscripciones a webhooks le indican a HubSpot los eventos que te gustaría recibir a una aplicación en particular.

Las suscripciones se aplican a todos los clientes que han instalado tu integración. Esto significa que solo debes especificar las suscripciones que necesitas una vez. Una vez que hayas activado una suscripción para una aplicación, comenzarás automáticamente a recibir webhooks para todos los clientes que hayan instalado tu aplicación y tu integración comenzará a recibir desencadenantes de webhook desde cualquier cliente nuevo.

Para todas las suscripciones de webhook `associationChange` , el webhook activará dos eventos para ambos lados de la asociación.

* Al asociar dos contactos, una suscripción a `contact.associationChange` activará dos eventos, que representan el `contacto 1 al contacto 2` y el `contacto 2 al contacto 1`.
* Al asociar una empresa, si tienes dos suscripciones de webhook `contact.associationChange` y `company.associationChange`, recibirás dos eventos. Estos representarán `el contacto 1 a la empresa 1` y `la empresa 1 al contacto 1`.

Los siguientes tipos de suscripción son compatibles y se pueden usar como valor para el campo `eventType` al crear suscripciones a través de API:

| Tipo de suscripción           | Alcance requerido                                                                                                                                                                                          | Descripción                                                                                                                                                                                         |
| ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `contact.creation`            | `crm.objects.contacts.read`                                                                                                                                                                                | Recibir una notificación si se crea algún contacto en la cuenta de un cliente.                                                                                                                      |
| `contact.deletion`            | Recibe una notificación si se elimina algún contacto en la cuenta de un cliente.                                                                                                                           |                                                                                                                                                                                                     |
| `contact.merge`               | Recibe una notificación si se combinó un contacto con otro.                                                                                                                                                |                                                                                                                                                                                                     |
| `contact.associationChange`   | Recibe una notificación si un contacto tiene una asociación agregada o eliminada entre él y otro objeto de webhook compatible (contacto, empresa, negocio, ticket, elemento de línea o producto).          |                                                                                                                                                                                                     |
| `contact.restore`             | Recibe una notificación si se restaura un contacto después de la eliminación.                                                                                                                              |                                                                                                                                                                                                     |
| `contact.privacyDeletion`     | Recibe una notificación si se elimina un contacto por [motivos de cumplimiento de la privacidad](https://developers.hubspot.es/docs/guides/api/app-management/webhooks/overview).                          |                                                                                                                                                                                                     |
| `contact.propertyChange`      | Recibe una notificación si se cambia una propiedad específica para cualquier contacto en una cuenta.                                                                                                       |                                                                                                                                                                                                     |
| `company.creation`            | `crm.objects.companies.read`                                                                                                                                                                               | Recibe una notificación si se crea alguna empresa en la cuenta de un cliente.                                                                                                                       |
| `company.deletion`            | Recibe una notificación si se elimina alguna empresa en la cuenta de un cliente.                                                                                                                           |                                                                                                                                                                                                     |
| `company.propertyChange`      | Recibe una notificación si se cambia una propiedad específica para cualquier empresa en la cuenta de un cliente.                                                                                           |                                                                                                                                                                                                     |
| `company.associationChange`   |                                                                                                                                                                                                            | Recibe una notificación si una empresa tiene una asociación agregada o eliminada entre ella y otro objeto de webhook compatible (contacto, empresa, negocio, ticket, elemento de línea o producto). |
| `company.restore`             |                                                                                                                                                                                                            | Recibe una notificación si una empresa se restaura después de la eliminación.                                                                                                                       |
| `company.merge`               |                                                                                                                                                                                                            | Recibir una notificación si una empresa se fusionó con otra.                                                                                                                                        |
| `deal.creation`               | `crm.objects.deals.read`                                                                                                                                                                                   | Recibe una notificación si se crea un negocio en la cuenta de un cliente.                                                                                                                           |
| `deal.deletion`               | Recibe una notificación si se elimina algún negocio en la cuenta de un cliente.                                                                                                                            |                                                                                                                                                                                                     |
| `deal.associationChange`      | Recibir una notificación si un negocio tiene una asociación agregada o eliminada entre él y otro objeto de webhook compatible (contacto, empresa, negocio, ticket, elemento de línea o producto).          |                                                                                                                                                                                                     |
| `deal.restore`                | Recibe una notificación si se restaura un negocio después de la eliminación.                                                                                                                               |                                                                                                                                                                                                     |
| `deal.merge`                  | Recibe una notificación si un negocio se fusiona con otro.                                                                                                                                                 |                                                                                                                                                                                                     |
| `deal.propertyChange`         | Recibe una notificación si se cambia una propiedad específica para cualquier negocio en la cuenta de un cliente.                                                                                           |                                                                                                                                                                                                     |
| `ticket.creation`             | `tickets`                                                                                                                                                                                                  | Recibe una notificación si se crea un ticket en la cuenta de un cliente.                                                                                                                            |
| `ticket.deletion`             | Recibe una notificación si se elimina algún ticket en la cuenta de un cliente.                                                                                                                             |                                                                                                                                                                                                     |
| `ticket.propertyChange`       | Recibir una notificación si se cambia una propiedad específica para cualquier ticket en la cuenta de un cliente.                                                                                           |                                                                                                                                                                                                     |
| `ticket.associationChange`    |                                                                                                                                                                                                            | Recibe una notificación si un ticket tiene una asociación agregada o eliminada entre él y otro objeto de webhook compatible (contacto, empresa, negocio, ticket, elemento de línea o producto).     |
| `ticket.restore`              |                                                                                                                                                                                                            | Recibe una notificación si se restaura un ticket después de su eliminación.                                                                                                                         |
| `ticket.merge`                |                                                                                                                                                                                                            | Recibe una notificación si un ticket se combinó con otro.                                                                                                                                           |
| `product.creation`            | `e-commerce`                                                                                                                                                                                               | Recibe una notificación si se crea algún producto en la cuenta de un cliente.                                                                                                                       |
| `product.deletion`            | Recibe una notificación si se elimina algún producto en la cuenta de un cliente.                                                                                                                           |                                                                                                                                                                                                     |
| `product.restore`             | Recibe una notificación si un producto se restaura después de su eliminación.                                                                                                                              |                                                                                                                                                                                                     |
| `product.merge`               | Recibe una notificación si un producto se combinó con otro.                                                                                                                                                |                                                                                                                                                                                                     |
| `product.propertyChange`      | Recibe una notificación si se cambia un producto específico para cualquier producto en la cuenta de un cliente.                                                                                            |                                                                                                                                                                                                     |
| `line_item.creation`          | Recibe una notificación si se crea algún elemento de línea en la cuenta de un cliente.                                                                                                                     |                                                                                                                                                                                                     |
| `line_item.deletion`          | Recibe una notificación si se elimina algún elemento de línea en la cuenta de un cliente.                                                                                                                  |                                                                                                                                                                                                     |
| `line_item.associationChange` | Recibe una notificación si un elemento de línea tiene una asociación agregada o eliminada entre él y otro objeto de webhook compatible (contacto, empresa, negocio, ticket, elemento de línea o producto). |                                                                                                                                                                                                     |
| `line_item.restore`           | Recibe una notificación si un elemento de línea se restaura después de la eliminación.                                                                                                                     |                                                                                                                                                                                                     |
| `line_item.merge`             | Recibe una notificación si un elemento de línea se combinó con otro.                                                                                                                                       |                                                                                                                                                                                                     |
| `line_item.propertyChange`    | Recibe una notificación si se cambia una propiedad específica para cualquier elemento de línea en la cuenta de un cliente.                                                                                 |                                                                                                                                                                                                     |

Los siguientes tipos de suscripción de conversaciones están disponibles para que te suscribas si estás usando la bandeja de entrada de [conversaciones y la API de mensajes](/api-reference/conversations-conversations-inbox-&-messages-v3/guide), que actualmente está <u>en versión beta</u>:

| Tipo de suscripción            | Alcance                                                                                 | Descripción                                                   |
| ------------------------------ | --------------------------------------------------------------------------------------- | ------------------------------------------------------------- |
| `conversation.creation`        | `conversations.read`                                                                    | Recibe notificaciones si se crea un nuevo hilo en una cuenta. |
| `conversation.deletion`        | Recibe una notificación si un hilo se archiva o se elimina temporalmente en una cuenta. |                                                               |
| `conversation.privacyDeletion` | Recibe una notificación si un hilo se elimina permanentemente en una cuenta.            |                                                               |
| `conversation.propertyChange`  | Recibe una notificación si se ha cambiado una propiedad en un hilo.                     |                                                               |
| `conversation.newMessage`      | Recibe una notificación si se ha recibido un nuevo mensaje en un hilo.                  |                                                               |

Para las suscripciones de cambio de propiedad, deberás especificar la propiedad de la que deseas recibir notificaciones. Puedes especificar varias suscripciones de cambios de propiedad. Si la cuenta de un cliente no tiene la propiedad que especificas en una suscripción, no recibirás ningún webhooks de ese cliente para esa propiedad.

Algunas propiedades no están disponibles para suscripciones de cambio de propiedad de CRM. Estas propiedades son:

* `num_unique_conversion_events`
* `hs_lastmodifieddate`

Si estás usando los mensajes de [conversación y la API de la bandeja de entrada](/api-reference/conversations-conversations-inbox-&-messages-v3/guide), que se encuentra actualmente <u>en versión beta</u>, las siguientes propiedades están disponibles:

* `assignedTo`**:** el hilo de conversación se ha reasignado o no asignado. Si se reasignó el hilo, el valor `propertyValue` será un ID de actor en la carga útil de webhooks; si no se asigna, estará vacío.
* `status`**:** el estado del hilo de conversación ha cambiado. En la carga útil de webhooks, el valor `propertyValue` estará `OPEN` o `CLOSED`.
* `isArchived`**:** se ha restaurado el hilo de conversación. El valor `propertyValue` en la carga útil de webhooks siempre será `FALSE`.

### Crear suscripciones en tu cuenta de desarrollador

Puedes crear suscripciones de webhook en tu cuenta de desarrollador de HubSpot.

* En tu cuenta de desarrollador de HubSpot, navega al panel de **Aplicaciones**.
* Haz clic en el **nombre** de una aplicación.
* En el menú de la barra lateral izquierda, ve a **Webhooks**.
* Haz clic en **Crear suscripción**.
* En el panel derecho, haz clic en el menú desplegable **¿Qué tipos de objetos?** y selecciona los **objetos** para los que deseas crear una suscripción.
* Haz clic en el menú desplegable **¿Escuchar cuáles eventos?** y selecciona los **tipos de eventos**.

<Frame>
  <img src="https://www.hubspot.com/hubfs/Knowledge_Base_2021/Developer/create-contact-create-subscription.png" alt="create-contact-create-subscription" />
</Frame>

* Si estás creando una suscripción para eventos de cambio de propiedad, haz clic en el menú desplegable **¿Qué propiedades?** y selecciona las **propiedades** que quieres escuchar.

<Frame>
  <img src="https://developers.hubspot.com/hs-fs/hubfs/webhook_select_properties.png?width=450&name=webhook_select_properties.png" alt="" />
</Frame>

* Haz clic en **Suscribirse**.

La suscripción aparecerá en la configuración de tus webhooks. Las nuevas suscripciones se crean en un estado en pausa, por lo que deberás activar la suscripción para que se envíen webhooks:

* En la sección *Suscripciones de eventos*, coloca el cursor sobre el tipo de objeto y haz clic en **Ver suscripciones**.
* Selecciona la **casilla de comprobación** junto al evento y, a continuación, en el encabezado de la tabla, haz clic en **Activar**.

<Frame>
  <img src="https://www.hubspot.com/hubfs/Knowledge_Base_2021/Developer/activate-subscription.png" alt="activate-subscription" />
</Frame>

### Crear suscripciones a través de la API

Puedes crear suscripciones mediante programación usando los siguientes puntos de terminación. Deberás usar tu clave de API de desarrollador al realizar solicitudes a estos puntos de terminación.

Un objeto de suscripción puede incluir los siguientes campos:

| Campo          | Description                                                                                                                                                                                                        |
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `id`           | Un número que representa el ID único de una suscripción.                                                                                                                                                           |
| `createdAt`    | El tiempo en milisegundos en que se creó esta suscripción.                                                                                                                                                         |
| `createdBy`    | El ID de usuario asociado con el usuario que creó la suscripción.                                                                                                                                                  |
| `active`       | Esto indica si la suscripción está activada o no y si activa notificaciones de forma activa. El valor puede ser `true` o `false`.                                                                                  |
| `eventType`    | El tipo de suscripción. La [tabla](https://developers.hubspot.es/docs/guides/api/app-management/webhooks/overview#webhook-subscriptions) al comienzo de esta sección incluye los tipos de suscripción disponibles. |
| `propertyName` | El nombre de la propiedad en la que la suscripción escuchará los cambios. Esto solo es necesario para los tipos de suscripción de cambio de propiedad.                                                             |

### Obtener suscripciones

Para recuperar la lista de suscripciones, realiza una solicitud `GET` a `webhooks/v3/{appId}/subscriptions`.

La respuesta será una matriz de objetos que representan tus suscripciones. Cada objeto incluirá información sobre la suscripción, como el ID, la fecha de creación, el tipo y si está habilitado actualmente. Así es como se vería un ejemplo de respuesta:

```json theme={null}
// Example GET request to https://api.hubapi.com/webhooks/v3/{appId}/subscriptions

[
  {
    "id": 25,
    "createdAt": 1461704185000,
    "createdBy": 529872,
    "eventType": "contact.propertyChange",
    "propertyName": "lifecyclestage",
    "active": false
  },
  {
    "id": 59,
    "createdAt": 1462388498000,
    "createdBy": 529872,
    "eventType": "company.creation",
    "active": false
  },
  {
    "id": 108,
    "createdAt": 1463423132000,
    "createdBy": 529872,
    "eventType": "deal.creation",
    "active": true
  }
]
```

### Crear una nueva suscripción

Para crear una nueva suscripción, haz una solicitud `POST` a `webhooks/v3/{appId}/subscriptions`.

En el cuerpo de la solicitud, puedes incluir los siguientes campos:

| Campo          | Description                                                                                                                                            |
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `eventType`    | El tipo de suscripción.                                                                                                                                |
| `propertyName` | El nombre de la propiedad en la que la suscripción escuchará los cambios. Esto solo es necesario para los tipos de suscripción de cambio de propiedad. |
| `active`       | Esto indica si la suscripción está activada o no y si activa notificaciones de forma activa. El valor puede ser `true` o `false`.                      |

No necesitas incluir `id`, `createdAt` o `createdBy`, ya que esos campos se establecen automáticamente.

Por ejemplo, el cuerpo de tu solicitud puede tener un aspecto similar al siguiente:

```json theme={null}
// Example POST request to https://api.hubapi.com/webhooks/v3/{appId}/subscriptions

{
  "eventType": "company.propertyChange",
  "propertyName": "companyname",
  "active": false
}
```

El `eventType` debe ser un tipo de suscripción válido según se define en la sección anterior y el `propertyName` debe ser un nombre de propiedad válido. Si un cliente no tiene una propiedad definida que coincida con este valor, esta suscripción no generará notificaciones.

### Actualizar una suscripción

Para activar o pausar una suscripción, haz una solicitud `PUT` a `webhooks/v3/{appId}/subscriptions/{subscriptionId}`.

En el cuerpo de la solicitud, incluye lo siguiente:

| Campo    | Description                                                                                                                       |
| -------- | --------------------------------------------------------------------------------------------------------------------------------- |
| `active` | Esto indica si la suscripción está activada o no y si activa notificaciones de forma activa. El valor puede ser `true` o `false`. |

### Eliminar una suscripción

Para eliminar una suscripción, haz una solicitud `DELETE` a `webhooks/v3/{appId}/subscriptions/{subscriptionId}`.

## Cargas útiles de webhook

El punto de terminación de la URL de destino que especifiques en la configuración de webhooks de tu aplicación recibirá solicitudes `POST` que contienen datos con formato JSON de HubSpot.

Para asegurarte de que las solicitudes que recibes en tu punto de terminación de webhook provengan de HubSpot, HubSpot rellena un encabezado de `X-HubSpot-Signature` con un hash SHA-256 creado con el secreto del cliente de tu aplicación combinado con los detalles de la solicitud. Más información sobre cómo [validar firmas de solicitudes](/apps/legacy-apps/authentication/validating-requests).

Utiliza las tablas a continuación para ver detalles sobre los campos que pueden estar contenidos en la carga útil.

| Campo            | Description                                                                                                                                                                                                                                                                         |
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `objectId`       | El ID del objeto que fue creado, cambiado o eliminado. Para contactos, este es el ID de contacto; para empresas, el ID de empresa; para negocios, el ID de negocio; y para conversaciones el [ID de hilo](/api-reference/conversations-conversations-inbox-&-messages-v3/guide).    |
| `propertyName`   | Esto solo se envía para las suscripciones de cambio de propiedad y es el nombre de la propiedad que se cambió.                                                                                                                                                                      |
| `propertyValue`  | Esto solo se envía para suscripciones de cambio de propiedad y representa el nuevo valor establecido para la propiedad que desencadenó la notificación.                                                                                                                             |
| `changeSource`   | La fuente del cambio. Puede ser cualquiera de las fuentes de cambios que aparecen en los historiales de las propiedades de contactos.                                                                                                                                               |
| `eventId`        | El ID único del evento que desencadenó esta notificación. No se garantiza que este valor sea único.                                                                                                                                                                                 |
| `subscriptionId` | El ID de la suscripción que desencadenó una notificación sobre el evento.                                                                                                                                                                                                           |
| `portalId`       | El [ID de cuenta de HubSpot](https://knowledge.hubspot.com/account-management/manage-multiple-hubspot-accounts#check-your-current-account) del cliente donde ocurrió el evento.                                                                                                     |
| `appId`          | El ID de tu aplicación. Esto se usa en caso de que tengas varias aplicaciones que apunten a la misma URL de webhook.                                                                                                                                                                |
| `occurredAt`     | Cuándo ocurrió este evento como una marca de tiempo de milisegundos.                                                                                                                                                                                                                |
| `eventType`      | El tipo de evento para el que es esta notificación. Revisa la lista de tipos de suscripción admitidos en la sección de suscripción de webhooks anterior.                                                                                                                            |
| `attemptNumber`  | A partir de 0, el número de intentos es para notificar a su servicio de este evento. Si se vence el tiempo de espera de tu servicio o emite un mensaje de error, tal como se describe en la sección *Reintentos* a continuación, HubSpot intentará enviar la notificación de nuevo. |
| `messageId`      | Esto solo se envía cuando un webhook está escuchando nuevos mensajes en un hilo. Es el ID del nuevo mensaje.                                                                                                                                                                        |
| `messageType`    | Esto solo se envía cuando un webhook está escuchando nuevos mensajes en un hilo. Representa el tipo de mensaje que estás enviando. Este valor puede ser `MESSAGE` o `COMMENT`.                                                                                                      |

| Campo                     | Description                                                                                                                                                                                     |
| ------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `primaryObjectId`         | El ID del ganador de la combinación, que es el registro que permanece después de la combinación. En la interfaz de usuario de fusión de HubSpot, este es el registro de la derecha.             |
| `mergedObjectIds`         | Una matriz de identificadores que representan los registros que se fusionan en el ganador de la fusión. En la interfaz de usuario de fusión de HubSpot, este es el registro a la izquierda.     |
| `newObjectId`             | El ID del registro que se crea como resultado de la combinación. Esto es independiente de `primaryObjectId` porque en algunos casos se crea un nuevo registro como resultado de la combinación. |
| `numberOfPropertiesMoved` | Un entero que representa cuántas propiedades se transfirieron durante la combinación.                                                                                                           |

| Campo                  | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `associationType`      | El tipo de asociación, que será una de las siguientes:<ul><li>`CONTACT_TO_COMPANY`</li><li>`CONTACT_TO_DEAL`</li><li>`CONTACT_TO_TICKET`</li><li>`CONTACT_TO_CONTACT`<br /><br /></li><li>`COMPANY_TO_CONTACT`</li><li>`COMPANY_TO_DEAL`</li><li>`COMPANY_TO_TICKET`</li><li>`COMPANY_TO_COMPANY`<br /><br /></li><li>`DEAL_TO_CONTACT`</li><li>`DEAL_TO_COMPANY`</li><li>`DEAL_TO_LINE_ITEM`</li><li>`DEAL_TO_TICKET`</li><li>`DEAL_TO_DEAL`<br /><br /></li><li>`TICKET_TO_CONTACT`</li><li>`TICKET_TO_COMPANY`</li><li>`TICKET_TO_DEAL`</li><li>`TICKET_TO_TICKET`<br /><br /></li><li>`LINE_ITEM_TO_DEAL`</li></ul> |
| `fromObjectId`         | El ID del registro desde el que se realizó el cambio de asociación.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| `toObjectId`           | El ID del registro secundario en el evento de asociación.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| `associationRemoved`   | Un booleano que representa lo siguiente:<ul><li>`true`: el webhook se desencadenó al eliminar una asociación.</li><li>`false`: el webhook se desencadenó al crear una asociación.</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                             |
| `isPrimaryAssociation` | Un booleano que representa lo siguiente:<ul><li>`true`: el registro secundario es la [asociación primaria](https://knowledge.hubspot.com/records/associate-records#primary-company-information) del registro del que se realizó el cambio de asociación.</li><li>`false`: el registro <u>no</u> es la asociación primaria del registro del que se hizo el cambio de asociación. </li></ul>**Nota:** la creación de una instancia de asociación primaria entre dos registros de objetos hará que también se cree la asociación no primaria correspondiente. Esto puede generar dos mensajes de webhook.                  |

```json theme={null}
//
[
  {
    "objectId": 1246965,
    "propertyName": "lifecyclestage",
    "propertyValue": "subscriber",
    "changeSource": "ACADEMY",
    "eventId": 3816279340,
    "subscriptionId": 25,
    "portalId": 33,
    "appId": 1160452,
    "occurredAt": 1462216307945,
    "eventType": "contact.propertyChange",
    "attemptNumber": 0
  },
  {
    "objectId": 1246978,
    "changeSource": "IMPORT",
    "eventId": 3816279480,
    "subscriptionId": 22,
    "portalId": 33,
    "appId": 1160452,
    "occurredAt": 1462216307945,
    "eventType": "contact.creation",
    "attemptNumber": 0
  }
]
```

Como se muestra anteriormente, debes esperar recibir una matriz de objetos en una sola solicitud. El tamaño del lote puede variar, pero tendrá menos de 100 notificaciones. HubSpot enviará varias notificaciones solamente cuando hayan ocurrido muchos eventos dentro de un período corto de tiempo. Por ejemplo, si te has suscrito a nuevos contactos y un cliente importa una gran cantidad de contactos, HubSpot te enviará las notificaciones de estos contactos importados en lotes y no una por solicitud.

HubSpot no garantiza que recibas estas notificaciones en el orden en que ocurrieron. Usa la propiedad `occurredAt` para cada notificación para determinar cuándo ocurrió el evento que desencadenó la notificación.

Además, HubSpot no garantiza que solo recibas una notificación para un evento. Aunque esto debería ser poco común, es posible que HubSpot te envíe la misma notificación varias veces.

## Eliminaciones de contactos conforme con la privacidad

Los usuarios de HubSpot pueden eliminar permanentemente un registro de contacto para cumplir con las leyes de privacidad. Más información sobre cómo realizar una eliminación conforme al [RGPD](https://knowledge.hubspot.com/privacy-and-consent/how-do-i-perform-a-gdpr-delete-in-hubspot).

Puedes suscribirte al tipo de suscripción `contact.privacyDeletion` para recibir notificaciones de webhook cuando un usuario realice una eliminación de contactos conforme con la privacidad.

Las notificaciones de eliminación conforme con la privacidad tienen un comportamiento especial

* Un evento de eliminación conforme con la privacidad también desencadenará el evento de eliminación de contacto, por lo que recibirás dos notificaciones si estás suscrito a ambos eventos.
* Estas notificaciones no se enviarán necesariamente en ningún orden en particular o en el mismo lote de mensajes. Deberás usar el objectId para que coincida con los mensajes separados.

## Seguridad

Para asegurarte de que las solicitudes que recibes en tu punto de terminación de webhook provienen de HubSpot, HubSpot llena un encabezado de `X-HubSpot-Signature` con un hash SHA-256 de la concatenación del secreto de aplicación para tu aplicación y el cuerpo de la solicitud que estamos enviando.

Para verificar esta firma, concatena el secreto de la aplicación de tu aplicación y el cuerpo de solicitud no interpretado de la solicitud que estás manejando y obtén un hash SHA-256 del resultado. Compara el hash resultante con el valor de `X-HubSpot-Signature`. Si estos valores coinciden, se confirma que esta solicitud es proveniente de HubSpot. O bien, la solicitud provino de otra persona que conoce el secreto de tu aplicación. Es importante mantener este valor en secreto.

Si estos valores no coinciden, es posible que esta solicitud haya sido manipulada en tránsito o que alguien esté falsificando notificaciones de webhook a tu punto de terminación.

Más información sobre la [validación de solicitudes de firmas](/apps/legacy-apps/authentication/validating-requests).

## Reintentos

Si tu servicio tiene problemas para manejar las notificaciones en cualquier momento, HubSpot intentará volver a enviar notificaciones fallidas hasta 10 Veces.

HubSpot lo intentará nuevamente en los casos siguientes:

* **Falló la conexión:** HubSpot no puede abrir una conexión http a la URL de webhook proporcionada
* **Tiempo de espera:** tu servicio demora más de 5 segundos en enviar una respuesta a un lote de notificaciones
* \*\*Códigos de error:\*\*tu servicio responde con cualquier código de estado HTTP (4xx o 5xx).

Las notificaciones se volverán a intentar hasta 10 Veces. Estos reintentos se distribuirán durante las próximas 24 horas, con distintos retrasos entre las solicitudes. Las notificaciones individuales serán enviadas de manera aleatoria, para evitar que un gran número de errores concurrentes se vuelva a intentar en el mismo momento.

## Límites

Las solicitudes de `POST` que HubSpot envía a tu servicio a través de tus suscripciones de webhook <u>no</u> contarán para los [límites de tasa de API de tu aplicación](/apps/legacy-apps/api-usage/usage-details).

Puedes crear un máximo de 1000 suscripciones por aplicación. Si intentas crear más, recibirá una solicitud incorrecta 400 con el siguiente cuerpo:

```json theme={null}
//
{
  "status": "error",
  "message": "Couldn't create another subscription. You've reached the maximum number allowed per application (1000).",
  "correlationId": "2c9beb86-387b-4ff6-96f7-dbb486c00a95",
  "requestId": "919c4c84f66769e53b2c5713d192fca7"
}
```
