> ## 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.

# Create or update a subscription

> Créez ou mettez à jour un abonnement existant en spécifiant les champs et les formes des événements que vous devez écouter. La documentation complète sur les types d'abonnement potentiels se trouve sur la page de documentation de présentation. 

export const SupportedProducts = ({marketing, sales, service, cms, marketingLevel, salesLevel, serviceLevel, cmsLevel}) => {
  const translations = {
    header: "Produits pris en charge",
    description: "Exige l'un des produits suivants ou un produit supérieur.",
    productNames: {
      marketing: "Marketing Hub",
      sales: "Sales Hub",
      service: "Service Hub",
      cms: "Content Hub"
    },
    tiers: {
      free: "Gratuit",
      starter: "Starter",
      professional: "Pro",
      enterprise: "Entreprise"
    }
  };
  const translateTier = tier => {
    if (!tier) return '';
    const lowerTier = tier.toLowerCase();
    return translations.tiers[lowerTier] || tier;
  };
  const products = [{
    name: marketing ? translations.productNames.marketing : '',
    level: translateTier(marketingLevel),
    icon: "https://mintlify-assets.b-cdn.net/Icons/marketing-bolt.svg",
    alt: "Marketing Hub"
  }, {
    name: sales ? translations.productNames.sales : '',
    level: translateTier(salesLevel),
    icon: "https://mintlify-assets.b-cdn.net/Icons/sales-star.svg",
    alt: "Sales Hub"
  }, {
    name: service ? translations.productNames.service : '',
    level: translateTier(serviceLevel),
    icon: "https://mintlify-assets.b-cdn.net/Icons/service-heart.svg",
    alt: "Service Hub"
  }, {
    name: cms ? translations.productNames.cms : '',
    level: translateTier(cmsLevel),
    icon: "https://mintlify-assets.b-cdn.net/Icons/content-play.svg",
    alt: "Content Hub"
  }].filter(product => product.name && product.level);
  if (products.length === 0) return null;
  return <div>
      <div className="text-sm mb-2">{translations.description}</div>
      <div className={`grid ${products.length === 1 ? 'grid-cols-1' : 'grid-cols-2'} gap-1.5`}>
        {products.map((product, index) => <div key={index} style={{
    display: 'flex',
    alignItems: 'center'
  }}>
            <img src={product.icon} alt={product.alt} className="w-3.5 h-3.5 mr-1.5 mt-2.5 mb-2.5 flex-shrink-0 align-middle" />
            <span className="font-medium mr-1 text-sm">{product.name} -</span>
            <span className="text-sm">{product.level}</span>
          </div>)}
      </div>
    </div>;
};

<Accordion title="Supported products" defaultOpen="true" icon="cubes">
  <SupportedProducts marketing={true} sales={true} service={true} cms={true} marketingLevel="FREE" salesLevel="FREE" serviceLevel="FREE" cmsLevel="FREE" />
</Accordion>


## OpenAPI

````yaml specs/2026-03/webhooks-webhooks-v2026-03.json POST /webhooks-journal/subscriptions/2026-03
openapi: 3.0.1
info:
  title: Webhooks Webhooks
  description: Basepom for all HubSpot Projects
  version: 2026-03
  x-hubspot-product-tier-requirements:
    marketing: FREE
    sales: FREE
    service: FREE
    cms: FREE
    commerce: FREE
    crmHub: FREE
    dataHub: FREE
servers:
  - url: https://api.hubapi.com
security: []
tags:
  - name: Advanced
  - name: Basic
  - name: Batch
paths:
  /webhooks-journal/subscriptions/2026-03:
    post:
      tags:
        - Basic
      summary: Insérer un abonnement
      description: >-
        Créez ou mettez à jour un abonnement existant en spécifiant les champs
        et les formes des événements que vous devez écouter. La documentation
        complète sur les types d'abonnement potentiels se trouve sur la page de
        documentation de présentation. 
      operationId: >-
        post-/webhooks-journal/subscriptions/2026-03_/webhooks-journal/subscriptions/2026-03
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SubscriptionUpsertRequest'
        required: true
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubscriptionResponse_1'
        default:
          $ref: '#/components/responses/Error'
          description: ''
      security:
        - oauth2:
            - webhooks-journal-subscription-management
