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

# API Webhooks 

> Présentation de l'API Webhooks, qui vous permet de vous abonner à des événements qui se produisent dans un compte HubSpot sur lequel est installée votre intégration.

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>

L'API Webhooks vous permet de vous abonner à des événements qui se produisent dans un compte HubSpot sur lequel est installée votre intégration. Plutôt que de passer un appel d'API lorsqu'un événement se produit dans un compte connecté, HubSpot peut envoyer une demande HTTP à un point de terminaison que vous configurez. Vous pouvez configurer des événements abonnés dans les paramètres de votre application ou à l'aide des points de terminaison ci-dessous. Les webhooks peuvent être plus évolutifs que des sondages réguliers concernant des modifications, notamment pour les applications massivement installées.

L'utilisation de l'API Webhooks nécessite les éléments suivants :

* Vous devez configurer une application HubSpot pour utiliser les webhooks en vous abonnant aux événements pour lesquels vous souhaitez recevoir des notifications et en précisant une URL pour l'envoi de celles-ci. Consultez la [documentation relative aux prérequis](https://developers.hubspot.es/docs) pour en savoir plus sur la création d'une application.
* Vous devez déployer un point de terminaison publiquement accessible et sécurisé (HTTPS) pour cette URL, capable de gérer les charges utiles pertinentes du webhook spécifiées dans cette documentation.

