Scope requirements
Scope requirements
- List definition: stores essential information about the list.
- List memberships: mappings between the list and object record.
The legacy v1 lists API will be sunset on April 30th, 2026. If you’re using the v1 lists API, review the guide to transition to the v3 API.
List processing types
There are three types of list processing types:MANUAL, DYNAMIC, and SNAPSHOT.
MANUAL: this processing type indicates that object records can only be added to or removed from the list via manual actions by the user or API call. There is no list processing or list membership management done in the background by HubSpot’s systems. This type of list is helpful for when you need a set list of records that won’t change unless manually updated.DYNAMIC: this processing type gives the possibility to specify list filters to match records that will become list members. This type of list is processed in the background by HubSpot to ensure that the list only contains records that match the list’s filters. Whenever a record changes, it is reevaluated against the list’s filters and either added to or removed from it. This type of list is helpful for when you want to keep a running list that you expect to change over time.SNAPSHOT: list filters are specified at the time of list creation. After initial processing is completed, records can only be added to or removed from the list by manual actions. This type of list is helpful for when you want to create a list of records based on specific criteria, but don’t want that list to change automatically after initial processing.
Create a list
To create a list, make aPOST request to /crm/v3/lists.
In the request body, you must include the following fields: name, objectTypeId, and processingType. The filterBranch parameter is optional, and can be included to create branching logic for DYNAMIC and SNAPSHOT type lists. Learn more about configuring list filters and branches.
For example, the following request body would create a new static list of contacts:
listId (the ILS list ID) will be generated. This ID is used for future updates and modifications. The following is an example response with the ILS list ID highlighted:
Retrieve lists
Depending on your use case, there are multiple ways to retrieve lists. A list can be retrieved via the lists API by its name and object or by its ILS list ID. When retrieving lists, include a query parameter ofincludeFilters=true to return list filter definitions in the response.
To retrieve lists by other criteria (e.g., processing type), you can use the search API.
Retrieve by list name
To retrieve a list by name, make aGET request to /crm/v3/lists/object-type-id/{objectTypeId}/name/{listName}. The objectTypeId is the ID that corresponds to the type of object stored by the list. See the full list of object type IDs.
For example, to retrieve the contact list created above, make a GET request to /crm/v3/lists/object-type-id/0-1/name/My%20static%20list.
Retrieve by ILS List ID
A list’s ILS ID is returned in thelistId field when a new list is created. To find an existing list’s ILS ID, you can either:
- Navigate to the lists (segments) tool in HubSpot, then hover over the list and click Details. Learn more about viewing lists.
- Search for a list by other criteria, then view the
listIdin the response.
- To retrieve an individual list by ILS list ID, make a
GETrequest to/crm/v3/lists/{listId}. - To retrieve multiple lists by ILS list ID, make a
GETrequest to/crm/v3/listsand include alistIdsquery parameter for each list. For example:/crm/v3/lists?listIds=940&listIds=938.
Retrieve by searching list details
You can search for lists by other criteria by making aPOST request to /crm/v3/lists/search.
In the request body, specify the criteria that you want to search by.
- To search for lists that contain specific words in their name, include the
queryfield. - To search for lists of a specific processing type, include a
processingTypesarray with each of the processing types you want to search by. - To search for lists of a specific object, include the
objectTypeIdfield, with the type ID value for the object (e.g.,0-1for contacts).
Update lists
You can update a list’s name and its filters via the lists API.Update list name
To update a list’s name, make aPUT request to /crm/v3/lists/{listId}/update-list-name with the listName query parameter. If the list with the provided ILS list ID exists, then its name will be updated to the provided listName. The listName must be unique amongst all other public lists in the account.
You can also include a query parameter of includeFilters=true to return list filter definitions in the response.
For example, to change a list’s name (with the ILS ID 612) to “January Event Contacts List” and return filters, the request URL would be: /crm/v3/lists/612/update-list-name?listName=January%20Event%20Contacts%20List&includeFilters=true. Expand the section below to review an example of the expected response.
Update a list filter branch
To update aDYNAMIC list’s filter branches, make a PUT request to /crm/v3/lists/{listId}/update-list-filters. In the request body, include the updated filter branch definition. This definition will replace the existing definition, so make sure to include any filters you want to keep from the previous definition. Once the filter branch is updated, the list will begin processing its new memberships.
For example, your list includes a filter based on contact’s Likelihood to close (hs_predictivecontactscore_v2) that you want to keep. To add filters to include contacts with a value for email who also opted into certain email subscriptions, your request body would look like:
Delete and restore a list
To delete a list, make aDELETE request to /crm/v3/lists/{listId}.
Once deleted, lists can be restored within 90 days of deletion by making a PUT request to /crm/v3/lists/{listID}/restore. Lists deleted more than 90 days ago cannot be restored.
Manage list membership
To view and manage records included in a list, you can use the/memberships/ endpoints below. List membership endpoints that update memberships can only be used on MANUAL or SNAPSHOT list processing types.
DYNAMIC lists will add and remove records based on the filter criteria set. You cannot use list membership endpoints to update your list. Instead, edit the list’s filters or the record you want to add or remove.
Retrieve records with list memberships
To retrieve records with list memberships, you’ll need to make two calls: one to retrieve the records, then another to retrieve their list memberships. First, make aPOST request to /crm/v3/objects/{objectTypeId}/search with the object for which you want to search records (e.g.,0-1 for contacts). You can add filters to specify the records you want.
- To retrieve recently created records, filter by
createdate. - To retrieve recently updated records, filter by
lastmodifieddate.
id values to retrieve list membership details.
To retrieve an individual record’s memberships, make a GET request to /crm/v3/lists/records/{objectTypeId}/{recordId}/memberships. For example, to retrieve an individual contact’s memberships, your request URL would look like /crm/v3/lists/records/0-1/1234567/memberships.
Your response will look like:
POST request to /crm/v3/lists/records/memberships/batch/read. In the request, include the objectTypeId value of the object for which you’re retrieving records (e.g., 0-1 for contacts) and the id values for the records.
For example, to retrieve memberships for contacts 12345 and 67890, your request would look like:
View records in an existing list
To view all records in an existing list, make aGET request to /crm/v3/lists/{listId}/memberships. This returns all members of a list ordered by recordId.
Add records to an existing list
To add records to an existing list, make aPUT request to /crm/v3/lists/{listId}/memberships/add with a list of record IDs in the request body. For example, your request body would look like:
Remove records from an existing list
To remove all records from an existing list, make aDELETE request to /crm/v3/lists/{listId}/memberships. This will not delete the list from your account, but the list will contain no records.
To remove specific records from an existing list, make a PUT request to /crm/v3/lists/{listId}/memberships/remove with a list of record IDs in the request body. For example, your request body would look like:
Add and remove records in the same request
To both add records to and remove records from a list at the same time, make aPUT request to /crm/v3/lists/{listId}/memberships/add-and-remove. In the request body, include the recordIdsToAdd and recordIdsToRemove fields with the IDs of records to add and remove. For example, your request body would look like:
Add records from one list to another
To add all records from one list to another list, make aPUT request to /crm/v3/lists/{listId}/memberships/add-from/{sourceListId}. The listId is the list to add the records to and the sourceListId is the list to retrieve records from. You can move a limit of 100,000 records at a time.
Convert lists from active to static
You can convert existing active lists into static lists by scheduling the conversion for a specific date or based on inactivity. You can use the lists endpoints to schedule conversions, retrieve scheduled or past conversions, and delete scheduled conversions.Schedule or update a list conversion
To schedule a conversion or update an existing scheduled conversion, make aPUT request to /crm/v3/lists/{listId}/schedule-conversion.
In the request body, include one of the following conversionType values and the type’s related fields:
CONVERSION_DATE: schedules the conversion for a specific date. Includeyear,month, anddayfields to specify the desired date. This date must be in the future.INACTIVITY: schedules the conversion if the list hasn’t been active for a set amount of time, based on when the last record was added or removed. Include thetimeUnitfield to specify the unit of time (DAY,WEEK, orMONTH) and theoffsetfield to specify the amount of time after which the list is considered inactive. Only onetimeUnitcan be specified and theoffsetvalue must be positive.
- JSON
- JSON
Retrieve a list conversion
To retrieve information about a list’s conversion, make aGET request to /crm/v3/lists/{listId}/schedule-conversion. The response will include the requestedConversionTime object with the conversionType and the relevant fields for that type. If the list was already converted, the convertedAt field will be returned with the timestamp of the conversion.
For example, for a list that completed a conversion, your response would look similar to the following:
- JSON
Delete a scheduled list conversion
To delete a conversion, make aDELETE request to /crm/v3/lists/{listId}/schedule-conversion. If the conversion does not exist, a 404 will be returned.