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

---
id: 3c77a847-7408-4316-99eb-bb7f820f6a6d
---

# Create or update a subscription

> Create or update an existing subscription by specifying the fields and shapes of what events you need to listen to. Full documentation on potential subscription types can be found on the overview documentation page. 

export const SupportedProducts = ({marketing, sales, service, cms, data, commerce, marketingLevel, salesLevel, serviceLevel, cmsLevel, dataLevel, commerceLevel}) => {
  const translations = {
    description: "Requires one of the following products or higher.",
    productNames: {
      marketing: "Marketing Hub",
      sales: "Sales Hub",
      service: "Service Hub",
      cms: "Content Hub",
      data: "Data Hub",
      commerce: "Revenue Hub"
    },
    tiers: {
      free: "Free",
      starter: "Starter",
      professional: "Professional",
      enterprise: "Enterprise"
    }
  };
  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"
  }, {
    name: data ? translations.productNames.data : '',
    level: translateTier(dataLevel),
    icon: "https://developers.hubspot.com/hubfs/Knowledge_Base_2023-24-25/subscription_key_icons/operations_icon.svg",
    alt: "Data Hub"
  }, {
    name: commerce ? translations.productNames.commerce : '',
    level: translateTier(commerceLevel),
    icon: "https://developers.hubspot.com/hubfs/Knowledge_Base/subscription_key_icons/commerce_icon.svg",
    alt: "Revenue 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: Upsert Subscription
      description: >-
        Create or update an existing subscription by specifying the fields and
        shapes of what events you need to listen to. Full documentation on
        potential subscription types can be found on the overview documentation
        page. 
      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: >-
            An object containing action overrides, where each key is an action
            and the value is an ActionOverrideRequest object.
        actions:
          type: array
          description: >-
            A list of actions that trigger the subscription. Possible values
            include 'CREATE', 'UPDATE', 'DELETE', 'MERGE', 'RESTORE',
            'ASSOCIATION_ADDED', 'ASSOCIATION_REMOVED', 'SNAPSHOT',
            'APP_INSTALL', 'APP_UNINSTALL', 'ADDED_TO_LIST',
            'REMOVED_FROM_LIST', and 'GDPR_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: >-
            The unique identifier for the app associated with the subscription.
            It is an integer formatted as int64.
          format: int64
        associatedObjectTypeIds:
          type: array
          description: A list of associated object type IDs. Each ID is a string.
          items:
            type: string
        createdAt:
          type: string
          description: >-
            The date and time when the subscription was created, in ISO 8601
            format.
          format: date-time
        createdBy:
          type: integer
          description: >-
            The ID of the user who created the subscription. It is an integer
            formatted as int64.
          format: int64
        deletedAt:
          type: string
          description: >-
            The date and time when the subscription was deleted, in ISO 8601
            format, if applicable.
          format: date-time
        id:
          type: integer
          description: >-
            The unique identifier for the subscription. It is an integer
            formatted as int64.
          format: int64
        listIds:
          type: array
          description: >-
            A list of list IDs associated with the subscription. Each ID is an
            integer formatted as int64.
          items:
            type: integer
            format: int64
        objectIds:
          type: array
          description: >-
            A list of object IDs associated with the subscription. Each ID is an
            integer formatted as int64.
          items:
            type: integer
            format: int64
        objectTypeId:
          type: string
          description: >-
            The identifier for the object type associated with the subscription.
            It is a string.
        portalId:
          type: integer
          description: >-
            The unique identifier for the portal associated with the
            subscription. It is an integer formatted as int64.
          format: int64
        properties:
          type: array
          description: >-
            A list of property names associated with the subscription. Each
            property is a string.
          items:
            type: string
        subscriptionType:
          type: string
          description: >-
            The type of subscription, which can be one of the following:
            'OBJECT', 'ASSOCIATION', 'EVENT', 'APP_LIFECYCLE_EVENT',
            'LIST_MEMBERSHIP', or 'GDPR_PRIVACY_DELETION'.
          enum:
            - APP_LIFECYCLE_EVENT
            - ASSOCIATION
            - EVENT
            - GDPR_PRIVACY_DELETION
            - LIST_MEMBERSHIP
            - OBJECT
        updatedAt:
          type: string
          description: >-
            The date and time when the subscription was last updated, in ISO
            8601 format.
          format: date-time
    ObjectSubscriptionUpsertRequest:
      required:
        - actions
        - objectIds
        - objectTypeId
        - portalId
        - properties
        - subscriptionType
      type: object
      properties:
        actions:
          type: array
          description: >-
            An array of strings specifying the actions that trigger the
            subscription. Valid actions include '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: >-
            An array of integers representing the IDs of the objects involved in
            the subscription. Empty means listen to all objectIds.
          items:
            type: integer
            format: int64
        objectTypeId:
          type: string
          description: >-
            A string that identifies the type of object for which the
            subscription is being created or updated. For example "0-1" for
            contacts.
        portalId:
          type: integer
          description: >-
            An integer representing the portal ID associated with the
            subscription.
          format: int64
        properties:
          type: array
          description: >-
            An array of strings listing the properties of the objects that are
            relevant to the subscription. Empty means listen to all properties.
          items:
            type: string
        subscriptionType:
          type: string
          description: >-
            A string indicating the type of subscription. The default and only
            valid value is '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: >-
            An array of strings specifying the actions that trigger the
            subscription. Valid actions include  'ASSOCIATION_ADDED' and
            '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: >-
            An array of strings representing the type identifiers of the
            associated objects involved in the subscription. If present, events
            will only fire if the TO objectTypeId in the association is included
            in this array.  
          items:
            type: string
        objectIds:
          type: array
          description: >-
            An array of integers representing the unique identifiers of the
            objects involved in the subscription.
          items:
            type: integer
            format: int64
        objectTypeId:
          type: string
          description: >-
            A string representing the type identifier of the object involved in
            the subscription. For example "0-1" for Contacts. This corresponds
            to the FROM side of the association. An objectTypeId of "0-1" would
            match a CONTACT_TO_COMPANY association change.  
        portalId:
          type: integer
          description: An integer representing the unique identifier of the HubSpot portal.
          format: int64
        subscriptionType:
          type: string
          description: >-
            A string indicating the type of subscription, which is 'ASSOCIATION'
            by default.
          default: ASSOCIATION
          enum:
            - ASSOCIATION
      x-hubspot-sub-type-impl: true
    AppLifecycleEventSubscriptionUpsertRequest:
      required:
        - eventTypeId
        - properties
        - subscriptionType
      type: object
      properties:
        eventTypeId:
          type: string
          description: >-
            A string representing the unique identifier for the event type that
            the subscription pertains to. This value corresponds to an internal
            event classification at HubSpot. 


            4-1909196: App install event

            4-1916193: App uninstall event
        properties:
          type: array
          description: >-
            An array of strings specifying the properties of the event
            associated with the subscription.
          items:
            type: string
        subscriptionType:
          type: string
          description: >-
            A string indicating the type of subscription, which is
            'APP_LIFECYCLE_EVENT' by default.
          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: >-
            An array of strings specifying the actions that trigger the
            subscription. Valid actions include 'ADDED_TO_LIST', and
            '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: >-
            An array of integers representing the IDs of the lists involved in
            the subscription. Empty means listen to all lists.
          items:
            type: integer
            format: int64
        objectIds:
          type: array
          description: >-
            An array of integers representing the IDs of the objects associated
            with the subscription. Empty means listen to all objectsIds.
          items:
            type: integer
            format: int64
        portalId:
          type: integer
          description: >-
            An integer representing the ID of the portal where the subscription
            is being managed.
          format: int64
        subscriptionType:
          type: string
          description: >-
            A string indicating the type of subscription. The default and only
            valid value is '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: >-
            An array of strings specifying the actions that trigger the
            subscription. Valid action is 'GDPR_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: >-
            A string representing the unique identifier for the type of object
            associated with the subscription.
        portalId:
          type: integer
          description: >-
            An integer representing the unique identifier for the HubSpot portal
            that is being listened to for changes. 
          format: int64
        subscriptionType:
          type: string
          description: >-
            A string indicating the type of subscription. GDPR_PRIVACY_DELETION
            is the only valid option for
            GdprPrivacyDeletionSubscriptionUpsertRequest. 
          default: GDPR_PRIVACY_DELETION
          enum:
            - GDPR_PRIVACY_DELETION
      x-hubspot-sub-type-impl: true
    ActionOverrideRequest:
      type: object
      properties:
        associatedObjectTypeIds:
          type: array
          description: >-
            An array of strings, each representing an associated object type ID
            relevant to the action override.
          items:
            type: string
        listIds:
          type: array
          description: >-
            An array of integers representing list IDs that are associated with
            the action override. The integers are in int64 format.
          items:
            type: integer
            format: int64
        objectIds:
          type: array
          description: >-
            An array of integers, each representing an object ID for which the
            action override is applicable. The integers are in int64 format.
          items:
            type: integer
            format: int64
        properties:
          type: array
          description: >-
            An array of strings representing the properties to be overridden in
            the action. Each string corresponds to a property name.
          items:
            type: string
    Error:
      required:
        - category
        - correlationId
        - message
      type: object
      properties:
        category:
          type: string
          description: The error category.
        context:
          type: object
          additionalProperties:
            type: array
            items:
              type: string
          description: >-
            Context about the error condition, represented as an object with
            additional properties.
          example: >-
            {invalidPropertyName=[propertyValue], missingScopes=[scope1,
            scope2]}
        correlationId:
          type: string
          description: >-
            A unique identifier for the request, formatted as a UUID. This
            should be included with any error reports or support tickets.
          format: uuid
          example: aeb5f871-7f07-4993-9211-075dc63e7cbf
        errors:
          type: array
          description: >-
            An array providing further information about the error, with each
            item being an ErrorDetail object.
          items:
            $ref: '#/components/schemas/ErrorDetail'
        links:
          type: object
          additionalProperties:
            type: string
          description: >-
            A map of link names to associated URIs containing documentation
            about the error or recommended remediation steps, represented as an
            object with string properties.
        message:
          type: string
          description: >-
            A human readable message describing the error along with remediation
            steps where appropriate. It is a string.
          example: An error occurred
        subCategory:
          type: string
          description: >-
            A specific category that contains more specific detail about the
            error, represented as a string.
      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: >-
            The status code associated with the error detail. This string
            provides a standardized error code for reference.
        context:
          type: object
          additionalProperties:
            type: array
            items:
              type: string
          description: >-
            Context about the error condition, represented as an object where
            each key is a context name and the value is an array of strings
            providing further details.
          example: '{missingScopes=[scope1, scope2]}'
        in:
          type: string
          description: >-
            The name of the field or parameter in which the error was found. It
            is a string that helps identify the source of the error.
        message:
          type: string
          description: >-
            A human readable message describing the error along with remediation
            steps where appropriate. This is a required field.
        subCategory:
          type: string
          description: >-
            A specific category that contains more specific detail about the
            error. This string helps further classify the error.
  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: ''

````