Les webhooks sont configurés pour une [application HubSpot](/apps/legacy-apps/public-apps/overview), et non pour des comptes individuels. Tous les comptes qui installent votre application (par le biais du [flux OAuth](https://developers.hubspot.fr/docs/reference/api/app-management/oauth/tokens#initiate-an-integration-with-oauth-2.0)) seront abonnés à ses abonnements de webhook.

Vous pouvez vous abonner à des événements d'objet CRM, qui comprennent des contacts, des entreprises, des transactions, des tickets, des produits et des lignes de produit ainsi qu'à des événements de conversations.

<Warning>
  ### Remarque:

  * Vous pouvez également [gérer les webhooks dans une application privée](/apps/legacy-apps/private-apps/create-and-edit-webhook-subscriptions-in-private-apps). Dans les applications privées, les paramètres de webhook ne peuvent être modifiés que dans les paramètres de l'application privée et ne peuvent pas être modifiés via l'API.
  * Pour vous abonner aux webhooks de conversations, vous devez accéder à la [boîte de réception des conversations et aux API de messages](/api-reference/conversations-conversations-inbox-&-messages-v3/guide), qui sont actuellement <u>en version bêta</u>.
</Warning>

## Périmètres d'accès

Pour utiliser les webhooks afin de vous abonner à des événements CRM, votre application devra être configurée pour exiger le domaine associé qui correspond au type d'objet CRM auquel vous voulez vous abonner. Par exemple, si vous souhaitez vous abonner à des événements de contact, vous devez demander le domaine `crm.objects.contacts.read`.

* Si vous créez des abonnements dans les paramètres de l'interface utilisateur de votre application publique, vous serez invité à ajouter le domaine requis dans le panneau *Créer de nouveaux abonnements webhook* avant de terminer la création de votre abonnement.
* Si vous créez un abonnement en faisant une demande `POST` au point de terminaison `/webhooks/v3/{appId}/subscriptions`, la réponse inclura une erreur qui fournira le nom du domaine que vous devrez configurer dans les paramètres de l'interface utilisateur de votre application publique.
* Si votre application utilise déjà des webhooks, vous ne pourrez pas supprimer les domaines requis par les abonnements webhook actifs sans d'abord mettre en pause et supprimer les abonnements.
* Vous pouvez consulter les domaines requis pour chaque type d'abonnement webhook dans le [tableau ci-dessous.](#webhook-subscriptions)

Consultez la documentation OAuth pour [plus de détails sur les domaines](https://developers.hubspot.fr/docs/reference/api/app-management/oauth/tokens#initiate-an-integration-with-oauth-2.0#scopes) et la [configuration de l'URL d'autorisation](https://developers.hubspot.fr/docs/reference/api/app-management/oauth/tokens#initiate-an-integration-with-oauth-2.0) pour votre application.

## Paramètres de webhook

Avant de configurer des abonnements de webhook, vous devez spécifier une URL à laquelle envoyer ces notifications. Suivez les instructions dans les sections ci-dessous pour savoir comment configurer entièrement les abonnements pour votre application.

<Warning>
  ### Remarque:

  * Les paramètres de webhook peuvent être mis en cache jusqu'à cinq minutes. L'application des modifications de l'URL du webhook, des limites de simultanéité ou des paramètres d'abonnement peut prendre jusqu'à cinq minutes.
  * HubSpot définit une limite de concomitance de 10 demandes lors de l'envoi de données d'événement d'abonnement associées à un compte qui a installé votre application. Cette limite de concomitance est le nombre maximum de demandes en cours que HubSpot tentera à la fois. Chaque demande peut contenir jusqu'à 100 événements.
</Warning>

### Gérer les paramètres de votre compte de développeur

Vous pouvez gérer vos paramètres d'URL et de limitation d'événement via la page de configuration de votre application dans votre compte de développeur :

* Dans votre compte de développeur, accédez à votre tableau de bord **Applications**.
* Cliquez sur le **nom** de l'application pour laquelle vous souhaitez configurer des 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>

* Dans le menu latéral de gauche, accédez à **Webhooks**.
* Dans le champ *URL cible*, saisissez l'**URL** vers laquelle HubSpot effectuera une demande POST pour le déclenchement des événements.
* Utilisez le paramètre *Limitation d'événement* pour ajuster le nombre maximal d'événements que HubSpot essaiera d'envoyer.

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

* Cliquez sur **Enregistrer**.

### Gérer les paramètres via l'API

Vous pouvez utiliser les points de terminaison suivants et votre [clé d'API de développeur](/apps/legacy-apps/authentication/oauth-quickstart-guide) pour configurer de façon programmée les paramètres de webhook pour une application.

Pour afficher tous les paramètres de webhook actuellement configurés pour une application, effectuez une demande `GET` à `webhooks/v3/{appId}/settings`.

Vous devrez inclure l'[ID de l'application](https://developers.hubspot.es/docs) dans la demande, que vous trouverez sous le nom de l'application dans votre tableau de bord *Applications* ou dans l'onglet *OAuth* dans les paramètres de votre application.

Les paramètres contiennent les champs suivants :

| Champ                   | Description                                                                                         |
| ----------------------- | --------------------------------------------------------------------------------------------------- |
| `webhookUrl`            | L'URL à laquelle HubSpot enverra des notifications de webhook. Elle doit être sur un serveur HTTPS. |
| `maxConcurrentRequests` | La limite de concomitance pour l'URL du webhook. Cette valeur doit être un nombre supérieur à cinq. |

Pour apporter des modifications à ces paramètres, effectuez une demande `PUT` à `webhooks/v3/{appId}/settings` et incluez les champs suivants dans le corps de la demande :

| Champ                   | Description                                                                                                                                    |
| ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| `targetUrl`             | L'URL publique pour que HubSpot appelle l'endroit où les charges utiles de l'événement seront livrées.                                         |
| `throttling`            | Configurez les détails de limitation du webhook dans cet objet. L'objet de limitation comprend les champs `period` `et maxConcurrentRequests`. |
| `period`                | Échelle de temps pour ce paramètre. Peut être `SECONDLY` (par seconde) ou `ROLLING_MINUTE` (par minute).                                       |
| `maxConcurrentRequests` | Le nombre maximal de demandes HTTP que HubSpot tentera d'effectuer vers votre application dans une période donnée en fonction de `period`.     |

Par exemple, votre demande peut ressembler à ce qui suit :

```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"
}
```

## Abonnements de webhook

Une fois que vous avez configuré l'URL de votre webhook et les limitations d'événement, vous devez créer un ou plusieurs abonnements. Les abonnements de webhook indiquent à HubSpot les événements que votre application spécifique souhaite recevoir.

Les abonnements s'appliquent à tous les clients qui ont installé votre intégration. Autrement dit, vous devez spécifier les abonnements dont vous avez besoin une seule fois. Une fois que vous avez activé un abonnement pour une application, il commencera automatiquement à obtenir les webhooks pour tous les clients qui ont installé votre application. Votre intégration commencera à recevoir les déclencheurs de webhook de tous les nouveaux clients.

Pour tous les abonnements webhook `associationChange`, le webhook déclenchera deux événements pour les deux parties de l'association.

* Lors de l'association de deux fiches d'informations d'un contact, un abonnement à `contact.associationChange` déclenchera deux événements, représentant le `contact 1 au contact 2` et le `contact 2 au contact 1`.
* Lorsque vous associez une fiche d'informations d'une entreprise, si vous avez deux abonnements webhook `contact.associationChange` et `company.associationChange`, vous recevrez deux événements. Ceux-ci représenteront le `contact 1 à l'entreprise 1` et `l'entreprise 1 au contact 1`.

Les types d'abonnement suivants sont pris en charge et peuvent être utilisés comme valeur pour le champ `eventType` lors de la création d'abonnements via l'API :

| Type d'abonnement             | Domaine requis                                                                                                                                                                                                               | Description                                                                                                                                                                                                            |
| ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `contact.creation`            | `crm.objects.contacts.read`                                                                                                                                                                                                  | Recevez une notification si un contact est créé dans le compte d'un client.                                                                                                                                            |
| `contact.deletion`            | Recevez une notification si un contact est supprimé dans le compte d'un client.                                                                                                                                              |                                                                                                                                                                                                                        |
| `contact.merge`               | Recevez une notification si un contact est fusionné avec un autre contact.                                                                                                                                                   |                                                                                                                                                                                                                        |
| `contact.associationChange`   | Recevez une notification si un contact a une association ajoutée ou supprimée entre lui-même et un autre objet de webhook pris en charge (contact, entreprise, transaction, ticket, ligne ou produit ou produit).            |                                                                                                                                                                                                                        |
| `contact.restore`             | Recevez une notification si un contact est restauré à partir de la suppression.                                                                                                                                              |                                                                                                                                                                                                                        |
| `contact.privacyDeletion`     | Recevez une notification si un contact est supprimé [pour des raisons de confidentialité](https://developers.hubspot.fr/docs/guides/api/app-management/webhooks/overview).                                                   |                                                                                                                                                                                                                        |
| `contact.propertyChange`      | Recevez une notification si une propriété spécifique est modifiée pour un contact dans le compte d'un client.                                                                                                                |                                                                                                                                                                                                                        |
| `company.creation`            | `crm.objects.companies.read`                                                                                                                                                                                                 | Recevez une notification si une entreprise est créée dans le compte d'un client.                                                                                                                                       |
| `company.deletion`            | Recevez une notification si une entreprise est supprimée dans le compte d'un client.                                                                                                                                         |                                                                                                                                                                                                                        |
| `company.propertyChange`      | Recevez une notification si une propriété spécifique est modifiée pour une entreprise dans le compte d'un client.                                                                                                            |                                                                                                                                                                                                                        |
| `company.associationChange`   |                                                                                                                                                                                                                              | Recevez une notification si une entreprise a une association ajoutée ou supprimée entre elle-même et un autre objet de webhook pris en charge (contact, entreprise, transaction, ticket, ligne ou produit ou produit). |
| `company.restore`             |                                                                                                                                                                                                                              | Recevez une notification si une entreprise est restaurée à partir de la suppression.                                                                                                                                   |
| `company.merge`               |                                                                                                                                                                                                                              | Recevez une notification si une entreprise est fusionnée avec une autre.                                                                                                                                               |
| `deal.creation`               | `crm.objects.deals.read`                                                                                                                                                                                                     | Recevez une notification si une transaction est créée dans le compte d'un client.                                                                                                                                      |
| `deal.deletion`               | Recevez une notification si une transaction est supprimée dans le compte d'un client.                                                                                                                                        |                                                                                                                                                                                                                        |
| `deal.associationChange`      | Recevez une notification si une transaction a une association ajoutée ou supprimée entre elle-même et un autre objet de webhook pris en charge (contact, entreprise, transaction, ticket, ligne ou produit ou produit).      |                                                                                                                                                                                                                        |
| `deal.restore`                | Recevez une notification si une transaction est restaurée à partir de la suppression.                                                                                                                                        |                                                                                                                                                                                                                        |
| `deal.merge`                  | Recevez une notification si une transaction est fusionnée avec une autre.                                                                                                                                                    |                                                                                                                                                                                                                        |
| `deal.propertyChange`         | Recevez une notification si une propriété spécifique est modifiée pour une transaction dans le compte d'un client.                                                                                                           |                                                                                                                                                                                                                        |
| `ticket.creation`             | `tickets`                                                                                                                                                                                                                    | Recevez une notification si un ticket est créé dans le compte d'un client.                                                                                                                                             |
| `ticket.deletion`             | Recevez une notification si un ticket est supprimé dans le compte d'un client.                                                                                                                                               |                                                                                                                                                                                                                        |
| `ticket.propertyChange`       | Recevez une notification si une propriété spécifique est modifiée pour un ticket dans le compte d'un client.                                                                                                                 |                                                                                                                                                                                                                        |
| `ticket.associationChange`    |                                                                                                                                                                                                                              | Recevez une notification si un ticket a une association ajoutée ou supprimée entre lui-même et un autre objet de webhook pris en charge (contact, entreprise, transaction, ticket, ligne ou produit ou produit).       |
| `ticket.restore`              |                                                                                                                                                                                                                              | Recevez une notification si un ticket est restauré à partir de la suppression.                                                                                                                                         |
| `ticket.merge`                |                                                                                                                                                                                                                              | Recevez une notification si un ticket est fusionné avec un autre.                                                                                                                                                      |
| `product.creation`            | `e-commerce`                                                                                                                                                                                                                 | Recevez une notification si un produit est créé dans le compte d'un client.                                                                                                                                            |
| `product.deletion`            | Recevez une notification si un produit est supprimé dans le compte d'un client.                                                                                                                                              |                                                                                                                                                                                                                        |
| `product.restore`             | Recevez une notification si un produit est restauré à partir de la suppression.                                                                                                                                              |                                                                                                                                                                                                                        |
| `product.merge`               | Recevez une notification si un produit est fusionné avec un autre.                                                                                                                                                           |                                                                                                                                                                                                                        |
| `product.propertyChange`      | Recevez une notification si un produit spécifique est modifié pour un produit dans le compte d'un client.                                                                                                                    |                                                                                                                                                                                                                        |
| `line_item.creation`          | Recevez une notification si une ligne de produit est créée dans le compte d'un client.                                                                                                                                       |                                                                                                                                                                                                                        |
| `line_item.deletion`          | Recevez une notification si une ligne de produit est supprimée dans le compte d'un client.                                                                                                                                   |                                                                                                                                                                                                                        |
| `line_item.associationChange` | Recevez une notification si une ligne de produit a une association ajoutée ou supprimée entre elle-même et un autre objet de webhook pris en charge (contact, entreprise, transaction, ticket, ligne ou produit ou produit). |                                                                                                                                                                                                                        |
| `line_item.restore`           | Recevez une notification si une ligne de produit est restaurée à partir de la suppression.                                                                                                                                   |                                                                                                                                                                                                                        |
| `line_item.merge`             | Recevez une notification si une ligne de produit est fusionnée avec une autre.                                                                                                                                               |                                                                                                                                                                                                                        |
| `line_item.propertyChange`    | Recevez une notification si une propriété spécifique est modifiée pour une ligne de produit dans le compte d'un client.                                                                                                      |                                                                                                                                                                                                                        |

Les types d'abonnement aux conversations suivants sont disponibles si vous utilisez l'[API de boîte de réception de conversations et de messages](/api-reference/conversations-conversations-inbox-&-messages-v3/guide), qui est actuellement <u>en version bêta</u> :

| Type d'abonnement              | Domaine                                                                                                   | Description                                                                       |
| ------------------------------ | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- |
| `conversation.creation`        | `conversations.read`                                                                                      | Recevez une notification si un nouveau fil de discussion est créé dans un compte. |
| `conversation.deletion`        | Recevez une notification si un fil de discussion est archivé ou supprimé de façon réversible d'un compte. |                                                                                   |
| `conversation.privacyDeletion` | Recevez une notification si un fil de discussion est définitivement supprimé dans un compte.              |                                                                                   |
| `conversation.propertyChange`  | Recevez une notification si la propriété d'un fil est modifiée.                                           |                                                                                   |
| `conversation.newMessage`      | Recevez une notification si un nouveau message sur un fil de discussion est reçu.                         |                                                                                   |

Pour les abonnements de modification de propriétés, vous devez spécifier la propriété pour laquelle vous souhaitez recevoir des notifications. Vous pouvez spécifier plusieurs abonnements de modification de propriétés. Si le compte d'un client ne dispose pas de la propriété que vous spécifiez dans un abonnement, vous ne recevrez aucun webhook de la part ce client pour cette propriété.

Certaines propriétés ne sont pas disponibles dans le cadre des abonnements de modifications de propriétés CRM. Ces propriétés sont :

* `num_unique_conversion_events`
* `hs_lastmodifieddate`

Si vous utilisez l'[API de boîte de réception de conversations et de messages](/api-reference/conversations-conversations-inbox-&-messages-v3/guide), qui est actuellement <u>en version bêta</u>, les propriétés suivantes sont disponibles :

* `assignedTo` **:** le fil de conversation a été réattribué ou désattribué. Si le fil de conversation a été réattribué, `propertyValue` sera un ID d'acteur dans la charge utile des webhooks. S'il est désattribué, cette valeur sera vide.
* `status` **:** le statut du fil de conversation a changé. Dans la charge utile des webhooks, `propertyValue` sera `OPEN` ou `CLOSED`.
* `isArchived` **:** le fil de conversation a été restauré. `propertyValue` dans la charge utile des webhooks sera toujours `FALSE`.

### Créer des abonnements dans votre compte de développeur

Vous pouvez créer des abonnements de webhook dans votre compte de développeur HubSpot.

* Dans votre compte de développeur HubSpot, accédez au tableau bord **Applications**.
* Cliquez sur le **nom** d'une application.
* Dans le menu latéral de gauche, accédez à **Webhooks**.
* Cliquez sur **Créer un abonnement**.
* Dans le panneau de droite, cliquez sur le menu déroulant **Quels types d'objets ?** et sélectionnez les **objets** pour lesquels vous souhaitez créer un abonnement.
* Cliquez sur le menu déroulant **Écouter quels événements ?** et sélectionnez les **types d'événements**.

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

* Si vous créez un abonnement pour des événements de modification de propriété, cliquez sur le menu déroulant **Quelles propriétés ?** et sélectionnez les **propriétés** à écouter.

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

* Cliquez sur **S'abonner**.

L'abonnement apparaîtra dans les paramètres des webhooks. Les nouveaux abonnements sont créés avec un statut En pause. Vous devrez activer l'abonnement pour l'envoi de webhooks :

* Dans la section *Abonnements aux événements*, passez le curseur sur le type d'objet et cliquez sur **Afficher les abonnements**.
* Sélectionnez la **case à cocher à** côté de l'événement, puis dans l'en-tête du tableau, cliquez sur **Activer**.

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

### Créer des abonnements via l'API

Vous pouvez créer des abonnements de façon programmée en utilisant les points de terminaison suivants. Vous devrez utiliser votre clé d'API de développeur lors des demandes à ces points de terminaison.

Un abonnement peut inclure les champs suivants :

| Champ          | Description                                                                                                                                                                                                     |
| -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `id`           | Un nombre représentant l'ID unique d'un abonnement.                                                                                                                                                             |
| `createdAt`    | L'heure en millisecondes à laquelle cet abonnement a été créé.                                                                                                                                                  |
| `createdBy`    | L'ID d'utilisateur associé à l'utilisateur qui a créé l'abonnement.                                                                                                                                             |
| `active`       | Ce champ indique si l'abonnement est activé ou non et déclenche activement des notifications. La valeur peut être `true` ou `false`.                                                                            |
| `eventType`    | Le type d'abonnement. Le [tableau](https://developers.hubspot.fr/docs/guides/api/app-management/webhooks/overview#webhook-subscriptions) au début de cette section comprend les types d'abonnement disponibles. |
| `propertyName` | Le nom de la propriété pour laquelle l'abonnement écoutera les modifications. Cette option n'est nécessaire que pour les types d'abonnement aux modifications de propriété.                                     |

### Obtenir des abonnements

Pour récupérer la liste des abonnements, effectuez une demande `GET` à `webhooks/v3/{appId}/subscriptions`.

La réponse sera un ensemble d'objets représentant vos abonnements. Chaque objet inclura des informations sur l'abonnement comme l'ID, la date de création, le type et, le cas échéant, une indication si l'abonnement est actuellement actif. Voici un exemple de réponse :

```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
  }
]
```

### Créer un nouvel abonnement

Pour créer un nouvel abonnement, effectuez une demande `POST` à `webhooks/v3/{appId}/subscriptions`.

Dans le corps de la demande, vous pouvez inclure les champs suivants :

| Champ          | Description                                                                                                                                                                 |
| -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `eventType`    | Le type d'abonnement.                                                                                                                                                       |
| `propertyName` | Le nom de la propriété pour laquelle l'abonnement écoutera les modifications. Cette option n'est nécessaire que pour les types d'abonnement aux modifications de propriété. |
| `active`       | Ce champ indique si l'abonnement est activé ou non et déclenche activement des notifications. La valeur peut être `true` ou `false`.                                        |

Vous n'avez pas besoin d'inclure `id`, `createdAt` ou `createdBy`, car ces champs sont automatiquement définis.

Par exemple, votre corps de demande peut ressembler à ce qui suit :

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

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

`eventType` doit être un type d'abonnement valide tel que défini dans la section ci-dessus et `propertyName` doit être un nom de propriété valide. Si un client n'a aucune propriété définie correspondant à cette valeur, cet abonnement ne déclenchera aucune notification.

### Mettre à jour un abonnement

Pour activer ou mettre en pause un abonnement, effectuez une demande `PUT` à `webhooks/v3/{appId}/subscriptions/{subscriptionId}`.

Dans le corps de la demande, ajoutez les éléments suivants :

| Champ    | Description                                                                                                                          |
| -------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| `active` | Ce champ indique si l'abonnement est activé ou non et déclenche activement des notifications. La valeur peut être `true` ou `false`. |

### Supprimer un abonnement

Pour supprimer un abonnement, effectuez une demande `DELETE` à `webhooks/v3/{appId}/subscriptions/{subscriptionId}`.

## Charges utiles de webhook

Le point de terminaison pour l'URL cible que vous spécifiez dans les paramètres de webhook de votre application recevra des demandes `POST` contenant des données au format JSON de HubSpot.

Pour vérifier que les demandes que vous obtenez au point de terminaison de webhook proviennent bien de HubSpot, HubSpot renseigne un en-tête `X-HubSpot-Signature` avec une fonction de hachage SHA-256 composée du secret client de votre application et des détails de la demande. Découvrez-en davantage sur la [validation des signatures des demandes](/apps/legacy-apps/authentication/validating-requests).

Utilisez les tableaux ci-dessous pour afficher des détails sur les champs pouvant être contenus dans la charge utile.

| Champ            | Description                                                                                                                                                                                                                                                                                                       |
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `objectId`       | L'ID de l'objet qui a été créé, modifié ou supprimé. Il s'agit de l'ID du contact pour les contacts, de l'ID de l'entreprise pour les entreprises, de l'ID de transaction pour les transactions et de l'[ID de fil](/api-reference/conversations-conversations-inbox-&-messages-v3/guide) pour les conversations. |
| `propertyName`   | Ce champ est uniquement envoyé pour les abonnements aux modifications de propriété. Il s'agit du nom de la propriété modifiée.                                                                                                                                                                                    |
| `propertyValue`  | Ce champ est uniquement envoyé pour les abonnements aux modifications de propriété et représente la nouvelle valeur définie pour la propriété qui a déclenché la notification.                                                                                                                                    |
| `changeSource`   | La source de la modification. Cela peut être l'une des sources de modification qui apparaissent dans les historiques des propriétés de contact.                                                                                                                                                                   |
| `eventId`        | L'ID unique de l'événement qui a déclenché cette notification. Cette valeur n'est pas forcément unique.                                                                                                                                                                                                           |
| `subscriptionId` | L'ID de l'abonnement qui a déclenché une notification sur l'événement.                                                                                                                                                                                                                                            |
| `portalId`       | L'[ID de compte HubSpot](https://knowledge.hubspot.com/account-management/manage-multiple-hubspot-accounts#check-your-current-account) du client où l'événement s'est produit.                                                                                                                                    |
| `appId`          | L'ID de votre application Ce champ est utilisé dans le cas où plusieurs applications pointent vers la même URL de webhook.                                                                                                                                                                                        |
| `occurredAt`     | Lorsque cet événement s'est produit, un horodatage en millisecondes.                                                                                                                                                                                                                                              |
| `eventType`      | Le type d'événement concerné par cette notification. Consultez la liste des types d'abonnement pris en charge dans la section des abonnements aux webhooks.                                                                                                                                                       |
| `attemptNumber`  | Numéro de la tentative de notification de votre service concernant cet événement (à partir de 0). Si votre service expire ou renvoie une erreur comme indiqué dans la section *Nouvelles tentatives* ci-dessous, HubSpot tentera à nouveau d'envoyer la notification.                                             |
| `messageId`      | Ce champ est uniquement envoyé lorsqu'un webhook est à l'écoute de nouveaux messages dans un fil. Il s'agit de l'ID du nouveau message.                                                                                                                                                                           |
| `messageType`    | Ce champ est uniquement envoyé lorsqu'un webhook est à l'écoute de nouveaux messages dans un fil. Il représente le type de message que vous envoyez. Cette valeur peut être `MESSAGE` ou `COMMENT`.                                                                                                               |

| Champ                     | Description                                                                                                                                                                                                        |
| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `primaryObjectId`         | L'ID du gagnant de la fusion, qui est la fiche d'informations qui reste après la fusion. Dans l'interface utilisateur de fusion HubSpot, il s'agit de la fiche d'informations sur la droite.                       |
| `mergedObjectIds`         | Un tableau des ID qui représentent les fiches d'informations qui sont fusionnées dans le gagnant de la fusion. Dans l'interface utilisateur de fusion HubSpot, il s'agit de la fiche d'informations sur la gauche. |
| `newObjectId`             | L'ID de la fiche d'informations qui est créée à la suite de la fusion. Celui-ci est distinct de `primaryObjectId` car dans certains cas, une nouvelle fiche d'informations est créée à la suite de la fusion.      |
| `numberOfPropertiesMoved` | Un entier représentant le nombre de propriétés transférées au cours de la fusion.                                                                                                                                  |

| Champ                  | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `associationType`      | Le type d'association, qui sera l'un des suivants :<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>`TRANSACTION_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>`LIGNE_ITEM_TO_DEAL`</li></ul>                                                                                                                               |
| `fromObjectId`         | L'ID de la fiche d'informations à partir de laquelle la modification d'association a été effectuée.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| `toObjectId`           | L'ID de la fiche d'informations secondaire dans l'événement d'association.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| `associationRemoved`   | Un booléen qui représente les éléments suivants :<ul><li>`true` : le webhook a été déclenché par la suppression d'une association.</li><li>`false` : le webhook a été déclenché par la création d'une association.</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| `isPrimaryAssociation` | Un booléen qui représente les éléments suivants :<ul><li>`true` : la fiche d'informations secondaire est l'association [principale](https://knowledge.hubspot.com/records/associate-records#primary-company-information) de la fiche d'informations à partir de laquelle le changement d'association a été effectué.</li><li>`false` : la fiche d'informations n'est <u>pas</u> l'association principale de la fiche d'informations à partir de laquelle le changement d'association a été effectué. </li></ul>**Remarque :** La création d'une instance d'association principale entre deux fiches d'informations d'objets entraînera également la création de l'association non principale correspondante. Cela peut entraîner deux messages 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
  }
]
```

Comme indiqué ci-dessus, vous devez vous attendre à recevoir plusieurs objets dans une seule demande. La taille du lot peut varier, mais elle restera inférieure à 100 notifications. HubSpot enverra plusieurs notifications uniquement lorsqu'un grand nombre d'événements se produiront dans un délai court. Par exemple, si vous êtes abonné aux nouveaux contacts et qu'un client importe un grand nombre de contacts, HubSpot vous enverra les notifications pour ces contacts dans des lots et non une par demande.

HubSpot ne garantit pas que vous recevrez ces notifications dans l'ordre chronologique. Utilisez la propriété `occuredAt` pour chaque notification pour déterminer quand est survenu l'événement qui a déclenché la notification.

HubSpot ne garantit pas non plus que vous ne recevrez qu'une seule notification pour un événement. Bien que cela soit rare, il est possible que HubSpot vous envoie plusieurs fois la même notification.

## Suppression de contacts conformément à la confidentialité

Les utilisateurs HubSpot peuvent supprimer définitivement une fiche d'informations de contact pour répondre à la législation en matière de confidentialité. Découvrez-en davantage sur la [suppression conformément au RGPD](https://knowledge.hubspot.com/privacy-and-consent/how-do-i-perform-a-gdpr-delete-in-hubspot).

Vous pouvez vous abonner au type d'abonnement `contact.privacyDeletion` pour recevoir des notifications de webhook lorsqu'un utilisateur effectue une suppression de contact conformément à la confidentialité.

Les notifications de suppression conformément à la confidentialité ont un comportement spécial :

* Un événement de suppression conformément à la confidentialité déclenche également l'événement de suppression du contact. Vous recevrez donc deux notifications si vous êtes abonné aux deux événements.
* Ces notifications ne seront pas nécessairement envoyées dans le bon ordre ou dans le même lot de messages. Vous devrez utiliser l'ID d'objet pour faire correspondre les différents messages.

## Sécurité

Pour vérifier que les demandes que vous obtenez au point de terminaison de webhook proviennent bien de HubSpot, HubSpot dispose d'un en-tête `X-HubSpot-Signature` avec une fonction de hachage SHA-256 de concaténation de l'app-secret pour votre application et le corps de demande envoyé.

Pour vérifier cette signature, concaténez le secret de votre application et le corps non analysé de la demande que vous traitez, et obtenez un hachage SHA-256 du résultat. Comparez le hachage résultant avec la valeur de `X-HubSpot-Signature`. Si ces valeurs sont identiques, cette demande provient de HubSpot ou la demande provenait d'une autre personne qui connait le secret de votre application (lequel doit rester secret).

Si ces valeurs sont différentes, cette demande peut avoir été modifiée en transit ou quelqu'un peut usurper les notifications de webhook à votre point de terminaison.

Découvrez-en davantage sur la [validation des demandes de signature](/apps/legacy-apps/authentication/validating-requests).

## Nouvelles tentatives

Si votre service rencontre des problèmes de traitement des notifications, HubSpot tentera d'envoyer à nouveau les notifications jusqu'à 10 fois.

HubSpot procèdera à de nouvelles tentatives dans les cas suivants :

* **La connexion a échoué :** HubSpot ne parvient pas à ouvrir une connexion HTTP de l'URL de webhook fournie.
* **Expiration :** votre service prend plus de cinq secondes pour renvoyer une réponse à un lot de notifications.
* **Codes d'erreur :** votre service répond avec un code de statut HTTP (4xx ou 5xx).

Les notifications seront renvoyées jusqu'à 10 fois. Ces tentatives seront réparties sur les 24 heures suivantes, avec des délais différents entre les demandes. Afin d'éviter la récupération au même moment d'un grand nombre d'échecs concomitants, les notifications individuelles feront l'objet d'une distribution au hasard.

## Limites d'utilisation

Les demandes `POST` que HubSpot envoie à votre service via vos abonnements de webhook <u>ne seront pas</u> comptabilisées dans les [limites de taux d'API de votre application](/apps/legacy-apps/api-usage/usage-details).

Vous pouvez créer un maximum de 1 000 abonnements par application. Si vous tentez d'en créer plus, vous recevrez une mauvaise requête 400 avec le corps suivant :

```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"
}
```
