canonical: https://jentic.com/apis/hubspot.com/hubspot-crm-lists

# HubSpot Lists

The HubSpot CRM Lists API manages static and active (filter-defined) lists for any CRM object - contacts, companies, deals, custom objects. It supports list creation, deletion, renaming, filter-definition updates, membership add and remove, search across lists, folder organisation, and translation between legacy and modern list IDs. Use it to build segmentation logic, drive marketing or workflow membership, or programmatically curate audiences for downstream automation.

## For AI agents

Create and manage HubSpot CRM lists, edit filter definitions, add and remove records from lists, and organise lists into folders.

## Scope

Does not handle marketing email sending, workflow execution, or contact property creation - use for HubSpot CRM list and membership management only.

## Capabilities

- Create static and active lists scoped to any object type with custom filter definitions
- Add or remove records from a static list, individually or in bulk via the add-and-remove endpoint
- Search across lists by name, type, or processing status
- Update a list's filter definition to change which records qualify for an active list
- Translate legacy v1 list IDs to modern v3 list IDs in batch for migration scripts
- Move lists between folders and rename folders for organisational hygiene

## Use cases

### Programmatic Audience Curation for Campaigns

Build a static list of contacts for a marketing send or workflow trigger by creating the list and then adding members in bulk. The Lists API exposes both a one-shot add endpoint and a combined add-and-remove endpoint, which is the right shape for incremental curation as new records qualify or fall out of scope. Lists of tens of thousands of members are routinely managed this way and feed directly into HubSpot Workflows.

Example prompt: POST /crm/v3/lists with a static list payload, capture the listId, then PUT /crm/v3/lists/{listId}/memberships/add with the contact IDs to add, in batches of up to 100.

### Migrate from Legacy List IDs

Older HubSpot integrations stored v1 list IDs that are not interchangeable with the modern v3 list IDs returned by current endpoints. The Lists API offers single and batch ID translation endpoints so a migration script can rewrite stored references in bulk without manual lookup. Translating thousands of legacy IDs typically completes in a single batch request.

Example prompt: POST /crm/v3/lists/idmapping with an array of legacy list IDs and persist the returned modern IDs against each downstream record in the migration script.

### Agent-Driven Active List Tuning

An AI agent that maintains marketing audiences can search for an active list by name, inspect its current filter definition, and update the filter when the underlying segmentation logic changes. Through Jentic, the agent finds the search and update operations by intent and chains them, which is useful for marketing-ops copilots that respond to brief updates.

Example prompt: Find the list with GET /crm/v3/lists/object-type-id/{objectTypeId}/name/{listName}, then PUT /crm/v3/lists/{listId}/update-list-filters with the revised filter branch.

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| GET | /crm/v3/lists/{listId} | Fetch a list by ID |
| DELETE | /crm/v3/lists/{listId} | Delete a list |
| PUT | /crm/v3/lists/{listId}/update-list-name | Rename a list |
| PUT | /crm/v3/lists/{listId}/update-list-filters | Update an active list's filter definition |
| PUT | /crm/v3/lists/{listId}/memberships/add | Add records to a list |
| PUT | /crm/v3/lists/{listId}/memberships/add-and-remove | Add and remove records in a single call |
| POST | /crm/v3/lists/search | Search lists by name, type, or status |

## Key resources

- **Lists** — Create, read, update, delete, and search static and active CRM lists
- **List memberships** — Add and remove records from a static list, individually or in bulk
- **List folders and ID mapping** — Folder organisation for lists and translation between legacy and modern list IDs

## Why Jentic

- **Setup:** Wiring HubSpot Lists by hand means implementing its OAuth2 authorization-code flow (or managing a private-app token), sending each call to api.hubapi.com with the correct list and membership payloads, and handling token refresh yourself. Through Jentic you install once, import HubSpot Lists from the API Directory, store the token once, and your agent calls it.
- **Permission scoping:** This API puts the list id in the URL path (/crm/v3/lists/{listId}/...), so a rule can pin your agent to one list: it can read that list and add memberships and nothing else. You choose the operations it may call, so a destructive path like list deletion is not included unless you add it.
- **Credential handling:** Your HubSpot token is stored once, encrypted, by your own Jentic One instance and injected at execution time. It never enters the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'add records to a HubSpot list' or 'search CRM lists', and Jentic returns the matching membership operation with its input schema, including listId and the member id array shape, so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **HubSpot CRM Contacts** — Lists are most commonly composed of contact records
- **HubSpot CRM Properties** — Active list filters reference contact and object properties
- **HubSpot CRM Custom Objects** — Lists can be scoped to custom object types in addition to standard objects

## FAQ

### What authentication does the HubSpot Lists API use?

OAuth 2.0 Bearer tokens or HubSpot Private App tokens in the Authorization header. Jentic stores the token encrypted in the vault and provides the agent with a scoped reference, so the raw token never enters the prompt.

### Can I create a list that auto-updates as records change?

Yes. Create the list with a filter definition (an active list) and the membership is recomputed automatically as records change in the portal. PUT /crm/v3/lists/{listId}/update-list-filters can revise that definition later.

### What are the rate limits for the HubSpot Lists API?

Standard HubSpot quotas apply: 100 requests per 10 seconds for OAuth apps and 110 for Private Apps, with daily caps that vary by Hub tier. Membership add and remove calls accept up to 100 record IDs per request, which is the recommended pattern for bulk curation.

### How do I add contacts to an existing list through Jentic?

Run pip install jentic, call client.search('add records to a HubSpot list'), client.load to get the schema for PUT /crm/v3/lists/{listId}/memberships/add, and client.execute with the listId and an array of contact IDs.

### Can I look up a list by name instead of ID?

Yes. GET /crm/v3/lists/object-type-id/{objectTypeId}/name/{listName} returns the list metadata for a given name and object type, which avoids storing list IDs in downstream systems.

### How do I migrate from legacy v1 list IDs to v3 IDs?

POST /crm/v3/lists/idmapping accepts an array of legacy list IDs and returns the corresponding modern IDs in a single call. This is the recommended pattern for migration scripts that have legacy IDs persisted against downstream records.

### Can I limit what my agent is allowed to do with the HubSpot Lists API?

Yes. Because you run Jentic One yourself, your own rules decide which operations and credentials the agent may use. Since this API carries the list ID in the URL path (/crm/v3/lists/{listId}/...), you can pin the agent to a single list and allow only the operations you intend, such as reading that list with GET /crm/v3/lists/{listId} and adding members with PUT /crm/v3/lists/{listId}/memberships/add. A destructive operation like DELETE /crm/v3/lists/{listId} stays out of reach unless you explicitly grant it.