components:
  schemas:
    SubscriptionUpsertRequest:
      properties: {}
      oneOf:
        - $ref: '#/components/schemas/ObjectSubscriptionUpsertRequest'
        - $ref: '#/components/schemas/AssociationSubscriptionUpsertRequest'
        - $ref: '#/components/schemas/AppLifecycleEventSubscriptionUpsertRequest'
        - $ref: '#/components/schemas/ListMembershipSubscriptionUpsertRequest'
        - $ref: '#/components/schemas/GdprPrivacyDeletionSubscriptionUpsertRequest'
    SubscriptionResponse_1:
      required:
        - actions
        - appId
        - createdAt
        - id
        - objectTypeId
        - subscriptionType
        - updatedAt
      type: object
      properties:
        actionOverrides:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/ActionOverrideRequest'
          description: >-
            Un objet contenant des remplacements d'action, où chaque clé est une
            action et la valeur est un objet ActionOverrideRequest.
        actions:
          type: array
          description: "Une liste d'actions qui déclenchent l'abonnement. Les valeurs possibles incluent «\_CREATE\_», «\_UPDATE\_», «\_DELETE\_», «\_MERGE\_», «\_RESTORE\_», «\_ASSOCIATION_ADDED\_», «\_ASSOCIATION_REMOVED\_», «\_SNAPSHOT\_», «\_APP_INSTALL\_», «\_APP_UNINSTALL\_», «\_ADDED_TO_LIST\_», «\_REMOVED_FROM_LIST\_» et «\_RGPD_DELETE\_»."
          items:
            type: string
            enum:
              - CREATE
              - UPDATE
              - DELETE
              - MERGE
              - RESTORE
              - ASSOCIATION_ADDED
              - ASSOCIATION_REMOVED
              - SNAPSHOT
              - APP_INSTALL
              - APP_UNINSTALL
              - ADDED_TO_LIST
              - REMOVED_FROM_LIST
              - GDPR_DELETE
        appId:
          type: integer
          description: >-
            L'identifiant unique de l'application associée à l'abonnement. Il
            s'agit d'un entier formaté en int64.
          format: int64
        associatedObjectTypeIds:
          type: array
          description: >-
            Une liste d'ID de types d'objets associés. Chaque ID est une chaîne
            de caractères.
          items:
            type: string
        createdAt:
          type: string
          description: La date et l'heure de création de l'abonnement, au format ISO 8601.
          format: date-time
        createdBy:
          type: integer
          description: >-
            L'ID de l'utilisateur qui a créé l'abonnement. Il s'agit d'un entier
            formaté en int64.
          format: int64
        deletedAt:
          type: string
          description: >-
            La date et l'heure de suppression de l'abonnement, au format ISO
            8601, le cas échéant.
          format: date-time
        id:
          type: integer
          description: >-
            L'identifiant unique de l'abonnement. Il s'agit d'un entier formaté
            en int64.
          format: int64
        listIds:
          type: array
          description: >-
            Une liste d'ID de listes associées à l'abonnement. Chaque ID est un
            entier au format int64.
          items:
            type: integer
            format: int64
        objectIds:
          type: array
          description: >-
            Une liste d'ID d'objets associés à l'abonnement. Chaque ID est un
            entier formaté en int64.
          items:
            type: integer
            format: int64
        objectTypeId:
          type: string
          description: >-
            L'identifiant du type d'objet associé à l'abonnement. Il s'agit
            d'une chaîne de caractères.
        portalId:
          type: integer
          description: >-
            L'identifiant unique du portail associé à l'abonnement. Il s'agit
            d'un entier formaté en int64.
          format: int64
        properties:
          type: array
          description: >-
            Une liste de noms de propriétés associés à l'abonnement. Chaque
            propriété est une chaîne de caractères.
          items:
            type: string
        subscriptionType:
          type: string
          description: "Le type d'abonnement, qui peut être l'un des suivants\_: «\_OBJECT\_», «\_ASSOCIATION\_», «\_EVENT\_», «\_APP_LIFECYCLE_EVENT\_», «\_LIST_MEMBERSHIP\_» ou «\_RGPD_PRIVACY_DELETION\_»."
          enum:
            - APP_LIFECYCLE_EVENT
            - ASSOCIATION
            - EVENT
            - GDPR_PRIVACY_DELETION
            - LIST_MEMBERSHIP
            - OBJECT
        updatedAt:
          type: string
          description: >-
            La date et l'heure de la dernière mise à jour de l'abonnement, au
            format ISO 8601.
          format: date-time
    ObjectSubscriptionUpsertRequest:
      required:
        - actions
        - objectIds
        - objectTypeId
        - portalId
        - properties
        - subscriptionType
      type: object
      properties:
        actions:
          type: array
          description: "Un tableau de chaînes de caractères spécifiant les actions qui déclenchent l'abonnement. Les actions valides incluent «\_CREATE\_», «\_UPDATE\_», «\_DELETE\_», «\_MERGE\_», «\_RESTORE\_»."
          items:
            type: string
            enum:
              - CREATE
              - UPDATE
              - DELETE
              - MERGE
              - RESTORE
              - ASSOCIATION_ADDED
              - ASSOCIATION_REMOVED
              - SNAPSHOT
              - APP_INSTALL
              - APP_UNINSTALL
              - ADDED_TO_LIST
              - REMOVED_FROM_LIST
              - GDPR_DELETE
        objectIds:
          type: array
          description: >-
            Un tableau d'entiers représentant les ID des objets impliqués dans
            l'abonnement. Un tableau vide signifie s'abonner à tous les
            objectIds.
          items:
            type: integer
            format: int64
        objectTypeId:
          type: string
          description: "Une chaîne de caractères qui identifie le type d'objet pour lequel l'abonnement est créé ou mis à jour. Par exemple, «\_0-1\_» pour les contacts."
        portalId:
          type: integer
          description: Un entier représentant l'ID du portail associé à l'abonnement.
          format: int64
        properties:
          type: array
          description: >-
            Un tableau de chaînes de caractères listant les propriétés des
            objets pertinentes pour l'abonnement. Un tableau vide signifie que
            toutes les propriétés sont écoutées.
          items:
            type: string
        subscriptionType:
          type: string
          description: "Une chaîne indiquant le type d'abonnement. La valeur par défaut et la seule valeur valide est «\_OBJECT\_»."
          default: OBJECT
          enum:
            - OBJECT
      x-hubspot-sub-type-impl: true
    AssociationSubscriptionUpsertRequest:
      required:
        - actions
        - associatedObjectTypeIds
        - objectIds
        - objectTypeId
        - portalId
        - subscriptionType
      type: object
      properties:
        actions:
          type: array
          description: "Un tableau de chaînes spécifiant les actions qui déclenchent l'abonnement. Les actions valides incluent «\_ASSOCIATION_ADDED\_» et «\_ASSOCIATION_REMOVED\_»."
          items:
            type: string
            enum:
              - CREATE
              - UPDATE
              - DELETE
              - MERGE
              - RESTORE
              - ASSOCIATION_ADDED
              - ASSOCIATION_REMOVED
              - SNAPSHOT
              - APP_INSTALL
              - APP_UNINSTALL
              - ADDED_TO_LIST
              - REMOVED_FROM_LIST
              - GDPR_DELETE
        associatedObjectTypeIds:
          type: array
          description: >-
            Un tableau de chaînes de caractères représentant les identifiants de
            type des objets associés impliqués dans l'abonnement. S'il est
            présent, les événements ne se déclencheront que si l'objectTypeId de
            l'objet CIBLE dans l'association est inclus dans ce tableau.  
          items:
            type: string
        objectIds:
          type: array
          description: >-
            Un tableau d'entiers représentant les identifiants uniques des
            objets impliqués dans l'abonnement.
          items:
            type: integer
            format: int64
        objectTypeId:
          type: string
          description: "Une chaîne représentant l'identifiant de type de l'objet impliqué dans l'abonnement. Par exemple, «\_0-1\_» pour les contacts. Cela correspond au côté EXPÉDITION de l'association. Un objectTypeId de «\_0-1\_» correspondrait à un changement d'association CONTACT_TO_COMPANY.  "
        portalId:
          type: integer
          description: Un entier représentant l'identifiant unique du portail HubSpot.
          format: int64
        subscriptionType:
          type: string
          description: "Une chaîne indiquant le type d'abonnement, qui est «\_ASSOCIATION\_» par défaut."
          default: ASSOCIATION
          enum:
            - ASSOCIATION
      x-hubspot-sub-type-impl: true
    AppLifecycleEventSubscriptionUpsertRequest:
      required:
        - eventTypeId
        - properties
        - subscriptionType
      type: object
      properties:
        eventTypeId:
          type: string
          description: "Une chaîne de caractères représentant l'identifiant unique du type d'événement auquel l'abonnement se rapporte. Cette valeur correspond à une classification interne des événements chez HubSpot.\n\n4-1909196\_: Événement d'installation d'application\n4-1916193\_: Événement de désinstallation d'application"
        properties:
          type: array
          description: >-
            Un tableau de chaînes spécifiant les propriétés de l'événement
            associé à l'abonnement.
          items:
            type: string
        subscriptionType:
          type: string
          description: "Une chaîne indiquant le type d'abonnement, qui est «\_APP_LIFECYCLE_EVENT\_» par défaut."
          default: APP_LIFECYCLE_EVENT
          enum:
            - APP_LIFECYCLE_EVENT
      x-hubspot-sub-type-impl: true
    ListMembershipSubscriptionUpsertRequest:
      required:
        - actions
        - listIds
        - objectIds
        - portalId
        - subscriptionType
      type: object
      properties:
        actions:
          type: array
          description: "Un tableau de chaînes de caractères spécifiant les actions qui déclenchent l'abonnement. Les actions valides incluent «\_ADDED_TO_LIST\_» et «\_REMOVED_FROM_LIST\_»"
          items:
            type: string
            enum:
              - CREATE
              - UPDATE
              - DELETE
              - MERGE
              - RESTORE
              - ASSOCIATION_ADDED
              - ASSOCIATION_REMOVED
              - SNAPSHOT
              - APP_INSTALL
              - APP_UNINSTALL
              - ADDED_TO_LIST
              - REMOVED_FROM_LIST
              - GDPR_DELETE
        listIds:
          type: array
          description: >-
            Un tableau d’entiers représentant les identifiants des listes
            impliquées dans l’abonnement. Un tableau vide signifie que toutes
            les listes sont écoutées.
          items:
            type: integer
            format: int64
        objectIds:
          type: array
          description: >-
            Un tableau d'entiers représentant les identifiants des objets
            associés à l'abonnement. Un tableau vide signifie tous les
            objectsIds sont écoutés.
          items:
            type: integer
            format: int64
        portalId:
          type: integer
          description: Un entier représentant l'ID du portail où l'abonnement est géré.
          format: int64
        subscriptionType:
          type: string
          description: "Une chaîne indiquant le type d'abonnement. La valeur par défaut et la seule valeur valide est «\_LIST_MEMBERSHIP\_»."
          default: LIST_MEMBERSHIP
          enum:
            - LIST_MEMBERSHIP
      x-hubspot-sub-type-impl: true
    GdprPrivacyDeletionSubscriptionUpsertRequest:
      required:
        - actions
        - objectTypeId
        - portalId
        - subscriptionType
      type: object
      properties:
        actions:
          type: array
          description: "Un tableau de chaînes spécifiant les actions qui déclenchent l'abonnement. L'action valide est «\_RGPD_DELETE\_». "
          items:
            type: string
            enum:
              - CREATE
              - UPDATE
              - DELETE
              - MERGE
              - RESTORE
              - ASSOCIATION_ADDED
              - ASSOCIATION_REMOVED
              - SNAPSHOT
              - APP_INSTALL
              - APP_UNINSTALL
              - ADDED_TO_LIST
              - REMOVED_FROM_LIST
              - GDPR_DELETE
        objectTypeId:
          type: string
          description: >-
            Une chaîne représentant l'identifiant unique du type d'objet associé
            à l'abonnement.
        portalId:
          type: integer
          description: >-
            Un entier représentant l'identifiant unique du portail HubSpot
            écouté pour les changements. 
          format: int64
        subscriptionType:
          type: string
          description: >-
            Une chaîne de caractères indiquant le type d'abonnement.
            RGPD_PRIVACY_DELETION est la seule option valide pour
            GdprPrivacyDeletionSubscriptionUpsertRequest. 
          default: GDPR_PRIVACY_DELETION
          enum:
            - GDPR_PRIVACY_DELETION
      x-hubspot-sub-type-impl: true
    ActionOverrideRequest:
      type: object
      properties:
        associatedObjectTypeIds:
          type: array
          description: >-
            Un tableau de chaînes de caractères, chacune représentant un ID de
            type d'objet associé pertinent pour la substitution d'action.
          items:
            type: string
        listIds:
          type: array
          description: >-
            Un tableau d'entiers représentant les ID de liste associés à la
            substitution d'action. Les entiers sont au format int64.
          items:
            type: integer
            format: int64
        objectIds:
          type: array
          description: >-
            Un tableau d'entiers, chacun représentant un ID d'objet pour lequel
            la substitution d'action est applicable. Les entiers sont au format
            int64.
          items:
            type: integer
            format: int64
        properties:
          type: array
          description: >-
            Un tableau de chaînes de caractères représentant les propriétés à
            remplacer dans l'action. Chaque chaîne correspond à un nom de
            propriété.
          items:
            type: string
    Error:
      required:
        - category
        - correlationId
        - message
      type: object
      properties:
        category:
          type: string
          description: La catégorie d'erreur.
        context:
          type: object
          additionalProperties:
            type: array
            items:
              type: string
          description: >-
            Contexte de la condition d'erreur, représenté sous la forme d'un
            objet avec des propriétés supplémentaires.
          example: >-
            {invalidPropertyName=[propertyValue], missingScopes=[scope1,
            scope2]}
        correlationId:
          type: string
          description: >-
            Un identifiant unique pour la requête, formaté comme un UUID.
            Celui-ci doit être inclus dans tous les rapports d'erreur ou tickets
            d'assistance.
          format: uuid
          example: aeb5f871-7f07-4993-9211-075dc63e7cbf
        errors:
          type: array
          description: >-
            Un tableau fournissant des informations supplémentaires sur
            l'erreur, chaque élément étant un objet ErrorDetail.
          items:
            $ref: '#/components/schemas/ErrorDetail'
        links:
          type: object
          additionalProperties:
            type: string
          description: >-
            Une carte des noms de liens vers les URI associées contenant de la
            documentation sur l'erreur ou les étapes de correction recommandées.
            La carte est représentée sous forme d'objet avec des propriétés de
            chaîne.
        message:
          type: string
          description: >-
            Un message lisible par l'utilisateur décrivant l'erreur ainsi que
            les mesures correctives à prendre, le cas échéant. Il s'agit d'une
            chaîne de caractères.
          example: An error occurred
        subCategory:
          type: string
          description: >-
            Une catégorie spécifique qui contient des détails plus précis sur
            l'erreur, représentée sous forme de chaîne de caractères.
      example:
        message: Invalid input (details will vary based on the error)
        correlationId: aeb5f871-7f07-4993-9211-075dc63e7cbf
        category: VALIDATION_ERROR
        links:
          knowledge-base: https://www.hubspot.com/products/service/knowledge-base
    ErrorDetail:
      required:
        - message
      type: object
      properties:
        code:
          type: string
          description: >-
            Le code de statut associé au détail de l'erreur. Cette chaîne
            fournit un code d'erreur standardisé à titre de référence.
        context:
          type: object
          additionalProperties:
            type: array
            items:
              type: string
          description: >-
            Contexte de la condition d'erreur, représenté sous forme d'objet où
            chaque clé est un nom de contexte et la valeur est un tableau de
            chaînes de caractères fournissant des détails supplémentaires.
          example: '{missingScopes=[scope1, scope2]}'
        in:
          type: string
          description: >-
            Le nom du champ ou du paramètre dans lequel l'erreur a été détectée.
            Il s'agit d'une chaîne de caractères qui permet d'identifier la
            source de l'erreur.
        message:
          type: string
          description: >-
            Un message lisible par l'utilisateur décrivant l'erreur ainsi que
            les mesures correctives à prendre, le cas échéant. Ce champ est
            obligatoire.
        subCategory:
          type: string
          description: >-
            Une catégorie spécifique qui contient des détails plus précis sur
            l'erreur. Cette chaîne de caractères permet de mieux classer
            l'erreur.
  responses:
    Error:
      description: An error occurred.
      content:
        '*/*':
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    oauth2:
      type: oauth2
      flows:
        authorizationCode:
          authorizationUrl: https://app.hubspot.com/oauth/authorize
          tokenUrl: https://api.hubapi.com/oauth/v1/token
          scopes:
            developers-read: ''
            developers-write: ''
            private-apps-read: ''
            private-apps-write: ''
            webhooks-journal-data-access: ''
            webhooks-journal-snapshot-management: ''
            webhooks-journal-subscription-management: ''
            webhooks-journal-subscription-read: ''

````