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

# HubSpot Listings

The HubSpot CRM Listings API provides a generic, object-type-parameterised CRUD and search interface for any standard or custom object in the portal. Endpoints accept an objectType path parameter so the same operations work for contacts, companies, deals, line items, products, tickets, quotes, listings, and any custom object schema the portal has defined. Use it when an integration or agent needs to operate over many object types from a single set of operations rather than wiring per-object endpoints.

## For AI agents

Generic CRUD plus batch and search endpoints for any HubSpot CRM object type, parameterised by an objectType path argument.

## Scope

Does not handle object schema definition, association schema management, or property type creation - use for record-level CRUD across object types only.

## Capabilities

- Create individual or batched records of any standard or custom object type via a single parameterised endpoint
- Search any object type by property filters using the generic /search endpoint
- Update records on any object type with single PATCH or batch update calls
- Archive records of any object type without permanently deleting them
- Upsert records of any object type by a unique external identifier property

## Use cases

### Generic Sync Across Many Object Types

Build a single sync engine that pushes data into HubSpot across contacts, companies, deals, and several custom object types without writing a per-object adapter for each. The objectType-parameterised endpoints accept the same request shape for every type, so the sync engine only needs to vary the path segment and the property map. This is the typical pattern for ETL pipelines and reverse-ETL tools that target HubSpot.

Example prompt: POST /crm/v3/objects/{objectType}/batch/upsert with objectType set to a custom object name and a 100-record batch keyed by an external_id property, then verify the response status counts.

### Search Across Custom Object Schemas

Power a unified search experience that runs the same property-filter query against contacts, companies, deals, and a portfolio of custom objects. The generic search endpoint accepts the same filterGroups shape regardless of objectType, so a single agent prompt or UI form can issue a fan-out search across the relevant types and merge the results.

Example prompt: POST /crm/v3/objects/{objectType}/search for each of contacts, companies, and a custom object schema, with the same filterGroups payload, and merge the results into a unified result set.

### Agent-Driven Custom Object Operations

An AI agent that operates against a HubSpot portal with several custom object schemas can use the generic endpoints to read, create, and update records without needing a dedicated tool per schema. Through Jentic, the agent finds the parameterised operation by intent, loads its schema, and executes against any objectType the user requests.

Example prompt: Given a user-supplied objectType and property map, call POST /crm/v3/objects/{objectType} to create the record, then GET /crm/v3/objects/{objectType}/{objectId} to confirm the persisted state.

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| POST | /crm/v3/objects/{objectType} | Create a record of the given object type |
| GET | /crm/v3/objects/{objectType} | List records of the given object type |
| GET | /crm/v3/objects/{objectType}/{objectId} | Read a specific record |
| PATCH | /crm/v3/objects/{objectType}/{objectId} | Update a specific record |
| POST | /crm/v3/objects/{objectType}/search | Search records by property filters |
| POST | /crm/v3/objects/{objectType}/batch/upsert | Upsert records by unique property |

## Key resources

- **Generic objects** — Parameterised CRUD plus batch read, create, update, archive, upsert, and search across any standard or custom object type

## Why Jentic

- **Setup:** Wiring HubSpot Generic CRM Objects 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 objectType in the path and matching property payloads, and handling token refresh yourself. Through Jentic you install once, import HubSpot Generic CRM Objects from the API Directory, store the token once, and your agent calls it.
- **Permission scoping:** This API puts the object type in the URL path (/crm/v3/objects/{objectType}/...), so a rule can pin your agent to one object type: it can read and write records of that type and no other. You choose the operations it may call, so a batch upsert 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 'create a record on a HubSpot custom object' or 'search records by property', and Jentic returns the parameterised operation with its input schema, including the objectType path argument, so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **HubSpot CRM Custom Objects** — Defines the custom object schemas that this generic endpoint operates over
- **HubSpot CRM Contacts** — Dedicated contacts API with object-specific behaviour
- **HubSpot CRM Associations** — Manages the association links between records of any two object types

## FAQ

### What authentication does the HubSpot generic objects 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 a scoped access reference to the agent rather than the raw secret.

### What does the objectType path parameter accept?

It accepts the object type slug or numeric objectTypeId for any standard object (contacts, companies, deals, line_items, products, tickets, quotes) or any custom object schema defined in the portal. The same operations work uniformly across all of them.

### What are the rate limits for this 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 subscription. Each batch call counts as a single request even though it can carry up to 100 records, which is the recommended pattern for high-volume sync.

### How do I create records on a custom object through Jentic?

Run pip install jentic, call client.search('create a record on a HubSpot custom object'), client.load to get the schema for POST /crm/v3/objects/{objectType}, and client.execute with the objectType slug and a properties map. The same operation also handles standard objects.

### When should I use this generic API instead of the dedicated per-object APIs?

Choose this API when an integration must operate uniformly across many object types or when the target type is a custom object that does not have a dedicated REST surface. The dedicated per-object APIs (CRM-contacts, CRM-deals, etc.) typically expose richer object-specific behaviour, so prefer them when the integration is scoped to a single type.

### Can I search by associations through this endpoint?

Yes. POST /crm/v3/objects/{objectType}/search accepts filterGroups that include filters on association references (for example, associations.deal). This lets you find records of one object type linked to a specific record of another.

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

Yes. Because this API carries the object type in the URL path (/crm/v3/objects/{objectType}/...), your self-hosted Jentic One instance lets you write a rule that pins the agent to a single object type, so it can read and write records of that type and nothing else. You also decide which operations it may call, so it can, for example, run a search or a single-record create while a batch upsert stays off the table unless you explicitly allow it. Your own rules, enforced by the instance you run, decide the operations and credentials the agent may use at execution time.
