Scope requirements
Scope requirements
- Association details endpoints: create, edit, and remove associations between records. In this article, you’ll learn more about using the associations details endpoints.
- Association schema endpoints: view your account’s association definitions (also known as types), create and manage custom association labels, and set limits for associations. Learn more about using the associations schema endpoints.
Associate records
You can associate records with each other unlabeled (i.e. contact and company associated with no descriptor) or with labels (e.g., contact and company associated and the contact is the company’s Decision maker).Associate records without a label
You can create a default unlabeled association between two records, or set up unlabeled associations for records in bulk. To set up an individual default association between two records, make aPUT request to
/crm/objects/2026-03/{fromObjectType}/{fromObjectId}/associations/default/{toObjectType}/{toObjectId}
In the request URL, include:
fromObjectType: the ID of the object you’re associating. To find the ID values, refer to this list of object type IDs, or for contacts, companies, deals, tickets, and notes, you can use the object name (e.g.,contact,company).fromObjectId: the ID of the record to associate.toObjectType: the ID of the object you’re associating the record to. To find the ID values, refer to this list of object type IDs, or for contacts, companies, deals, tickets, and notes, you can use the object name (e.g.,contact,company).toObjectId: the ID of the record to associate to.
12345 with a company record whose ID is 67891, your request URL would be: /crm/objects/2026-03/contact/12345/associations/default/company/67891.
To associate records without a label in bulk, make a POST request to /crm/associations/2026-03/{fromObjectType}/{toObjectType}/batch/associate/default. In the request body, include objectId values for the records you want to associate. For example:
Associate records with a label
You can also associate records with labels for individual record pairs or multiple pairs of records in bulk. For each association, depending on your association limits, you can include multiple labels.- To associate two records and set a label to describe the association, make a
PUTrequest to/crm/objects/2026-03/{objectType}/{objectId}/associations/{toObjectType}/{toObjectId}. In the request URL, include theidvalues of the two records you’re associating. - To bulk create labeled associations between records of the same objects, make a
POSTrequest to/crm/associations/2026-03/{fromObjectType}/{toObjectType}/batch/create. In the request body, include theidvalues of records to associate in addition to the required parameters below.
associationCategory: eitherHUBSPOT_DEFINED(default label) orUSER_DEFINED(custom label).associationTypeId: the numerical ID value for the label. If using a default label (e.g., Primary company), refer to this list of default type IDs. If you’re using a custom label, you’ll need to retrieve the labels between those objects.
GET request to /crm/associations/2026-03/contact/deal/labels.
2. In the response, look at the typeId and category values for the label. The ID will be a number (e.g., 36), and the category will always be USER_DEFINED for custom labels.
3. Make a PUT request to /crm/objects/2026-03/contact/{objectId}/associations/deal/{toObjectId} with the following example request body:
id values of the two associated records along with the label for the association. For the example above, the response would look like:
Retrieve associated records
You can retrieve a record’s associations of a specific object type.- To retrieve an individual record’s associations of a specific object, make a
GETrequest to/crm/objects/2026-03/{fromObjectType}/{objectId}/associations/{toObjectType}. In the request URL, include the record’s object as thefromObjectTypeand its record ID as theobjectId. - To retrieve a record’s associated records of a specific object, make a
POSTrequest to/crm/associations/2026-03/{fromObjectType}/{toObjectType}/batch/read. In the request body, include up to 1,000idvalues of records whose associated records you want to retrieve.
POST request to /crm/associations/2026-03/contacts/companies/batch/read. Your request body would look like the following:
label, category, and typeId. For the example batch request above, the response would be:
Update record association labels
For existing associations, to update the association labels, you can use the basic and batch create endpoints. If an existing labeled association exists between two records, to replace the existing label, only include the new label in the request. If you want to append labels (i.e. add a new label and keep the existing label), include both labels in your request. For example, if records are already associated with a label with thetypeId of 30, to keep that label while adding another label, your request body would look like:
Remove record associations
You can delete all associations between records, or delete only associations of specific types (i.e. default or custom labels). When deleting all associations, the records will not be deleted, but they will no longer be associated with one another. If deleting a specific association type, the records will still be associated, but the specified labels will be removed. However, if you delete the default unlabeled association type, this will remove all other associations.Remove all associations between records
To remove all associations between pairs of records:- To remove all associations between two records, make a
DELETErequest to/crm/objects/2026-03/{objectType}/{objectId}/associations/{toObjectType}/{toObjectId}. - To batch remove all associations between record pairs, make a
POSTrequest to/crm/associations/2026-03/{fromObjectType}/{toObjectType}/batch/archive. In the request body, include theidvalues of records for which you want to remove all associations. You can include a maximum of 100 uniquefrominputs per batch request (i.e. remove associations originating from 100 different records).
Remove associations with specific labels
To remove record associations with specific association labels, make aPOST request to /crm/associations/2026-03/{fromObjectType}/{toObjectType}/batch/labels/archive. In the request body, include an array with id values of the associated records and the associationTypeId and category values of labels to remove. You can include a maximum of 100 inputs per batch request.
For example, to remove a custom label from an association, but keep the unlabeled association, your request body would look like:
Report on high association usage
There are technical limits to the number of associations a record can have. You can use the associations API to retrieve a report of records that are either approaching or have hit the maximum limit for associations. To retrieve the report, make aPOST request to /crm/associations/2026-03/usage/high-usage-report/{userID}. The file includes records using 80% or more of their association limit. For example, if a company can be associated with up to 50,000 contacts, the company will be included in the file if it has 40,000 or more associated contacts. The file will be sent to the email of the user whose ID was included in the request URL. Learn how to retrieve user IDs with the users API.
Limits
The association API endpoints are subject to the following limits based on your account subscription:- Daily limits:
- Professional accounts: 500,000 requests
- Enterprise accounts: 500,000 requests
- You can purchase an API limit increase, you can make a maximum of 1,000,000 requests per day. This maximum will not increase for association API requests if you purchase an additional API limit increase.
- Burst limits:
- Free and Starter accounts: 100 requests per 10 seconds
- Professional and Enterprise accounts: 150 requests per 10 seconds
- If you purchase the API limit increase, you can make a maximum of 200 requests per 10 seconds. This maximum will not increase for association API requests if you purchase an additional API limit increase.
- Batch read associations: limited to 1,000 inputs per request body.
- Batch create associations: limited to 2,000 inputs per request body.
Association type ID values
The following tables include the HubSpot-definedassociationTypeId values that specify the type of association. Association types vary depending on the included objects and the direction of the association (e.g., Contact to Company is different from Company to Contact). If you create custom objects or custom association labels, the related association types will have unique typeId values that you’ll need to retrieve or locate in your association settings in HubSpot.
Company to object
Contact to object
| TYPE ID | Association type | | ------- | ----- ------------------------------------------------------ | |449 | Contact to contact |
| 279 | Contact to company |
| 1 | Contact to primary company |
| 931 | Billing contact to company |
| 4 | Contact to deal |
| 15 | Contact to ticket |
| 193 | Contact to call |
| 197 | Contact to email |
| 199 | Contact to meeting |
| 201 | Contact to note |
| 203 | Contact to task |
| 82 | Contact to communication (SMS, WhatsApp, or LinkedIn message) |
| 454 | Contact to postal mail |
| 587 | Contact to cart |
| 508 | Contact to order |
| 178 | Contact to invoice |
| 388 | Contact to payment |
| 470 | Contact to payment link |
| 296 | Contact to subscription |
| 907 | Contact to appointment |
| 861 | Contact to course |
| 883 | Contact to listing |
| 799 | Contact to service |
| 97 | Contact to feedback submission |
| 1243 | Contact to project |
| 609 | Contact to lead |
| 70 | Contact to quote |
| 703 | Signer contact to quote (for e-signatures) |
| 1227 | Billing contact to quote |
| 1375 | Contact to marketing event |