There's a new version of the HubSpot API

As of November 30, 2022, HubSpot API keys are no longer a supported authentication method for accessing HubSpot APIs. Instead, you should use a private app access token or OAuth to authenticate API calls. Learn more about this change and how to migrate an API key integration to use a private app instead.

Products API Overview

There's a new version of the Products API. We've redesigned our products API and it is out now in developer preview. Check out the new API

In HubSpot, products represent goods or services you sell. Building a product library allows you to quickly add products to deals, generate quotes, and report on product performance. The Products API allows you to manage this data and sync it between HubSpot and other systems. 

Products, along with contacts, companies, deals, tickets, line items, and quotes, are objects in the HubSpot CRM. Learn more about object properties, associations, relationships, and more in our CRM Integration Guide.

Use case for this API: You can use the Products API to sync your product list from your ecommerce site into HubSpot, so you can use your products with the HubSpot sales tools.

Product properties

As with other CRM objects, products support custom properties. Product properties are managed through the CRM Object Properties API.

Note: While products don't have any required properties, we recommend setting a few basic ones for all products, such as name, description, and price. Please see the CRM Object Properties API for details.

Associating products with other objects

Products are associated with deals through line item objects. Line item objects have the hs_product_id property, which will be the objectId of a product object. The line item object is then associated with a specific deal object. See the Line Items API Overview to learn more about line items.

Response details

Products will have the following data. Note that the specific properties included for your products may vary depending on which properties are actually set (properties with no value will never be included in a response) and which properties you are requesting. See the Contacts API Overview for more details about the property change source.

{
  "objectType": "PRODUCT",
  // String; The object type of this object, will always be 'PRODUCT' for products.
  "portalId": 62515,
  // Integer; The Portal or Hub ID that this object belongs to.
  "objectId": 1642767,
  // Integer; The internal ID for this product.
  "properties": {
  // A dictionary of properties for the product, keyed by the internal name of the property
    "price": {
    // String; The name of the property
      "versions": [
      // A list of historical values for the property. The current version is included in this list.
        {
          "name": "price",
          // String; The name of the property.
          "value": "27.50",
          // String; The value of the property for this version.
          "timestamp": 1525287096980,
          // Integer; A Unix timestamp in milliseconds representing when the property was updated.
          "source": "API",
          // String; The change source of the API. See the Contacts API overview for a list of possible sources
          "sourceVid": []
          // A list of integers representing contact VIDs. This will be populated if the property was updated as a result of a change to a contact record.
        }
      ],
      "value": "27.50",
      // String; The current value of the property.
      "timestamp": 1525287096980,
      // Integer; A Unix timestamp in milliseconds representing when the property was updated.
      "source": "API",
      // String; The change source of the API. See the Contacts API overview for a list of possible sources
      "sourceId": null
      // String or null; Additional details about the change source, may be null depending on the specific source.
    },
    "name": {
      "versions": [
        {
          "name": "name",
          "value": "A new product",
          "timestamp": 1525287096980,
          "source": "API",
          "sourceVid": []
        }
      ],
      "value": "A new product",
      "timestamp": 1525287096980,
      "source": "API",
      "sourceId": null
    },
    "description": {
      "versions": [
        {
          "name": "description",
          "value": "A description of this product.",
          "timestamp": 1525287096980,
          "source": "API",
          "sourceVid": []
        }
      ],
      "value": "A description of this product.",
      "timestamp": 1525287096980,
      "source": "API",
      "sourceId": null
    }
  },
  "version": 1,
  // Integer; The current version of the product. This is incremented each time the product is updated.
  "isDeleted": false
  // Boolean; whether or not the product is deleted. Deleted records will not be included unless you specifically request that deleted records be included.
}

Docs for this section or API